dm_exec_query_stats 每隔一段时间自动清空的原因

查询某个时间段内比较耗时的Sql语句

    SELECT TOP 10
           ST.text AS '执行的SQL语句',
           QS.execution_count AS '执行次数',
           QS.total_elapsed_time/1000 AS '耗时',--ms
           QS.last_worker_time/1000 AS '持续工作时间',
           QS.total_logical_reads AS '逻辑读取次数',
           QS.total_logical_writes AS '逻辑写入次数',
           QS.total_physical_reads AS '物理读取次数',       
           QS.creation_time AS '执行时间' ,  
           QS.*
    FROM   sys.dm_exec_query_stats QS
           CROSS APPLY 
    sys.dm_exec_sql_text(QS.sql_handle) ST
    WHERE  QS.creation_time BETWEEN '2021-09-11 12:50:00' AND '2021-09-11 18:10:00' 
ORDER BY  QS.total_elapsed_time DESC

在客户的数据库服务器以及公司内部的数据库服务器中,都能正常的执行。

但是自己的个人电脑(Win10, Sql Server 2017)上却只返回最近几秒执行过的Sql语句。

测试发现原来是dm_exec_query_stats会隔个几秒就清空一次。

1.猜测:QUERY_STORE没有开启的原因?

验证后,不是。

2.网上找到的可能原因1:AUTO_CLOSE开启了

查看后,并没有开启

3.网上找到的可能原因2:数据库服务的启动账号缺少 Lock Pages in memory(锁定内存页)权限。

有人遇到过相同问题,再加上这个,添加 Lock Pages in memory 权限的方法值得一试。

最终发现,确实是缺少了这个权限。

dm_exec_query_stats 每隔一段时间自动清空的原因

 

 

需要添加权限的账户是Sql Server配置管理器中的启动服务的用户,并需要重新启动服务。

dm_exec_query_stats 每隔一段时间自动清空的原因

 

上一篇:递归实现排列型枚举


下一篇:创新推出 | Serverless 场景排查问题利器:函数实例命令行操作