SQL Server 链接服务器和直接查询之间的性能差异

Nic*_*ick 6 performance sql-server linked-server

直接连接到远程 sql 服务器的 Management Studio 查询窗格SELECT * FROM table在不到2 秒的时间内执行并显示 ( )的简单表查询。

相同的 Management Studio,但现在来自本地连接的查询窗格,在本地定义的链接服务器 (SQLNCLI10) 上执行相同的查询现在需要7 秒

比较客户端统计数据,虽然在两种情况下服务器往返次数均为 1,但我确实看到第一个中的“客户端处理”仅为1794ms,而在链接服务器上为5741ms。链接服务器上的“服务器回复等待时间”也高于967ms187ms

这是两端的 SQL Server 2008 R2 64 并且在同一个域中。

谁能解释一下?

Dar*_*ait 3

一些简单的想法:

本地服务器启动与远程服务器的连接,运行查询并从远程服务器获取适当的行。这一切都需要时间。更糟糕的是,如果您使用 SQL Profiler 跟踪此类活动,您可能会发现行一次从远程服务器提取到本地服务器,或者以非常小的批次进行。这是非常低效的,并且获取的行越多,情况就会变得越来越糟。

如果所有数据都是本地的,则不会发生上述情况,并且可以更快地检索数据,尤其是当数据位于数据缓存中时。

即使远程服务器上的表可能有索引,SQL 也可能无法利用它们,但它可以构建一个利用索引的本地查询计划。

对于非常大的远程结果集(就数据大小而言),您可能会遇到 SQL 需要增加数据或日志文件以容纳数据的问题。7 秒可能不符合条件,因为它可能不会带回太多数据。

最后,如果远程查询是针对生产系统,而本地查询是针对开发或测试系统,则生产服务器上的负载(开发服务器上不存在)可能会导致远程查询阻塞。这也会降低远程查询的观察到的性能。