我正在使用以下代码来提取我们的前 20 个查询(按 CPU 排序):
SELECT TOP 20 qs.sql_handle
,qs.execution_count
,qs.total_worker_time AS [Total CPU]
,qs.total_worker_time / 1000000 AS [Total CPU in Seconds]
,(qs.total_worker_time / 1000000) / qs.execution_count AS [Average CPU in Seconds]
,qs.total_elapsed_time
,qs.total_elapsed_time / 1000000 AS [Total Elapsed Time in Seconds]
,st.TEXT
,qp.query_plan
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp
ORDER BY qs.total_worker_time DESC
但是,我看到了这个:
任何人都可以解释为什么查询计划和 SQL 文本显示为 NULL 吗?它们是某种系统进程还是外部应用程序?我们正在运行 SQL 2008 R2。
谢谢,一如既往,大家!
使用时有限制
sys.dm_exec_query_plan
5.4 何时以及如何使用 Sys.dm_exec_text_query_plan
最好不要重新发明轮子,而是使用Brent 的 -sp_BlitzCache或Glenn 的诊断查询。或亚伦在这里的回答。
从使用 DMV 的 SQL Server 查询性能分析:
就 Statement Text 而言
NULL
,当从中选择文本时,加密对象sys.dm_exec_sql_text
的text
值为NULL 。从 中检查
encrypted
记录的值sys.dm_exec_sql_text
。