Anzeigen von Abfrageplänen in Server Management Studio

9

Eine weitere Frage zum SQL Server: Ich habe eine einfache Abfrage, die mir das CPU-intensivste SQL seit dem Zurücksetzen der Zähler bietet:

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

Frage 1: Was genau ist das plan_handle? Es scheint kein Hash des Plans zu sein, wie es in Oracle der Fall ist. Ich frage, weil ich in der Lage sein möchte, die Situation zu erkennen, in der sich der Plan einer Erklärung geändert hat.

Frage 2: Sobald ich einen plan_handle habe, interessiert mich der eigentliche Plan. So mache ich zum Beispiel:

select * from sys.dm_exec_query_plan (0x060006001F176406B8413043000000000000000000000000)

In der Spalte query_plan erhalte ich einen Link, der beim Klicken ein XML-Dokument anzeigt. Wenn ich es als Whatever.sqlplan auf der Festplatte speichere, kann ich es in Windows doppelklicken und es wird in Management Studio korrekt angezeigt. Sicherlich muss es einen Weg geben, diesen Schritt zu vermeiden?!

Frage 3: Gibt es eine Möglichkeit, das XML wieder in ein Textformat zu konvertieren, wie in den alten Tagen von SET SHOWPLAN_TEXT? Ich möchte sie grafisch anzeigen können, aber auch automatisieren, um sie auf sinnvolle Weise zu unterscheiden.

Vielen Dank!

Gaius
quelle

Antworten:

7

Ich habe den folgenden Tipp im SQL Server 2008-Buch Interna und Fehlerbehebung von Wrox Press gefunden:

Wenn Sie SQL 2008 SSMS verwenden, das mit einem SQL 2005 Server verbunden ist, wird beim Klicken auf den XML-Abfrageplan der grafische Abfrageplan automatisch für Sie geladen.

Ich habe anhand der folgenden Abfrage aus demselben Buch überprüft, ob es funktioniert:

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)

Wenn Sie es sich noch nicht angesehen haben, lesen Sie den kostenlosen Plan Explorer von SQL Sentry. Sie müssen das XML zuerst als .sqlplan auf der Festplatte speichern, aber es bietet eine viel einfacher zu verwendende Ansicht eines SQL-Ausführungsplans. Hoffentlich wird irgendwann jemand ein Visual Execution Plan Diff-Tool entwickeln. : D.

Jeff
quelle
9

A1: Das plan_handle ist ein Hash für eine Gruppe von Anweisungen oder einen Stapel.

A2: Nein, der dm_exec_query_plan gibt den Abfrageplan im XML-Format zurück. Sie müssen also darauf klicken, um das Diagramm anzuzeigen.

A3. Versuche dies:

SELECT query_plan 
FROM sys.dm_exec_text_query_plan (0x06000100A27E7C1FA821B10600,0,-1);
SQLRockstar
quelle
1
Ich komme zurück, <ShowPlanXML xmlns="http://schemas.microsoft.com...aber es gibt immer noch keine Möglichkeit, es direkt anzuzeigen - ich muss es zuerst als .sqlplanDatei auf der Festplatte speichern. Seltsam. Danke tho ':)
Gaius