Estou usando o seguinte código para extrair nossas 20 principais consultas (ordenadas por 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
No entanto, estou vendo isso:
Alguém pode esclarecer por que o plano de consulta e o texto SQL estão aparecendo NULL? Eles são algum tipo de processo do sistema ou aplicativo externo? Estamos executando o SQL 2008 R2.
Obrigado, como sempre, a todos!
Existem limitações ao usar
sys.dm_exec_query_plan
5.4 Quando e como usar Sys.dm_exec_text_query_plan
Em vez de reinventar a roda , o melhor é usar as consultas de diagnóstico de Brent's-sp_BlitzCache ou Glenn . ou a resposta de Aaron aqui .
Da análise de desempenho de consulta do SQL Server usando DMVs :
Em termos de Texto de Declaração
NULL
, ao selecionar o texto desys.dm_exec_sql_text
, otext
valor é NULL para objetos criptografados .Verifique o
encrypted
valor do registro desys.dm_exec_sql_text
.