SQL Server 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 权限的方法值得一试。

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

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

 

posted @ 2021-09-12 08:58  itaru  阅读(1155)  评论(0编辑  收藏  举报