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

SQL Server-SHOWPLAN_ALL

In SQL Server können Sie den SET SHOWPLAN_ALL verwenden -Anweisung, um detaillierte Informationen darüber zurückzugeben, wie eine T-SQL-Anweisung ausgeführt wird, sowie Schätzungen der Ressourcenanforderungen für die Anweisungen.

SHOWPLAN_ALL gibt Informationen als eine Reihe von Zeilen zurück, die eine hierarchische Struktur bilden, die die Schritte darstellt, die der SQL Server-Abfrageprozessor bei der Ausführung jeder Anweisung ausführt. Es ähnelt SHOWPLAN_TEXT , außer dass SHOWPLAN_ALL gibt detailliertere Informationen zurück (und soll mit Anwendungen verwendet werden, die seine Ausgabe verarbeiten können).

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

Wenn SHOWPLAN_ALL 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).

Beachten Sie unbedingt, dass SHOWPLAN_ALL liefert Schätzungen der Ressourcenanforderungen und dass die tatsächlichen Ressourcenanforderungen abweichen können, wenn die Anweisung tatsächlich ausgeführt wird.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung.

SET SHOWPLAN_ALL ON;
GO

SELECT * FROM Cats;
GO

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

So sieht das Ergebnis in Azure Data Studio aus:

Und so sieht es in mssql-cli (Befehlszeilenschnittstelle) aus, wenn die vertikale Ausgabe verwendet wird:

Commands completed successfully.
-[ RECORD 1 ]-------------------------
StmtText           | 
SELECT * FROM Cats;
StmtId             | 1
NodeId             | 1
Parent             | 0
PhysicalOp         | NULL
LogicalOp          | NULL
Argument           | 1
DefinedValues      | NULL
EstimateRows       | 3
EstimateIO         | NULL
EstimateCPU        | NULL
AvgRowSize         | NULL
TotalSubtreeCost   | 0.0032853
OutputList         | NULL
Warnings           | NULL
Type               | SELECT
Parallel           | 0
EstimateExecutions | NULL
-[ RECORD 2 ]-------------------------
StmtText           |   |--Clustered Index Scan(OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F]))
StmtId             | 1
NodeId             | 2
Parent             | 1
PhysicalOp         | Clustered Index Scan
LogicalOp          | Clustered Index Scan
Argument           | OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F])
DefinedValues      | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName]
EstimateRows       | 3
EstimateIO         | 0.003125
EstimateCPU        | 0.0001603
AvgRowSize         | 142
TotalSubtreeCost   | 0.0032853
OutputList         | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName]
Warnings           | NULL
Type               | PLAN_ROW
Parallel           | 0
EstimateExecutions | 1
(2 rows affected)
Commands completed successfully.

Es gibt viele Spalten, also habe ich hier eine vertikale Ausgabe verwendet, damit es einfacher zu lesen ist.

Wenn meine Abfrage komplexer wäre, würden mehr Zeilen zurückgegeben werden.

Hier ist ein Beispiel für eine (etwas) komplexere Abfrage.

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

Ergebnis:

Wie man es ausschaltet

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

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

SET SHOWPLAN_ALL OFF;
GO

SELECT * FROM Cats;
GO

Ergebnis:

Commands completed successfully.
+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 1       | Meow      |
| 2       | Fluffy    |
| 3       | Scratch   |
+---------+-----------+
(3 rows affected)
Commands completed successfully.

Veraltet oder nicht?

Laut diesem alten MSDN-Artikel SET SHOWPLAN_ALL soll in zukünftigen Showplan-Versionen veraltet sein, und es wird empfohlen, dass Sie SET SHOWPLAN_XML verwenden stattdessen.

Dieser MSDN-Artikel bezieht sich jedoch auf SQL Server 2008 R2, und während ich dies schreibe, scheint er in SQL Server 2019 nicht veraltet zu sein. Tatsächlich erwähnt die aktuelle Dokumentation die Ablehnung nicht und ist nicht enthalten wenn ich eine Liste veralteter Elemente in SQL Server ausführe.

In jedem Fall lohnt es sich, dies zu berücksichtigen, bevor Sie es in zukünftigen Versionen verwenden.

Grafischer Ausführungsplan

Wenn Sie ein grafisches Tool wie SSMS oder Azure Data Studio verwenden, haben Sie möglicherweise die Möglichkeit, den geschätzten grafischen Abfrageausführungsplan für die aktuelle Abfrage anzuzeigen.

  • 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 .
  • In Azure Data Studio können Sie auf Erklären klicken Schaltfläche über dem Abfragefenster.

Sie können auch SET SHOWPLAN_XML ON verwenden um es zu aktivieren, und SET SHOWPLAN_XML OFF um es zu deaktivieren.