Exibindo planos de consulta no Server Management Studio

9

Outra pergunta do servidor SQL: Eu tenho uma consulta simples que fornece o SQL com mais uso intensivo de 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. Eu pergunto, porque quero ser capaz de detectar a situação na qual o plano de uma declaração tem alterações.

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, ao clicar, exibe um documento XML. Se eu salvá-lo no disco como o que seja. Sqlplan, posso clicar duas vezes no Windows e ele é exibido corretamente no Management Studio. Certamente deve haver uma maneira de evitar esse passo ?!

Pergunta 3: Existe uma maneira de converter o XML novamente em um formato de texto, como nos velhos tempos de SET SHOWPLAN_TEXT? Quero poder visualizá-los graficamente, mas também automatizá-los de alguma maneira significativa.

Obrigado!

Gaius
fonte

Respostas:

7

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áfica automaticamente.

Eu verifiquei que funcionava usando a seguinte consulta do mesmo livro:

select session_id, text, query_plan
from sys.dm_exec_requests
cross apply sys.dm_exec_sql_text(sql_handle)
cross apply sys.dm_exec_query_plan(plan_handle)

Além disso, se você ainda não viu, confira o Plan Explorer gratuito do SQL Sentry. Você precisará salvar o XML no disco como um .sqlplan primeiro, mas ele oferece uma visualização muito mais fácil de usar de um Plano de Execução SQL. Esperançosamente, alguém algum dia venha com uma ferramenta Diff do Plano de Execução Visual. : D

Jeff
fonte
9

A1: O plan_handle é um hash para um grupo de instruções ou lote.

A2: Não, o dm_exec_query_plan retorna o plano de consulta no formato XML; portanto, você precisa clicar nele para ver o gráfico.

A3 Tente o seguinte:

SELECT query_plan 
FROM sys.dm_exec_text_query_plan (0x06000100A27E7C1FA821B10600,0,-1);
SQLRockstar
fonte
11
Volto, <ShowPlanXML xmlns="http://schemas.microsoft.com...mas ainda não há como exibi-lo diretamente - preciso primeiro salvá-lo no disco como um .sqlplanarquivo. Esquisito. Obrigado tho ':)
Gaius