Affichage des plans de requête dans Server Management Studio

9

Une autre question du serveur SQL: j'ai une requête simple qui me donne le SQL le plus gourmand en CPU depuis la réinitialisation des compteurs:

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

Question 1: Quel est exactement le plan_handle? Cela ne semble pas être un hachage du plan, comme c'est le cas dans Oracle. Je pose la question parce que je veux pouvoir détecter la situation dans laquelle le plan d'une déclaration a changé.

Question 2: Une fois que j'ai un plan_handle, je suis intéressé par le plan réel. Je fais donc, par exemple:

select * from sys.dm_exec_query_plan (0x060006001F176406B8413043000000000000000000000000)

Dans la colonne query_plan, j'obtiens un lien qui, lorsque je clique, affiche un document XML. Si je l'enregistre sur le disque en tant que quelque chose.sqlplan, je peux double-cliquer dessus dans Windows et il s'affiche correctement dans Management Studio. Il doit sûrement y avoir un moyen d'éviter cette étape?!

Question 3: Existe-t-il un moyen de reconvertir le XML dans un format textuel, comme dans l'ancien temps de SET SHOWPLAN_TEXT? Je veux pouvoir les visualiser graphiquement, mais aussi les automatiser de manière significative.

Merci!

Gaius
la source

Réponses:

7

J'ai trouvé le conseil suivant dans le livre SQL Server 2008 Internals and Troubleshooting par Wrox Press:

Si vous utilisez SQL 2008 SSMS connecté à un serveur SQL 2005, lorsque vous cliquez sur le plan de requête XML, il charge automatiquement le plan de requête graphique pour vous.

J'ai vérifié que cela fonctionnait en utilisant la requête suivante du même livre:

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)

De plus, si vous ne l'avez pas encore consulté, consultez l'explorateur de plans gratuit de SQL Sentry. Vous devrez d'abord enregistrer le XML sur le disque en tant que .sqlplan, mais il offre une vue beaucoup plus facile à utiliser d'un plan d'exécution SQL. J'espère que quelqu'un trouvera un jour un outil Visual Execution Plan Diff. :RÉ

Jeff
la source
9

A1: Le plan_handle est un hachage pour un groupe d'instructions, ou batch.

A2: Non, le dm_exec_query_plan renvoie le plan de requête au format XML, vous devez donc cliquer dessus pour voir le graphique.

A3. Essaye ça:

SELECT query_plan 
FROM sys.dm_exec_text_query_plan (0x06000100A27E7C1FA821B10600,0,-1);
SQLRockstar
la source
1
Je reviens <ShowPlanXML xmlns="http://schemas.microsoft.com...mais il n'y a toujours aucun moyen de l'afficher directement - je dois d'abord l'enregistrer sur le disque en tant que .sqlplanfichier. Bizarre. Merci tho ':)
Gaius