SET SHOWPLAN_ALL (Transact-SQL)SET SHOWPLAN_ALL (Transact-SQL)

GILT FÜR: JaSQL Server JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: YesSQL Server YesAzure SQL Database NoAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

Bewirkt, dass Microsoft SQL ServerSQL ServerTransact-SQLTransact-SQL-Anweisungen nicht ausführt.Causes Microsoft SQL ServerSQL Server not to execute Transact-SQLTransact-SQL statements. Stattdessen gibt SQL ServerSQL Server detaillierte Informationen darüber zurück, wie die Anweisungen ausgeführt werden, und stellt Schätzungen zu Ressourcenanforderungen für die Anweisungen bereit.Instead, SQL ServerSQL Server returns detailed information about how the statements are executed and provides estimates of the resource requirements for the statements.

Symbol für Themenlink Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

  
SET SHOWPLAN_ALL { ON | OFF }  

BemerkungenRemarks

Die Einstellung von SET SHOWPLAN_ALL wird zur Ausführungszeit und nicht zur Analysezeit festgelegt.The setting of SET SHOWPLAN_ALL is set at execute or run time and not at parse time.

Wenn SET SHOWPLAN_ALL auf ON festgelegt ist, gibt SQL ServerSQL Server Informationen zur Ausführung jeder Anweisung zurück, ohne sie jedoch auszuführen, und Transact-SQLTransact-SQL-Anweisungen werden nicht ausgeführt.When SET SHOWPLAN_ALL is ON, SQL ServerSQL Server returns execution information for each statement without executing it, and Transact-SQLTransact-SQL statements are not executed. Nachdem diese Option auf ON festgelegt wurde, werden Informationen zu allen weiteren Transact-SQLTransact-SQL-Anweisungen zurückgegeben, bis die Option auf OFF festgelegt wird.After this option is set ON, information about all subsequent Transact-SQLTransact-SQL statements are returned until the option is set OFF. Wenn z. B. eine CREATE TABLE-Anweisung ausgeführt wird, während SET SHOWPLAN_ALL auf ON festgelegt ist, gibt SQL ServerSQL 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.For example, if a CREATE TABLE statement is executed while SET SHOWPLAN_ALL is ON, SQL ServerSQL Server returns an error message from a subsequent SELECT statement involving that same table, informing users that the specified table does not exist. Daher schlagen spätere Verweise auf diese Tabelle fehl.Therefore, subsequent references to this table fail. Wenn SET SHOWPLAN_ALL auf OFF festgelegt ist, führt SQL ServerSQL Server die Anweisungen aus, ohne einen Bericht zu generieren.When SET SHOWPLAN_ALL is OFF, SQL ServerSQL Server executes the statements without generating a report.

SET SHOWPLAN_ALL ist dafür gedacht, von Anwendungen verwendet zu werden, die die entsprechende Ausgabe verarbeiten sollen.SET SHOWPLAN_ALL is intended to be used by applications written to handle its output. Verwenden Sie SET SHOWPLAN_TEXT, um eine lesbare Ausgabe für Microsoft Win32-Eingabeaufforderungsanwendungen, wie z.B. das Hilfsprogramm osql, zurückzugeben.Use SET SHOWPLAN_TEXT to return readable output for Microsoft Win32 command prompt applications, such as the osql utility.

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_TEXT and SET SHOWPLAN_ALL cannot be specified inside a stored procedure; they must be the only statements in a batch.

SET SHOWPLAN_ALL gibt ein Rowset in Form einer hierarchischen Baumstruktur zurück, die zeigt, welche Schritte vom SQL ServerSQL Server-Abfrageprozessor beim Ausführen einer Anweisung ausgeführt werden.SET SHOWPLAN_ALL returns information as a set of rows that form a hierarchical tree representing the steps taken by the SQL ServerSQL Server query processor as it executes each statement. 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.Each statement reflected in the output contains a single row with the text of the statement, followed by several rows with the details of the execution steps. Die Tabelle zeigt die Spalten, die in der Ausgabe enthalten sind.The table shows the columns that the output contains.

SpaltennameColumn name BESCHREIBUNGDescription
StmtTextStmtText Für Zeilen, die nicht vom Typ PLAN_ROW sind, enthält diese Spalte den Text der Transact-SQLTransact-SQL-Anweisung.For rows that are not of type PLAN_ROW, this column contains the text of the Transact-SQLTransact-SQL statement. Für Zeilen vom Typ PLAN_ROW enthält diese Spalte eine Beschreibung des Vorgangs.For rows of type PLAN_ROW, this column contains a description of the operation. Diese Spalte enthält den physischen Operator und optional auch den logischen Operator.This column contains the physical operator and may optionally also contain the logical operator. Auf die Spalte kann auch eine Beschreibung folgen, die vom physischen Operator bestimmt wird.This column may also be followed by a description that is determined by the physical operator. Weitere Informationen finden Sie unter Referenz zu logischen und physischen ShowplanoperatorenFor more information, see Showplan Logical and Physical Operators Reference.
StmtIdStmtId Nummer der Anweisung im aktuellen Batch.Number of the statement in the current batch.
NodeIdNodeId ID des Knotens in der aktuellen Abfrage.ID of the node in the current query.
ParentParent Knoten-ID des übergeordneten Schrittes.Node ID of the parent step.
PhysicalOpPhysicalOp Algorithmus der physischen Implementierung für den Knoten.Physical implementation algorithm for the node. Nur für Zeilen vom Typ PLAN_ROWS.For rows of type PLAN_ROWS only.
LogicalOpLogicalOp Relationaler algebraischer Operator, den dieser Knoten darstellt.Relational algebraic operator this node represents. Nur für Zeilen vom Typ PLAN_ROWS.For rows of type PLAN_ROWS only.
ArgumentArgument Gibt Zusatzinformationen zur durchgeführten Operation.Provides supplemental information about the operation being performed. Der Inhalt dieser Spalte hängt vom physischen Operator ab.The contents of this column depend on the physical operator.
DefinedValuesDefinedValues Enthält eine Liste mit durch Trennzeichen getrennten Werten, die dieser Operator einführt.Contains a comma-separated list of values introduced by this operator. 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.These values may be computed expressions which were present in the current query (for example, in the SELECT list or WHERE clause), or internal values introduced by the query processor in order to process this query. Auf diese definierten Werte kann dann an anderer Stelle in dieser Abfrage verwiesen werden.These defined values may then be referenced elsewhere within this query. Nur für Zeilen vom Typ PLAN_ROWS.For rows of type PLAN_ROWS only.
EstimateRowsEstimateRows Geschätzte Anzahl der Zeilen, die dieser Operator ausgibt.Estimated number of rows of output produced by this operator. Nur für Zeilen vom Typ PLAN_ROWS.For rows of type PLAN_ROWS only.
EstimateIOEstimateIO Geschätzte E/A-Kosten* für diesen Operator.Estimated I/O cost* for this operator. Nur für Zeilen vom Typ PLAN_ROWS.For rows of type PLAN_ROWS only.
EstimateCPUEstimateCPU Geschätzte CPU-Kosten* für diesen Operator.Estimated CPU cost* for this operator. Nur für Zeilen vom Typ PLAN_ROWS.For rows of type PLAN_ROWS only.
AvgRowSizeAvgRowSize Geschätzte mittlere Zeilenlänge (in Bytes) der Zeile, die durch diesen Operator übergeben wird.Estimated average row size (in bytes) of the row being passed through this operator.
TotalSubtreeCostTotalSubtreeCost Geschätzte (kumulierte) Kosten* dieses Vorgangs und aller untergeordneten Vorgänge.Estimated (cumulative) cost* of this operation and all child operations.
OutputListOutputList Enthält eine Liste mit durch Trennzeichen getrennten Spalten, die vom aktuellen Vorgang projiziert werden.Contains a comma-separated list of columns being projected by the current operation.
Warnings Enthält eine Liste mit durch Trennzeichen getrennten Warnmeldungen, die die aktuelle Operation betreffen.Contains a comma-separated list of warning messages relating to the current operation. Warnmeldungen können die Zeichenfolge "NO STATS:()" mit einer Spaltenliste enthalten.Warning messages may include the string "NO STATS:()" with a list of columns. 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.This warning message means that the query optimizer attempted to make a decision based on the statistics for this column, but none were available. Daher musste der Abfrageoptimierer eine Schätzung vornehmen, die möglicherweise zur Auswahl eines ineffizienten Abfrageplans führte.Consequently, the query optimizer had to make a guess, which may have resulted in the selection of an inefficient query plan. Weitere Informationen zum Erstellen und Aktualisieren einer Spaltenstatistik (sie ermöglicht dem Abfrageoptimierer die Auswahl eines effizienteren Ausführungsplans) finden Sie unter UPDATE STATISTICS.For more information about creating or updating column statistics (which help the query optimizer choose a more efficient query plan), see 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.This column may optionally include the string "MISSING JOIN PREDICATE", which means that a join (involving tables) is taking place without a join predicate. 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.Accidentally dropping a join predicate may result in a query which takes much longer to run than expected, and returns a huge result set. Wenn diese Warnung besteht, überprüfen Sie, ob das Fehlen des Joinprädikats absichtlich ist.If this warning is present, verify that the absence of a join predicate is intentional.
Type Der Knotentyp.Node type. Für den übergeordneten Knoten jeder Abfrage ist dies der Transact-SQLTransact-SQL-Anweisungstyp (z. B. SELECT, INSERT, EXECUTE usw.).For the parent node of each query, this is the Transact-SQLTransact-SQL statement type (for example, SELECT, INSERT, EXECUTE, and so on). Für untergeordnete Knoten, die Ausführungspläne darstellen, ist der Typ PLAN_ROW.For subnodes representing execution plans, the type is PLAN_ROW.
ParallelParallel 0 = Operator wird nicht parallel ausgeführt.0 = Operator is not running in parallel.

1 = Operator wird parallel ausgeführt.1 = Operator is running in parallel.
EstimateExecutionsEstimateExecutions Geschätzte Anzahl der Ausführungen dieses Operators, die während der Ausführung der aktuellen Abfrage ausgeführt werden.Estimated number of times this operator will be executed while running the current query.

*Kosteneinheiten basieren auf einer internen Zeitmessung und nicht auf der normalen Uhrzeit.*Cost units are based on an internal measurement of time, not wall-clock time. Sie werden zur Ermittlung der relativen Kosten eines Plans im Vergleich zu anderen Plänen verwendet.They are used for determining the relative cost of a plan in comparison to other plans.

BerechtigungenPermissions

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.In order to use SET SHOWPLAN_ALL, you must have sufficient permissions to execute the statements on which SET SHOWPLAN_ALL is executed, and you must have SHOWPLAN permission for all databases containing referenced objects.

Damit die Anweisungen SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure und EXEC user_defined_function einen Showplan erstellen, benötigt der Benutzer Folgendes:For SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure, and EXEC user_defined_function statements, to produce a Showplan the user must:

  • Berechtigungen für die Ausführung der Transact-SQLTransact-SQL-Anweisungen.Have the appropriate permissions to execute the Transact-SQLTransact-SQL statements.

  • SHOWPLAN-Berechtigung für alle Datenbanken mit Objekten, auf die in den Transact-SQLTransact-SQL-Anweisungen verwiesen wird, wie z.B. Tabellen, Sichten usw.Have SHOWPLAN permission on all databases containing objects referenced by the Transact-SQLTransact-SQL statements, such as tables, views, and so on.

Für alle anderen Anweisungen, z.B. DDL, USE database_name, SET, DECLARE, dynamische SQL-Anweisungen usw., werden nur die entsprechenden Berechtigungen für die Ausführung der Transact-SQLTransact-SQL-Anweisungen benötigt.For all other statements, such as DDL, USE database_name, SET, DECLARE, dynamic SQL, and so on, only the appropriate permissions to execute the Transact-SQLTransact-SQL statements are needed.

BeispieleExamples

In den beiden folgenden Anweisungen werden die SET SHOWPLAN_ALL-Einstellungen verwendet, um zu zeigen, wie SQL ServerSQL Server die Verwendung von Indizes in Abfragen analysiert und optimiert.The two statements that follow use the SET SHOWPLAN_ALL settings to show the way SQL ServerSQL Server analyzes and optimizes the use of indexes in queries.

In der ersten Abfrage wird der Vergleichsoperator (=) in der WHERE-Klausel auf eine indizierte Spalte angewendet.The first query uses the Equals comparison operator (=) in the WHERE clause on an indexed column. Daher wird in der LogicalOp-Spalte der Wert Clustered Index Seek und in der Argument-Spalte der Indexname angezeigt.This results in the Clustered Index Seek value in the LogicalOp column and the name of the index in the Argument column.

In der zweiten Abfrage wird der LIKE-Operator in der WHERE-Klausel verwendet.The second query uses the LIKE operator in the WHERE clause. Deshalb muss SQL ServerSQL Server einen Scan des gruppierten Indexes ausführen und die Daten finden, die die Bedingung in der WHERE-Klausel erfüllen.This forces SQL ServerSQL Server to use a clustered index scan and find the data that satisfies the WHERE clause condition. 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.This results in the Clustered Index Scan value in the LogicalOp column with the name of the index in the Argument column, and the Filter value in the LogicalOp column with the WHERE clause condition in the Argument column.

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.The values in the EstimateRows and the TotalSubtreeCost columns are smaller for the first indexed query, indicating that it is processed much faster and uses fewer resources than the nonindexed query.

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  

Weitere InformationenSee Also

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