如何在SQL Server中查找运行不正常的查询?
症状是我们的数据库服务器在运行从特定表中选择数据的存储过程时偶尔会发生超时异常。每周一次这样做。我们重新启动数据库,事情似乎正常运行。有时如果我们等几分钟,它会自行恢复。如何在SQL Server中查找运行不正常的查询?
在我们更改了一个大的(900k行)常见查询表上的问题表上的聚集索引之后,开始发生这种情况。
我们显然需要缓解这种情况,但是我们无法找到数据库服务器开始超时的场景。我已经检查了sys.dm_exec_query_stats
表,但似乎无法找到导致问题的特定存储过程,更不用说传递给该存储过程的值导致性能降低。
是否有某种更精细的SQL服务器日志记录我可以用来查找导致性能下降的特定查询或存储过程?然后,一旦我发现,有没有办法看到传递给存储过程的值或参数中的查询?
一种可能性是使用SQL Profiler(或一些类似的工具)指出速度慢的,并将精力集中在那里。
问题是在某些情况下ARITHABORT设置被设置为OFF,但是如果没有这个答案,我将无法找到答案。谢谢! –
我们的数据库管理员使用,有效地涉及到运行一个存储过程(每20秒左右)一个SQL代理作业记录了一个调用的输出sp_WhoIsActive到表的方法。 sp_WhoIsActive
可输出关于当前活动查询的各种有用信息,包括执行时间和执行计划。
这听起来像可能是很多事情。例如,你可能在表上没有足够的索引。执行计划说什么?是否有表扫描发生?
如果查询时间发生变化,则听起来像过时的统计信息。尝试更新统计信息,看看是否有帮助。
此外,只是一个侧面说明。如果您不希望SqlCommand对象超时,请将CommandTimeout设置为零。
您多久更新一次统计信息并重建索引? –