如何在SQL Server中找到运行缓慢的查询?

3
症状表现为,我们的数据库服务器在运行从特定表中选择数据的存储过程时偶尔会出现超时异常。这种情况每周发生一次左右。我们重新启动数据库,事情似乎就能正常运行。有时候,如果我们稍等几分钟,它就会自动恢复。
这种情况发生在我们更改了有问题的聚集索引之后,该索引针对的是一个经常查询的大型表(900k行)。
显然,我们需要采取措施来解决这个问题,但我们找不到导致数据库服务器超时的场景。我已经检查了sys.dm_exec_query_stats表,但我似乎找不到导致问题的特定存储过程,更不用说导致性能变慢的传递给存储过程的值了。
SQL Server 中是否有更精细的日志记录方式,可以帮助我查找导致性能变慢的特定查询或存储过程?那么,一旦我找到它,有没有办法查看传递给存储过程或查询的参数的值?

2
你多久更新统计信息和重建索引? - Mitch Wheat
3个回答

3

一种可能的方法是使用SQL Profiler(或类似工具)来指出较慢的部分,然后集中精力解决这些问题。


问题在于在某些情况下,ARITHABORT设置为OFF,但如果没有这个答案,我就无法找出这个问题。谢谢! - Brandon Montgomery

0

我们的数据库管理员使用一种有效的方法,即通过运行存储过程的 SQL 代理作业(每隔约 20 秒)将 sp_WhoIsActive 的调用输出记录到表中。 sp_WhoIsActive 可以输出有关当前活动查询的各种有用信息,包括执行时间和执行计划。


0

听起来可能有很多原因。例如,表上的索引不足。执行计划显示了什么?是否发生了表扫描?

如果查询时间变化,那么可能是过时的统计信息。尝试更新统计信息,看看是否有帮助。

另外,只是一个小提示。如果您不想在 SqlCommand 对象上设置超时,请将 CommandTimeout 设置为零。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接