在我们的生产系统中,查询有时会“停滞”。在停止时,sp_whoisactive 中没有显示增加的资源使用(CPU、读取),并且没有阻塞。
在回顾性诊断中,我们可以看到 sys.dm_db_stats_properties 显示 last_updated 大约在查询“停滞”时。
我们想要做的是——当我们看到一个停滞的查询时——然后确定正在进行哪些自动统计更新。
因为我们想要临时执行此操作,也因为我们不想影响生产性能,所以使用分析器可能不是我们的选择。
(如果没有办法进行临时决定,那么也许我们将不得不考虑扩展事件或其他一些影响较小的先发制人跟踪)。
我们的版本是 2014,但对更高版本的回答也很有用。
Eri*_*ing 10
SQL Server 2019 引入了一个等待统计来跟踪这个。在早期版本中,您只能使用 traces/XE。请参阅我关于新等待统计数据的帖子:
要在以前的版本上使用 XE,您要查找的事件是 auto_stats。让您入门的最低限度的会话如下所示:
CREATE EVENT SESSION auto_stats
ON SERVER
ADD EVENT sqlserver.auto_stats
ADD TARGET package0.event_file
( SET filename = N'auto_stats' );
Run Code Online (Sandbox Code Playgroud)
尽管您可能希望针对您关心的数据库或表对其进行特定配置,但我肯定希望过滤持续时间(WHERE [duration] > 1000000
将是一秒)或其他内容,因为否则它会非常嘈杂。
归档时间: |
|
查看次数: |
367 次 |
最近记录: |