Sql server 2008 使用WHERE子句时间歇性慢速查询

Sql server 2008 使用WHERE子句时间歇性慢速查询,sql-server-2008,Sql Server 2008,我正在使用SQLServer2008,最近在查询数据库时遇到了间歇性问题 由于查询速度慢,我每天至少有一次与我们的许多应用程序超时。没有具体的时间发生这种情况;有时在早上,有时在下午。每次我开始排除故障时,它都会在几分钟内自行修复 通常我使用以下查询: 从人口统计中选择名称,其中名称不为空 它的运行时间小于1秒。然而,在这些“问题时间”中,查询将花费大约3分钟。一旦查询通过,我就可以再次运行它,它工作得很好(几乎是立即) 此外,当上面的查询运行时,我可以使用: 从人口统计中选择姓名 它运行得很好

我正在使用SQLServer2008,最近在查询数据库时遇到了间歇性问题

由于查询速度慢,我每天至少有一次与我们的许多应用程序超时。没有具体的时间发生这种情况;有时在早上,有时在下午。每次我开始排除故障时,它都会在几分钟内自行修复

通常我使用以下查询:

从人口统计中选择名称,其中名称不为空

它的运行时间小于1秒。然而,在这些“问题时间”中,查询将花费大约3分钟。一旦查询通过,我就可以再次运行它,它工作得很好(几乎是立即)

此外,当上面的查询运行时,我可以使用:

从人口统计中选择姓名

它运行得很好。不要耽搁。唯一的区别是
WHERE
子句。那么,从哪里开始故障排除?我应该使用什么工具来查找原因


提前感谢。

要做的第一件事是查看查询的执行计划。为此,请在ManagementStudio中打开一个查询窗口,然后在查询菜单中选择“包含实际执行计划”。运行查询,然后转到“执行计划”选项卡并保存计划


当您看到性能问题时,重复这些步骤。然后,加载两个执行计划,并比较它们,看看有什么不同。如果存在差异,它们可能会为您指出正确的方向以找到问题。

查看您在故障期间是否被另一个进程阻止。

感谢您提供有关执行计划的信息。事实证明,当我比较两者时,几乎没有任何区别。我将接受这个答案,因为它帮助最大。如果计划之间没有太大差异,那么问题很可能是由服务器上的其他进程引起的。您可以尝试使用SQL事件探查器,在持续时间列上设置一个过滤器,以便它只返回耗时超过10秒的查询,从而跟踪这些查询。然后,当问题发生时,查看概要文件数据,查看当查询运行缓慢时是否发生了任何其他情况。