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

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure noAzure SQL Data Warehouse noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Impedisce l'esecuzione delle istruzioni SQL ServerSQL Server in Microsoft Transact-SQLTransact-SQL.Causes Microsoft SQL ServerSQL Server not to execute Transact-SQLTransact-SQL statements. SQL ServerSQL Server restituisce invece informazioni dettagliate sulla modalità di esecuzione delle istruzioni e una stima delle risorse necessarie per eseguire le istruzioni.Instead, SQL ServerSQL Server returns detailed information about how the statements are executed and provides estimates of the resource requirements for the statements.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

  
SET SHOWPLAN_ALL { ON | OFF }  

RemarksRemarks

L'opzione SET SHOWPLAN_ALL viene impostata in fase di esecuzione, non in fase di analisi.The setting of SET SHOWPLAN_ALL is set at execute or run time and not at parse time.

Quando l'opzione SET SHOWPLAN_ALL è impostata su ON, SQL ServerSQL Server restituisce le informazioni di esecuzione per ciascuna istruzione, senza eseguirla. Le istruzioni Transact-SQLTransact-SQL non vengono eseguite.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. Quando l'opzione è impostata su ON, vengono restituite informazioni su tutte le istruzioni Transact-SQLTransact-SQL successive fino a quando l'opzione non viene reimpostata su OFF.After this option is set ON, information about all subsequent Transact-SQLTransact-SQL statements are returned until the option is set OFF. Se, ad esempio, si esegue un'istruzione CREATE TABLE quando l'opzione SET SHOWPLAN_ALL è impostata su ON, SQL ServerSQL Server restituisce un messaggio di errore di una successiva istruzione SELECT che interessa la stessa tabella, per informare gli utenti che la tabella specificata non esiste.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. I successivi riferimenti a tale tabella pertanto hanno esito negativo.Therefore, subsequent references to this table fail. Quando l'opzione SET SHOWPLAN_ALL è impostata su OFF, le istruzioni vengono eseguite da SQL ServerSQL Server senza la generazione di alcun report.When SET SHOWPLAN_ALL is OFF, SQL ServerSQL Server executes the statements without generating a report.

L'opzione SET SHOWPLAN_ALL è stata creata specificatamente per l'utilizzo in applicazioni per la gestione dell'output.SET SHOWPLAN_ALL is intended to be used by applications written to handle its output. Usare SET SHOWPLAN_TEXT per ottenere output leggibile in applicazioni della riga di comando per Microsoft Win32, ad esempio l'utilità osql.Use SET SHOWPLAN_TEXT to return readable output for Microsoft Win32 command prompt applications, such as the osql utility.

Non è possibile specificare entrambe le opzioni SET SHOWPLAN_TEXT e SET SHOWPLAN_ALL in una stored procedure. Devono essere inoltre le uniche istruzioni di un batch.SET SHOWPLAN_TEXT and SET SHOWPLAN_ALL cannot be specified inside a stored procedure; they must be the only statements in a batch.

L'opzione SET SHOWPLAN_ALL restituisce informazioni sotto forma di un set di righe in un albero gerarchica che rappresenta i passaggi eseguiti da Query Processor di SQL ServerSQL Server per l'esecuzione delle varie istruzioni.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. Ogni istruzione restituita nell'output include una singola riga contenente il testo dell'istruzione seguita da alcune righe che includono i dettagli dei passaggi dell'esecuzione.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. Nella tabella seguente vengono illustrate le colonne incluse nell'output.The table shows the columns that the output contains.

Nome colonnaColumn name DescrizioneDescription
StmtTextStmtText Per righe che non sono di tipo PLAN_ROW, questa colonna include il testo dell'istruzione Transact-SQLTransact-SQL.For rows that are not of type PLAN_ROW, this column contains the text of the Transact-SQLTransact-SQL statement. Per righe di tipo PLAN_ROW, include una descrizione dell'operazione.For rows of type PLAN_ROW, this column contains a description of the operation. La colonna include l'operatore fisico e facoltativamente l'operatore logico.This column contains the physical operator and may optionally also contain the logical operator. Può essere inoltre seguita da una descrizione determinata dall'operatore fisico.This column may also be followed by a description that is determined by the physical operator. Per altre informazioni, vedere la Guida di riferimento a operatori Showplan logici e fisici.For more information, see Showplan Logical and Physical Operators Reference.
StmtIdStmtId Numero dell'istruzione nel batch corrente.Number of the statement in the current batch.
NodeIdNodeId ID del nodo nella query corrente.ID of the node in the current query.
ParentParent ID del nodo del passaggio padre.Node ID of the parent step.
PhysicalOpPhysicalOp Algoritmo di implementazione fisica del nodo.Physical implementation algorithm for the node. Solo per righe di tipo PLAN_ROWS.For rows of type PLAN_ROWS only.
LogicalOpLogicalOp Operatore algebrico relazionale rappresentato dal nodo.Relational algebraic operator this node represents. Solo per righe di tipo PLAN_ROWS.For rows of type PLAN_ROWS only.
ArgumentArgument Offre informazioni aggiuntive sull'operazione che viene eseguita.Provides supplemental information about the operation being performed. Il contenuto di questa colonna dipende dall'operatore fisico.The contents of this column depend on the physical operator.
DefinedValuesDefinedValues Include un elenco delimitato da virgole dei valori introdotti da questo operatore.Contains a comma-separated list of values introduced by this operator. Tali valori possono essere espressioni calcolate che erano incluse nella query corrente, ad esempio nell'elenco di selezione o nella clausola WHERE, oppure valori interni inseriti da Query Processor per l'elaborazione della query.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. È inoltre possibile fare riferimento a tali valori in un altro punto della query.These defined values may then be referenced elsewhere within this query. Solo per righe di tipo PLAN_ROWS.For rows of type PLAN_ROWS only.
EstimateRowsEstimateRows Numero stimato di righe restituite dall'operatore.Estimated number of rows of output produced by this operator. Solo per righe di tipo PLAN_ROWS.For rows of type PLAN_ROWS only.
EstimateIOEstimateIO Costo* di I/O stimato per l'operatore.Estimated I/O cost* for this operator. Solo per righe di tipo PLAN_ROWS.For rows of type PLAN_ROWS only.
EstimateCPUEstimateCPU Costo* della CPU stimato per l'operatore.Estimated CPU cost* for this operator. Solo per righe di tipo PLAN_ROWS.For rows of type PLAN_ROWS only.
AvgRowSizeAvgRowSize Dimensioni medie stimate (in byte) della riga che viene elaborata dall'operatore.Estimated average row size (in bytes) of the row being passed through this operator.
TotalSubtreeCostTotalSubtreeCost Costo* (cumulativo) stimato dell'operazione e delle operazioni figlio.Estimated (cumulative) cost* of this operation and all child operations.
OutputListOutputList Include un elenco delimitato da virgole delle colonne previste dall'operazione corrente.Contains a comma-separated list of columns being projected by the current operation.
AvvisiWarnings Include un elenco delimitato da virgole dei messaggi di avviso relativi all'operazione corrente.Contains a comma-separated list of warning messages relating to the current operation. I messaggi di avviso possono includere la stringa "NO STATS:()" con un elenco di colonne.Warning messages may include the string "NO STATS:()" with a list of columns. Tale messaggio indica che in Query Optimizer è stata tentata una decisione in base alle statistiche di questa colonna, ma non era disponibile alcuna statistica.This warning message means that the query optimizer attempted to make a decision based on the statistics for this column, but none were available. Query Optimizer ha pertanto formulato un'ipotesi con cui potrebbe essere stato scelto un piano non efficiente per la query.Consequently, the query optimizer had to make a guess, which may have resulted in the selection of an inefficient query plan. Per altre informazioni sulla creazione o l'aggiornamento di statistiche di colonna, che agevolano la scelta di un piano di query più efficace in Query Optimizer, vedere 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. Questa colonna può includere facoltativamente la stringa "MISSING JOIN PREDICATE", a indicare che è stato eseguito un join tra tabelle senza specificare un predicato di join.This column may optionally include the string "MISSING JOIN PREDICATE", which means that a join (involving tables) is taking place without a join predicate. In seguito all'eliminazione accidentale di un predicato di join, la query potrebbe richiedere tempi di esecuzione maggiori del previsto e restituire un set di risultati di dimensioni elevate.Accidentally dropping a join predicate may result in a query which takes much longer to run than expected, and returns a huge result set. Se la colonna include tale stringa, verificare se l'assenza di un predicato di join è o meno voluta.If this warning is present, verify that the absence of a join predicate is intentional.
TipoType Tipo di nodo.Node type. Per il nodo padre di ogni query, è il tipo di istruzione Transact-SQLTransact-SQL, ad esempio SELECT, INSERT, EXECUTE e così via.For the parent node of each query, this is the Transact-SQLTransact-SQL statement type (for example, SELECT, INSERT, EXECUTE, and so on). Per sottonodi che rappresentano piani di esecuzione, il tipo è PLAN_ROW.For subnodes representing execution plans, the type is PLAN_ROW.
ParallelParallel 0 = L'operatore non viene eseguito in parallelo.0 = Operator is not running in parallel.

1 = L'operatore viene eseguito in parallelo.1 = Operator is running in parallel.
EstimateExecutionsEstimateExecutions Numero stimato di esecuzioni dell'operatore durante l'elaborazione della query corrente.Estimated number of times this operator will be executed while running the current query.

*Le unità di costo sono basate su una misurazione interna del tempo, non sul tempo dell'orologio.*Cost units are based on an internal measurement of time, not wall-clock time. Si utilizzano per la determinazione del costo relativo di un piano rispetto ad altri piani.They are used for determining the relative cost of a plan in comparison to other plans.

AutorizzazioniPermissions

Per poter utilizzare SET SHOWPLAN_ALL, è necessario disporre delle autorizzazioni sufficienti per eseguire le istruzioni in cui SET SHOWPLAN_ALL viene eseguito, nonché l'autorizzazione SHOWPLAN per tutti i database contenenti oggetti di riferimento.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.

Per poter generare uno Showplan con le istruzioni SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure ed EXEC user_defined_function, l'utente deve avere:For SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure, and EXEC user_defined_function statements, to produce a Showplan the user must:

  • Autorizzazioni appropriate per l'esecuzione delle istruzioni Transact-SQLTransact-SQL.Have the appropriate permissions to execute the Transact-SQLTransact-SQL statements.

  • Autorizzazione SHOWPLAN su tutti i database contenenti oggetti a cui fanno riferimento le istruzioni Transact-SQLTransact-SQL, ad esempio tabelle, viste e così via.Have SHOWPLAN permission on all databases containing objects referenced by the Transact-SQLTransact-SQL statements, such as tables, views, and so on.

Per tutte le altre istruzioni, ad esempio DDL, USE database_name, SET, DECLARE, SQL dinamico e così via sono necessarie soltanto le autorizzazioni per l'esecuzione delle istruzioni Transact-SQLTransact-SQL.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.

EsempiExamples

Nelle due istruzioni seguenti vengono utilizzate le impostazioni dell'opzione SET SHOWPLAN_ALL per illustrare l'analisi e l'ottimizzazione dell'utilizzo degli indici nelle query in SQL ServerSQL Server.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.

La prima query utilizza l'operatore di confronto uguale a (=) nella clausola WHERE in una colonna indicizzata.The first query uses the Equals comparison operator (=) in the WHERE clause on an indexed column. I risultati sono il valore Clustered Index Seek nella colonna LogicalOp e il nome dell'indice nella colonna Argument.This results in the Clustered Index Seek value in the LogicalOp column and the name of the index in the Argument column.

La seconda query utilizza l'operatore LIKE nella clausola WHERE.The second query uses the LIKE operator in the WHERE clause. In tal modo viene imposta l'esecuzione di un'analisi di indice cluster in SQL ServerSQL Server per individuare i dati che soddisfano la condizione della clausola WHERE.This forces SQL ServerSQL Server to use a clustered index scan and find the data that satisfies the WHERE clause condition. I risultati sono il valore Clustered Index Scan nella colonna LogicalOp con il nome dell'indice nella colonna Argument e il valore Filter nella colonna LogicalOp con la condizione della clausola WHERE nella colonna Argument.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.

I valori nelle colonne EstimateRows e TotalSubtreeCost della prima query indicizzata sono inferiori, a indicare che la query è stata elaborata molto più rapidamente e con un numero di risorse inferiore rispetto alla query non indicizzata.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  

Vedere ancheSee Also

Istruzioni SET (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)