Visualizzazione dei piani di query in Server Management Studio


9

Un'altra domanda del server SQL: ho una semplice query che mi dà l'SQL più intenso della CPU da quando sono stati ripristinati i contatori:

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

Domanda 1: che cos'è esattamente plan_handle? Non sembra essere un hash del piano, come in Oracle. Lo chiedo perché voglio essere in grado di rilevare la situazione in cui il piano di una dichiarazione è cambiato.

Domanda 2: Una volta che ho un plan_handle, sono interessato al piano reale. Quindi faccio, per esempio:

select * from sys.dm_exec_query_plan (0x060006001F176406B8413043000000000000000000000000)

Nella colonna query_plan ottengo un link che, quando faccio clic, visualizza un documento XML. Se lo salvo su disco come qualunque.sqlplan, posso fare doppio clic su Windows e viene visualizzato correttamente in Management Studio. Sicuramente ci deve essere un modo per evitare questo passaggio ?!

Domanda 3: c'è un modo per riconvertire l'XML in un formato testuale, come ai vecchi tempi di SET SHOWPLAN_TEXT? Voglio essere in grado di visualizzarli graficamente, ma anche di automatizzarli diffondendoli in qualche modo significativo.

Grazie!

Risposte:


7

Ho trovato il seguente suggerimento nel libro di SQL Server 2008 sulla risoluzione dei problemi interni e di Wrox Press:

Se si utilizza SQL 2008 SSMS connesso a un server SQL 2005, quando si fa clic sul piano di query XML, questo caricherà automaticamente il piano di query grafico.

Ho verificato che funzionava usando la seguente query dallo stesso libro:

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)

Inoltre, se non l'hai ancora visto, dai un'occhiata a Plan Explorer gratuito di SQL Sentry. Dovrai prima salvare l'XML su disco come .sqlplan, ma offre una vista molto più semplice da usare di un piano di esecuzione SQL. Si spera che qualcuno un giorno realizzerà uno strumento Diff per il piano di esecuzione visiva. : D


9

A1: plan_handle è un hash per un gruppo di istruzioni o batch.

A2: No, dm_exec_query_plan restituisce il piano di query in formato XML, quindi è necessario fare clic su di esso per visualizzare il grafico.

A3. Prova questo:

SELECT query_plan 
FROM sys.dm_exec_text_query_plan (0x06000100A27E7C1FA821B10600,0,-1);

1
Torno indietro <ShowPlanXML xmlns="http://schemas.microsoft.com...ma non c'è ancora modo di visualizzarlo direttamente: prima devo salvarlo su disco come .sqlplanfile. Strano. Grazie anche a :)
Gaio,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.