11

上的LocalServer(一个SQL Server 2008 R2),我有个同义词叫做syn_view1指向链接服务器remoteserver.remotedb.dbo.view1性能的影响

这种缓慢的查询需要20秒运行。

select e.column1, e.column2 
from syn_view1 e 
where e.column3 = 'xxx' 
    and e.column4 = 'yyy' 
order by e.column1 

这种快速查询需要1秒运行。

select e.column1, e.column2 
from remoteserver.remotedb.dbo.view1 e 
where e.column3 = 'xxx' 
    and e.column4 = 'yyy' 
order by e.column1 

在两个查询唯一的区别是真正的代名词的存在。 显然,同义词会影响查询的性能。

的慢查询执行计划是:

Plan    Cost % Subtree cost 
4 SELECT 
I/O cost: 0.000000 CPU cost: 0.000000 Executes: 0 
Cost: 0.000000     0.00 3.3521 
    3 Filter 
    I/O cost: 0.000000 CPU cost: 0.008800 Executes: 1 
    Cost: 0.008800    0.26 3.3521 
     2 Compute Scalar 
     I/O cost: 0.000000 CPU cost: 3.343333 Executes: 1 
     Cost: 0.000000   0.00 3.3433 
      1 Remote Query 
      I/O cost: 0.000000 CPU cost: 3.343333 Executes: 1 
      Cost: 3.343333  99.74 3.3433 

而对于快速查询:

Plan   Cost % Subtree cost 
3 SELECT 
I/O cost: 0.000000 CPU cost: 0.000000 Executes: 0 
Cost: 0.000000    0.00 0.1974 
    2 Compute Scalar 
    I/O cost: 0.000000 CPU cost: 0.197447 Executes: 1 
    Cost: 0.000000   0.00 0.1974 
     1 Remote Query 
     I/O cost: 0.000000 CPU cost: 0.197447 Executes: 1 
     Cost: 0.197447  100.00 0.1974 

我的理解是,在慢速查询时,服务器会从所有数据远程服务器,然后应用过滤器(尽管没有索引),而在FAST查询中,服务器从远程服务器获取过滤的数据,从而使用远程索引。

快速时有什么方法可以使用同义词吗? 也许设置了链接的服务器?本地数据库服务器?

感谢您的帮助!

+0

建议在远程服务器上创建一个过程。 – 2013-03-08 12:54:59

+0

@AaronBertrand,它会改变什么? 索引是否会被使用?我能否避免在存储过程中指定链接服务器的完整限定名称? – 2013-03-11 06:24:05

+0

是的,是的。您可以为存储过程名称而不是视图创建同义词。 – 2013-03-11 11:00:16

回答

1

this post上dba.stacexchange.com接受的答案指出,可能发生由于链接服务器上限制访问权限查询在链接服务器的性能缺陷的,限制到本地服务器的表统计信息的可见性。这可能会影响查询计划,从而影响性能。

摘录:

这就是为什么我得到不同的结果。以系统管理员身份运行时,I 得到了完整的分配统计信息,表明订单ID> 20000时没有 行,估计值为一行。 (回想一下, 优化器从不假设统计数据为零)。但是,当 以普通用户身份运行时,DBCC SHOW_STATISTICS失败,并且出现 权限错误。此错误未被传播,但优化器接受没有统计信息并使用默认的 假设。由于它确实获得了基数信息,因此它了解到远程表有830行,估计有249行。

+0

我可以看到,如何查询到链接服务器的性能可能会遇到很多问题,但为什么同义词查询和链接表之间的区别;最终同义词给出了相同的连接,除非你建议在同义词本身上设置不同的访问权限? – PhillipH 2014-07-24 08:50:10

+1

@PhillipH:很明显*对于同义词,*有些不同;这种解释似乎足以导致观察到的性能下降,所以值得在远程服务器上检查。 – 2014-07-24 09:29:44

2

我将转储数据为了通过到本地服务器上的一个临时表。然后我会从临时表中选择顺序。秩序几乎总是杀手。