Outra pergunta do servidor SQL: tenho uma consulta simples que me fornece o SQL mais intensivo da CPU desde que os contadores foram redefinidos:
select top 10
sum(qs.total_worker_time) as total_cpu_time,
sum(qs.execution_count) as total_execution_count,
qs.plan_handle, st.text
from
sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.plan_handle) as st
group by qs.plan_handle, st.text
order by sum(qs.total_worker_time) desc
Pergunta 1: O que exatamente é o plan_handle
? Não parece ser um hash do plano, como no Oracle. Pergunto porque quero poder detectar a situação em que o plano de um enunciado mudou.
Pergunta 2: Depois de ter um plan_handle, estou interessado no plano real. Então eu faço, por exemplo:
select * from sys.dm_exec_query_plan (0x060006001F176406B8413043000000000000000000000000)
Na coluna query_plan recebo um link que quando clico exibe um documento XML. Se eu salvá-lo no disco como qualquer.sqlplan, posso clicar duas vezes nele no Windows e ele é exibido corretamente no Management Studio. Certamente deve haver uma maneira de evitar esta etapa?!
Questão 3: Existe uma maneira de converter o XML de volta em um formato textual, como nos velhos tempos de SET SHOWPLAN_TEXT? Quero poder visualizá-los graficamente, mas também automatizar a diferenciação de alguma forma significativa.
Obrigado!
A1: O plan_handle é um hash para um grupo de instruções ou lote.
R2: Não, o dm_exec_query_plan retorna o plano de consulta em formato XML, então você precisa clicar nele para ver o gráfico.
A3. Tente isto:
Encontrei a seguinte dica no livro SQL Server 2008 Internals and Troubleshooting da Wrox Press:
Se você usar o SQL 2008 SSMS conectado a um SQL 2005 Server, ao clicar no plano de consulta XML, ele carregará o plano de consulta gráfico para você automaticamente.
Eu verifiquei que funcionou usando a seguinte consulta do mesmo livro:
Além disso, se você ainda não deu uma olhada, confira o Plan Explorer gratuito do SQL Sentry. Você terá que salvar o XML no disco como um .sqlplan primeiro, mas ele oferece uma visão muito mais fácil de usar de um Plano de Execução SQL. Esperançosamente, algum dia alguém criará uma ferramenta Visual Execution Plan Diff. :D