SET SHOWPLAN_ALL (Transact-SQL)

 

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)jaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse

Bewirkt, dass Microsoft SQL Server Transact-SQL-Anweisungen nicht ausführt. Stattdessen gibt SQL Server detaillierte Informationen darüber zurück, wie die Anweisungen ausgeführt werden, und stellt Schätzungen zu Ressourcenanforderungen für die Anweisungen bereit.

Topic link icon Transact-SQL-Syntaxkonventionen

  
SET SHOWPLAN_ALL { ON | OFF }  

Die Einstellung von SET SHOWPLAN_ALL wird zur Ausführungszeit und nicht zur Analysezeit festgelegt.

Wenn SET SHOWPLAN_ALL auf ON festgelegt ist, gibt SQL Server Informationen zur Ausführung jeder Anweisung zurück, ohne sie jedoch 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 z. B. eine CREATE TABLE-Anweisung ausgeführt wird, während SET SHOWPLAN_ALL auf ON festgelegt ist, gibt SQL Server bei einer nachfolgenden SELECT-Anweisung, die dieselbe Tabelle betrifft, eine Fehlermeldung zurück, in der der Benutzer informiert wird, dass diese Tabelle nicht vorhanden ist. Daher schlagen spätere Verweise auf diese Tabelle fehl. Wenn SET SHOWPLAN_ALL auf OFF festgelegt 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 seine Ausgabe verarbeiten. Verwenden Sie SET SHOWPLAN_TEXT, um lesbare Ausgabe für Microsoft Win32-eingabeaufforderungsanwendungen, zurückgeben, z. B. die Osql Hilfsprogramm.

SET SHOWPLAN_TEXT und SET SHOWPLAN_ALL können nicht in einer gespeicherten Prozedur angegeben werden; diese Anweisungen müssen die einzigen Anweisungen in einem Batch sein.

SET SHOWPLAN_ALL gibt ein Rowset in Form einer hierarchischen Baumstruktur zurück, die zeigt, welche Schritte vom SQL Server-Abfrageprozessor beim Ausführen einer Anweisung ausgeführt werden. 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.

SpaltennameDescription
StmtTextFü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 Showplan logischen und physischen Operatoren Verweis.
StmtIdNummer der Anweisung im aktuellen Batch.
NodeIdID des Knotens in der aktuellen Abfrage.
ÜbergeordneteKnoten-ID des übergeordneten Schrittes.
PhysicalOpAlgorithmus der physischen Implementierung für den Knoten. Nur für Zeilen vom Typ PLAN_ROWS.
LogicalOpRelationaler algebraischer Operator, den dieser Knoten darstellt. Nur für Zeilen vom Typ PLAN_ROWS.
ArgumentGibt Zusatzinformationen zur durchgeführten Operation. Der Inhalt dieser Spalte hängt vom physischen Operator ab.
DefinedValuesEnthä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.
EstimateRowsGeschätzte Anzahl der Zeilen, die dieser Operator ausgibt. Nur für Zeilen vom Typ PLAN_ROWS.
EstimateIOGeschätzte E/A-Kosten* für diesen Operator. Nur für Zeilen vom Typ PLAN_ROWS.
EstimateCPUGeschätzte CPU-Kosten* für diesen Operator. Nur für Zeilen vom Typ PLAN_ROWS.
AvgRowSizeGeschätzte mittlere Zeilenlänge (in Bytes) der Zeile, die durch diesen Operator übergeben wird.
TotalSubtreeCostGeschätzte (kumulierte) Kosten* dieses Vorgangs und aller untergeordneten Vorgänge.
AusgabelisteEnthält eine Liste mit durch Trennzeichen getrennten Spalten, die vom aktuellen Vorgang projiziert werden.
WarnungenEnthä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. Weitere Informationen zum Erstellen oder Aktualisieren einer Spaltenstatistik (derer den Abfrageoptimierer einen effizienteren Abfrageplan wählen) finden Sie unter 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.
TypDer Knotentyp. Für den übergeordneten Knoten jeder Abfrage ist dies der Transact-SQL-Anweisungstyp (z. B. SELECT, INSERT, EXECUTE usw.). Für untergeordnete Knoten, die Ausführungspläne darstellen, ist der Typ PLAN_ROW.
Parallele0 = Operator wird nicht parallel ausgeführt.

 1 = Operator wird parallel ausgeführt.
EstimateExecutionsGeschä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.

Zur Verwendung von SET SHOWPLAN_ALL benötigen Sie für die Ausführung der Anweisungen, auf die SET SHOWPLAN_ALL angewendet wird, ausreichende Berechtigungen sowie die SHOWPLAN-Berechtigung für alle Datenbanken mit Objekten, auf die verwiesen wird.

Für SELECT, INSERT, UPDATE, DELETE, EXEC Stored_procedure, und den AUSFÜHRUNGSTYP User_defined_function -Anweisungen, um einen Showplan zu erstellen, der Benutzer muss:

  • Berechtigungen für die Ausführung der Transact-SQL-Anweisungen.

  • SHOWPLAN-Berechtigung für alle Datenbanken, die mit Objekten verwiesen wird, indem Sie haben die Transact-SQL Anweisungen, z. B. Tabellen, Sichten und So weiter.

Für alle anderen Anweisungen, z. B. DDL, USE Database_name, SET, DECLARE, dynamisches SQL usw., nur die entsprechenden Berechtigungen zum Ausführen der Transact-SQL Anweisungen erforderlich sind.

In den beiden folgenden Anweisungen werden die SET SHOWPLAN_ALL-Einstellungen verwendet, um zu zeigen, wie SQL Server die Verwendung von Indizes in Abfragen analysiert und optimiert.

Die erste Abfrage verwendet den Vergleichsoperator gleich (=) in der WHERE-Klausel auf eine indizierte Spalte an. Dadurch wird der Wert Clustered Index Seek, in der LogicalOp Spalte und den Namen des Indexes in der Argument Spalte.

In der zweiten Abfrage wird der LIKE-Operator in der WHERE-Klausel verwendet. Deshalb muss SQL Server einen Scan des gruppierten Indexes ausführen und die Daten finden, die die Bedingung in der WHERE-Klausel erfüllen. Dadurch wird der Wert Clustered Index Scan in der LogicalOp Spalte mit dem Namen des Indexes in der Argument Spalte und der Filterwert in die LogicalOp Spalte mit der Bedingung in der WHERE-Klausel in der Argument Spalte.

Die Werte in der EstimateRows und die TotalSubtreeCost Spalten sind bei der ersten indizierten Abfrage deutlich schnellere Verarbeitung und verwendet weniger Ressourcen als bei nicht indizierten Abfrage hinweist.

USE AdventureWorks2012;  
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  

SET-Anweisungen ( Transact-SQL )
SET SHOWPLAN_TEXT ( Transact-SQL )
SET SHOWPLAN_XML ( Transact-SQL )

Community-Beiträge

HINZUFÜGEN
Anzeigen: