Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
SQL-Datenbank in Microsoft Fabric
Dies bewirkt, dass Microsoft SQL Server Transact-SQL-Anweisungen nicht ausführt. Stattdessen gibt SQL Server detaillierte Informationen über die Ausführung der Anweisungen (einen Abfrageplan) sowie Schätzungen der Ressourcenanforderungen für die Anweisungen und erwarteten Zeilen (Kardinalitätsschätzung) zurück.
Transact-SQL-Syntaxkonventionen
Syntax
SET SHOWPLAN_ALL { ON | OFF }
Hinweise
Die Einstellung von SET SHOWPLAN_ALL wird zur Ausführung oder Laufzeit und nicht zur Analysezeit festgelegt.
Wenn SET SHOWPLAN_ALL auf ON festgelegt ist, gibt SQL Server Ausführungsinformationen zu jeder Anweisung zurück, ohne sie auszuführen, und Transact-SQL-Anweisungen werden nicht ausgeführt. Nachdem diese Option auf ON festgelegt wurde, werden Informationen zu allen weiteren Transact-SQL-Anweisungen zurückgegeben, bis die Option auf OFF festgelegt wird. Wenn beispielsweise eine CREATE TABLE Anweisung ausgeführt wird, während SET SHOWPLAN_ALL ON ist, liefert SQL Server eine Fehlermeldung von einer nachfolgenden SELECT-Anweisung mit derselben Tabelle, die die Benutzer darüber informiert, dass die angegebene Tabelle nicht existiert. Daher schlagen spätere Verweise auf diese Tabelle fehl. Wenn SET SHOWPLAN_ALL AUS ist, führt SQL Server die Anweisungen aus, ohne einen Bericht zu generieren.
SET SHOWPLAN_ALL ist dafür gedacht, von Anwendungen verwendet zu werden, die die entsprechende Ausgabe verarbeiten sollen. Verwenden SET SHOWPLAN_TEXT Sie, um lesbare Ausgaben für Microsoft Win32-Eingabeaufforderungsanwendungen wie das osql-Tool zurückzugeben.
SET SET SHOWPLAN_TEXT und SETSET SHOWPLAN_ALL dürfen in einem gespeicherten Verfahren nicht spezifiziert werden; sie müssen die einzigen Anweisungen in einem Batch sein.
SET SHOWPLAN_ALLgibt Informationen als eine Menge von Zeilen zurück, die einen hierarchischen Baum bilden, der die Schritte repräsentiert, die der SQL Server-Abfrageprozessor beim Ausführen jeder Anweisung ausführt. Jede in der Ausgabe widergespiegelte Anweisung enthält zuerst eine Zeile mit dem Text der Anweisung, auf die mehrere Zeilen mit den Details der Ausführungsschritte folgen. Die Tabelle zeigt die Spalten, die in der Ausgabe enthalten sind.
| Spaltenname | BESCHREIBUNG |
|---|---|
| StmtText | Für Zeilen, die nicht vom Typ PLAN_ROW sind, enthält diese Spalte den Text der Transact-SQL-Anweisung. Für Zeilen vom Typ PLAN_ROW enthält diese Spalte eine Beschreibung des Vorgangs. Diese Spalte enthält den physischen Operator und optional auch den logischen Operator. Auf die Spalte kann auch eine Beschreibung folgen, die vom physischen Operator bestimmt wird. Weitere Informationen finden Sie unter Referenz zu logischen und physischen Showplanoperatoren |
| StmtId | Nummer der Anweisung im aktuellen Batch. |
| NodeId | ID des Knotens in der aktuellen Abfrage. |
| Parent | Knoten-ID des übergeordneten Schrittes. |
| PhysicalOp | Algorithmus der physischen Implementierung für den Knoten. Nur für Zeilen vom Typ PLAN_ROWS. |
| LogicalOp | Relationaler algebraischer Operator, den dieser Knoten darstellt. Nur für Zeilen vom Typ PLAN_ROWS. |
| Argument | Gibt Zusatzinformationen zur durchgeführten Operation. Der Inhalt dieser Spalte hängt vom physischen Operator ab. |
| DefinedValues | Enthält eine Liste mit durch Trennzeichen getrennten Werten, die dieser Operator einführt. Die Werte können berechnete Ausdrücke aus der aktuellen Abfrage (z. B. aus der SELECT-Liste oder der WHERE-Klausel) oder interne Werte sein, die der Abfrageprozessor eingeführt hat, um diese Abfrage zu verarbeiten. Auf diese definierten Werte kann dann an anderer Stelle in dieser Abfrage verwiesen werden. Nur für Zeilen vom Typ PLAN_ROWS. |
| EstimateRows | Geschätzte Anzahl der Zeilen, die dieser Operator ausgibt. Nur für Zeilen vom Typ PLAN_ROWS. |
| EstimateIO | Geschätzte E/A-Kosten* für diesen Operator. Nur für Zeilen vom Typ PLAN_ROWS. |
| EstimateCPU | Geschätzte CPU-Kosten* für diesen Operator. Nur für Zeilen vom Typ PLAN_ROWS. |
| AvgRowSize | Geschätzte mittlere Zeilenlänge (in Bytes) der Zeile, die durch diesen Operator übergeben wird. |
| TotalSubtreeCost | Geschätzte (kumulierte) Kosten* dieses Vorgangs und aller untergeordneten Vorgänge. |
| OutputList | Enthält eine Liste mit durch Trennzeichen getrennten Spalten, die vom aktuellen Vorgang projiziert werden. |
| Warnings | Enthält eine Liste mit durch Trennzeichen getrennten Warnmeldungen, die die aktuelle Operation betreffen. Warnmeldungen können die Zeichenfolge "NO STATS:()" mit einer Spaltenliste enthalten. Diese Warnmeldung bedeutet, dass der Abfrageoptimierer versucht hat, eine Entscheidung auf der Grundlage der Statistik für diese Spalte zu treffen, wobei jedoch keine Statistik verfügbar war. Daher musste der Abfrageoptimierer eine Schätzung vornehmen, die möglicherweise zur Auswahl eines ineffizienten Abfrageplans führte. Für weitere Informationen zum Erstellen oder Aktualisieren von Spaltenstatistiken (die dem Abfrageoptimierer helfen, einen effizienteren Abfrageplan auszuwählen), siehe UPDATE STATISTICS. Diese Spalte kann optional die Zeichenfolge "MISSING JOIN PREDICATE" enthalten. Sie gibt an, dass ein Join (mit Tabellen) ohne Joinprädikat vorgenommen wird. Das unbeabsichtigte Löschen eines Joinprädikats kann zu einer Abfrage führen, die eine erheblich längere Ausführungszeit als erwartet hat und ein sehr umfangreiches Resultset zurückgibt. Wenn diese Warnung besteht, überprüfen Sie, ob das Fehlen des Joinprädikats absichtlich ist. |
| Type | Der Knotentyp. Für den übergeordneten Knoten jeder Abfrage ist dies der Transact-SQL-Anweisungstyp (zum Beispiel SELECT, INSERT, EXECUTE und so weiter). Für untergeordnete Knoten, die Ausführungspläne darstellen, ist der Typ PLAN_ROW. |
| Parallel |
0 = Operator wird nicht parallel ausgeführt. 1 = Operator wird parallel ausgeführt. |
| EstimateExecutions | Geschätzte Anzahl der Ausführungen dieses Operators, die während der Ausführung der aktuellen Abfrage ausgeführt werden. |
*Kosteneinheiten basieren auf einer internen Zeitmessung und nicht auf der normalen Uhrzeit. Sie werden zur Ermittlung der relativen Kosten eines Plans im Vergleich zu anderen Plänen verwendet.
Berechtigungen
Um zu nutzen SETSET SHOWPLAN_ALL, müssen Sie ausreichende Berechtigungen haben, um die Anweisungen auszuführen, auf denen SETSET SHOWPLAN_ALL ausgeführt wird, und Sie benötigen SHOWPLAN-Berechtigung für alle Datenbanken, die referenzierte Objekte enthalten.
Für SELECT-, INSERT, UPDATE, DELETE, EXEC stored_procedure- und EXEC user_defined_function-Anweisungen muss der Benutzer zur Erstellung eines Showplans:
Die Berechtigungen für die Ausführung der Transact-SQL-Anweisungen
Die SHOWPLAN-Berechtigung für alle Datenbanken mit Objekten, auf die von den Transact-SQL-Anweisungen verwiesen wird, wie z. B. Tabellen, Sichten usw.
Für alle anderen Anweisungen wie DDL, USE database_name,SET , DECLARE, dynamisches SQL usw. werden nur die entsprechenden Berechtigungen zur Ausführung der Transact-SQL-Anweisungen benötigt.
Beispiele
Die beiden folgenden Anweisungen nutzen die SET SHOWPLAN_ALL Einstellungen, um zu zeigen, wie SQL Server die Verwendung von Indizes in Abfragen analysiert und optimiert.
In der ersten Abfrage wird der Vergleichsoperator (=) in der WHERE-Klausel auf eine indizierte Spalte angewendet. Daher wird in der LogicalOp-Spalte der Wert Clustered Index Seek und in der Argument-Spalte der Indexname angezeigt.
In der zweiten Abfrage wird der LIKE-Operator in der WHERE-Klausel verwendet. Deshalb muss SQL Server eine Überprüfung des gruppierten Index ausführen und die Daten finden, die die Bedingung in der WHERE-Klausel erfüllen. Als Folge werden in der LogicalOp-Spalte der Wert Clustered Index Scan und in der Argument-Spalte der Indexname angezeigt. Weiterhin werden in der LogicalOp-Spalte der Wert Filter und in der Argument-Spalte die Bedingung aus der WHERE-Klausel angezeigt.
Die Werte in den Spalten EstimateRows und TotalSubtreeCost sind bei der ersten indizierten Abfrage kleiner, was auf eine deutlich schnellere Verarbeitung und die Verwendung weniger Ressourcen als bei der nicht indizierten Abfrage hinweist.
USE AdventureWorks2022;
GO
SET SHOWPLAN_ALL ON;
GO
-- First query.
SELECT BusinessEntityID
FROM HumanResources.Employee
WHERE NationalIDNumber = '509647174';
GO
-- Second query.
SELECT BusinessEntityID, EmergencyContactID
FROM HumanResources.Employee
WHERE EmergencyContactID LIKE '1%';
GO
SET SHOWPLAN_ALL OFF;
GO
Weitere Informationen
SET Anweisungen (Transact-SQL)
SET SHOWPLAN_TEXT (Transact-SQL)
SET SHOWPLAN_XML (Transact-SQL)