如何高效在远程服务器执行Stored Procedure?跨节点调用执行位置与性能问询
问题1:跨服务器调用的StoredProcedure2执行位置
你通过[Remote2].[db].[schema].[StoredProcedure2]语法调用部署在Remote2的存储过程时,StoredProcedure2的所有运算逻辑实际在Remote2上执行。
Remote1仅作为调用发起方,把输入参数序列化后通过跨服务器连接传给Remote2,待Remote2执行完存储过程后,再接收返回的执行结果/状态,自身不会参与StoredProcedure2的运算。
问题2:两种部署方案的耗时是否一致
二者耗时完全不一致。
如果把StoredProcedure2的逻辑迁移到Remote1上,运算逻辑将在Remote1本地执行,所有涉及Remote2数据的查询、更新操作都需要跨服务器进行:你需要先把Remote2中待处理的数据集拉取到Remote1本地计算,处理完成后再把更新指令同步回Remote2,会产生大量额外的跨服务器数据传输开销,耗时必然远高于第一种方案。
问题3:哪种方案执行效率更高
直接调用Remote2上存储过程的第一种方案效率更高,核心优势包括:
- 跨服务器传输的数据量极小,仅需要传递
@output1、@output2两个参数,没有额外的业务数据传输开销 - 所有存储过程逻辑在Remote2本地执行,可直接复用Remote2本地的表索引、执行计划缓存、磁盘IO性能,无需跨节点拉取数据
- 避免了分布式查询的额外解析、校验开销,也不会触发分布式事务(如果你的逻辑涉及事务操作的话)的额外损耗
内容的提问来源于stack exchange,提问作者Liam neesan
相关产品推荐
相关产品推荐

