Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Funktionsweise von SHOWPLAN_XML in SQL Server

In SQL Server können Sie das SET SHOWPLAN_XML verwenden -Anweisung, um detaillierte Informationen darüber zurückzugeben, wie eine T-SQL-Anweisung in Form eines wohldefinierten XML-Dokuments ausgeführt wird.

Es ähnelt SHOWPLAN_ALL , außer dass SHOWPLAN_ALL gibt seinen Datensatz von Zeilen zurück, die einen hierarchischen Baum bilden.

Sie können SHOWPLAN_XML festlegen entweder auf ON oder OFF .

Wenn SHOWPLAN_XML ist ON , werden alle nachfolgenden T-SQL-Anweisungen nicht ausgeführt. Stattdessen gibt SQL Server Ausführungsinformationen für die Anweisung zurück (ohne sie auszuführen).

Beispiel

Hier ist ein Beispiel zur Veranschaulichung.

SET SHOWPLAN_XML ON;
GO

SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO

Beachten Sie, dass SET SHOWPLAN_XML kann nicht innerhalb einer gespeicherten Prozedur angegeben werden und muss die einzige Anweisung in einem Stapel sein.

Das Ergebnis, das Sie erhalten, kann davon abhängen, welches Tool Sie für den Zugriff auf SQL Server verwenden.

Wenn ich dies in Azure Data Studio ausführe, kann ich auf die verschiedenen Registerkarten klicken, um eine andere Ansicht des Ergebnisses zu erhalten.

Die Ergebnisse Registerkarte zeigt den rohen XML-String an:

Ein Klick auf die Zeile öffnet das XML-Dokument in einem neuen Tab:

Der Abfrageplan Registerkarte zeigt eine grafische Darstellung des Ergebnisses:

Die Top-Operationen tab präsentiert die Daten in tabellarischer Form, die es Ihnen ermöglicht, die Daten nach verschiedenen Metriken zu sortieren:

Funktioniert nicht?

Wenn es bei Ihnen nicht funktioniert, vergewissern Sie sich, dass Sie tatsächlichen Ausführungsplan einschließen ist in SSMS nicht ausgewählt. Wenn dies ausgewählt ist, SET SHOWPLAN_XML ON erzeugt keine XML-Showplan-Ausgabe.

Wie man es ausschaltet

Sie können es ausschalten, indem Sie SET SHOWPLAN_XML OFF verwenden .

Sobald Sie dies getan haben, werden nachfolgende Anweisungen wie gewohnt ausgeführt.

SET SHOWPLAN_XML OFF;
GO

SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO

Ergebnis:

Commands completed successfully.
+---------+-----------+---------+-----------+-----------+
| CatId   | CatName   | DogId   | DogName   | GoodDog   |
|---------+-----------+---------+-----------+-----------|
| 2       | Fluffy    | 2       | Fluffy    | 0         |
+---------+-----------+---------+-----------+-----------+
(1 row affected)
Commands completed successfully.

Ausführungsplan in GUIs

Wenn Sie ein grafisches Tool wie SSMS oder Azure Data Studio verwenden, haben Sie möglicherweise eine Verknüpfungsoption zum Anzeigen des geschätzten grafischen Abfrageausführungsplans. Dadurch können Sie den Abfrageplan anzeigen, ohne SET SHOWPLAN_XML ON ausführen zu müssen .

So führen Sie einen geschätzten Abfrageplan aus:

  • In SSMS können Sie Strg + L verwenden um dies zu tun. Oder Sie können auf Geschätzten Ausführungsplan anzeigen klicken oder klicken Sie mit der rechten Maustaste in das Abfragefenster und wählen Sie Geschätzten Ausführungsplan anzeigen aus . Dies erspart Ihnen das Umschalten von SHOWPLAN_XML in Ihrem Code ein- und ausschalten.
  • In Azure Data Studio können Sie auf Erklären klicken Schaltfläche über dem Abfragefenster.

Sie können auch einen tatsächlichen Abfrageplan ausführen:

  • In SSMS auf der Abfrage Klicken Sie im Menü auf Aktuellen Ausführungsplan einschließen oder klicken Sie auf Aktuellen Ausführungsplan einschließen Symbolleistenschaltfläche.
  • Gehen Sie in Azure Data Studio zu Ansicht> Befehlspalette und geben Sie Aktuelle Abfrage mit aktuellem Plan ausführen ein .

Beachten Sie, dass wenn Aktuellen Ausführungsplan einbeziehen in SSMS ausgewählt ist, das SET SHOWPLAN_XML ON erzeugt keine XML-Showplan-Ausgabe. Versuchen Sie, Aktuellen Ausführungsplan einschließen zu löschen Taste, bevor Sie dieses SET verwenden Option.

Ich finde jedoch, dass Azure Data Studio das Gegenteil tut SHOWPLAN_XML ON scheint die Run Current Query with Actual Plan zu überschreiben Option, außer wenn ich Explain ausführe zuerst (geschätzter Abfrageplan), danach aktuelle Abfrage mit aktuellem Plan ausführen plötzlich funktioniert (die Actual Rows und Tatsächliche Hinrichtungen Spalten der Top-Operationen tab gibt die entsprechenden Daten zurück).

Es ist wahrscheinlich am besten, die XML-Showplan-Option zu deaktivieren, bevor Sie andere Methoden zum Abrufen des Abfrageplans verwenden.