我们在SQL server上遇到了一个缓慢的查询问题。
我们有一些软件在查询中使用SQL Server侦听器的虚拟主机名,这导致查询性能缓慢。
UPDATE table SET
status = 1
FROM [HOSTNAMEOFSQLLISTENER].database.dbo.things AS things
WHERE bar = foo看一下执行计划,它把所有的时间都花在了“远程扫描”阶段,我不知道为什么会这样。
奇怪的是,当运行以下查询时,将侦听器的IP地址替换为侦听器指向的SQL服务器的IP地址(如果通过管理工作室通过侦听器连接到SQL服务器,则确保它是同一台服务器),执行计划是合理的(使用索引),查询在一小部分时间内完成。
UPDATE table SET
status = 1
FROM [HOSTNAMEOFSQLSERVERDIRECTLY].database.dbo.things AS things
WHERE bar = foo显然,这种行为在SQLServer2008并不是一个问题,但我还没有得到证实。
所以我有两个问题:
1)为什么执行计划不同?
2)在这些场景中,是否将侦听器的IP地址视为最佳实践?
干杯
艾伦
发布于 2013-12-04 22:41:12
问题归结为无法读取链接服务器上的表统计信息,因此查询优化器不知道从哪里开始。shea/archive/2009/07/21/performance-impact-linked-server-security-configuration-and-how-it-can-hurt-you.aspx
如果您没有真正地来回传递数据,那么首先要尝试的是将更新封装在存储的proc中。
https://stackoverflow.com/questions/20381644
复制相似问题