查询某个时间段内比较耗时的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配置管理器中的启动服务的用户,并需要重新启动服务。