Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di
AzureIstanza gestita di SQL di
AzureDatabase SQL in Microsoft Fabric
Impedisce l'esecuzione di istruzioni Transact-SQL di Microsoft SQL Server. SQL Server restituisce invece informazioni dettagliate sulla modalità di esecuzione delle istruzioni (un piano di query) e fornisce stime dei requisiti delle risorse per le istruzioni e le righe previste (stima della cardinalità).
Convenzioni relative alla sintassi Transact-SQL
Sintassi
SET SHOWPLAN_ALL { ON | OFF }
Osservazioni:
L'impostazione di viene impostata in fase di SET SHOWPLAN_ALL esecuzione o in fase di esecuzione e non in fase di analisi.
Quando l'opzione SET SHOWPLAN_ALL è impostata su ON, SQL Server restituisce le informazioni di esecuzione per ogni istruzione, senza eseguirla. Le istruzioni Transact-SQL non vengono eseguite. Quando l'opzione viene impostata su ON, vengono restituite informazioni su tutte le istruzioni Transact-SQL successive fino a quando l'opzione non viene impostata su OFF. Ad esempio, se una CREATE TABLE istruzione viene eseguita mentre SET SHOWPLAN_ALL è ON, SQL Server restituisce un messaggio di errore da una successiva istruzione SELECT che coinvolge quella stessa tabella, informando gli utenti che la tabella specificata non esiste. I successivi riferimenti a tale tabella pertanto hanno esito negativo. Quando SET SHOWPLAN_ALL è OFF, SQL Server esegue le istruzioni senza generare un report.
L'opzione SET SHOWPLAN_ALL è progettata per l'uso in applicazioni scritte per gestirne l'output. Da usare SET SHOWPLAN_TEXT per restituire output leggibile per applicazioni di prompt dei comandi Microsoft Win32, come l'utilità osql.
SET SET SHOWPLAN_TEXT e SETSET SHOWPLAN_ALL non possono essere specificati all'interno di una procedura memorizzata; devono essere le uniche istruzioni in un lotto.
SET SHOWPLAN_ALLrestituisce le informazioni come un insieme di righe che formano un albero gerarchico che rappresenta i passaggi compiuti dal processore di query di SQL Server mentre esegue ogni istruzione. 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. Nella tabella seguente vengono illustrate le colonne incluse nell'output.
| Nome colonna | Descrizione |
|---|---|
| StmtText | Per righe che non sono di tipo PLAN_ROW, questa colonna include il testo dell'istruzione Transact-SQL. Per righe di tipo PLAN_ROW, include una descrizione dell'operazione. La colonna include l'operatore fisico e facoltativamente l'operatore logico. Può essere inoltre seguita da una descrizione determinata dall'operatore fisico. Per altre informazioni, vedere la Guida di riferimento a operatori Showplan logici e fisici. |
| StmtId | Numero dell'istruzione nel batch corrente. |
| NodeId | ID del nodo nella query corrente. |
| Parent | ID del nodo del passaggio padre. |
| PhysicalOp | Algoritmo di implementazione fisica del nodo. Solo per righe di tipo PLAN_ROWS. |
| LogicalOp | Operatore algebrico relazionale rappresentato dal nodo. Solo per righe di tipo PLAN_ROWS. |
| Argomento | Offre informazioni aggiuntive sull'operazione che viene eseguita. Il contenuto di questa colonna dipende dall'operatore fisico. |
| DefinedValues | Include un elenco delimitato da virgole dei valori introdotti da questo operatore. 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. È inoltre possibile fare riferimento a tali valori in un altro punto della query. Solo per righe di tipo PLAN_ROWS. |
| EstimateRows | Numero stimato di righe restituite dall'operatore. Solo per righe di tipo PLAN_ROWS. |
| EstimateIO | Costo* di I/O stimato per l'operatore. Solo per righe di tipo PLAN_ROWS. |
| EstimateCPU | Costo* della CPU stimato per l'operatore. Solo per righe di tipo PLAN_ROWS. |
| AvgRowSize | Dimensioni medie stimate (in byte) della riga che viene elaborata dall'operatore. |
| TotalSubtreeCost | Costo* (cumulativo) stimato dell'operazione e delle operazioni figlio. |
| OutputList | Include un elenco delimitato da virgole delle colonne previste dall'operazione corrente. |
| Warnings | Include un elenco delimitato da virgole dei messaggi di avviso relativi all'operazione corrente. I messaggi di avviso possono includere la stringa "NO STATS:()" con un elenco di colonne. Tale messaggio indica che in Query Optimizer è stata tentata una decisione in base alle statistiche di questa colonna, ma non era disponibile alcuna statistica. Query Optimizer ha pertanto formulato un'ipotesi con cui potrebbe essere stato scelto un piano non efficiente per la query. Per maggiori informazioni sulla creazione o aggiornamento delle statistiche delle colonne (che aiutano l'ottimizzatore di query a scegliere un piano di query più efficiente), vedi 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. 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. Se la colonna include tale stringa, verificare se l'assenza di un predicato di join è o meno voluta. |
| Type | Tipo di nodo. Per il nodo genitore di ogni query, questo è il tipo di istruzione Transact-SQL (ad esempio, SELECT, INSERT, EXECUTE, e così via). Per sottonodi che rappresentano piani di esecuzione, il tipo è PLAN_ROW. |
| Parallela |
0 = L'operatore non viene eseguito in parallelo. 1 = L'operatore viene eseguito in parallelo. |
| EstimateExecutions | Numero stimato di esecuzioni dell'operatore durante l'elaborazione della query corrente. |
*Le unità di costo sono basate su una misurazione interna del tempo, non sul tempo dell'orologio. Si utilizzano per la determinazione del costo relativo di un piano rispetto ad altri piani.
Autorizzazioni
Per usare SETSET SHOWPLAN_ALL, devi avere permessi sufficienti per eseguire le istruzioni su cui SETSET SHOWPLAN_ALL viene eseguito, e devi avere il permesso SHOWPLAN per tutti i database contenenti oggetti di riferimento.
Per le istruzioni SELECT, INSERT, UPDATE, DELETE, EXEC stored_procedure ed EXEC user_defined_function , per produrre un Showplan l'utente deve:
Autorizzazioni appropriate per l'esecuzione delle istruzioni Transact-SQL.
Autorizzazione SHOWPLAN su tutti i database contenenti oggetti a cui fanno riferimento le istruzioni Transact-SQL, ad esempio tabelle, viste e così via.
Per tutte le altre istruzioni, come DDL, USE database_name, SETDECLARE, SQL dinamico e così via, sono necessarie solo le autorizzazioni appropriate per eseguire le istruzioni Transact-SQL.
Esempi
Le due affermazioni che seguono utilizzano le SET SHOWPLAN_ALL impostazioni per mostrare il modo in cui SQL Server analizza e ottimizza l'uso degli indici nelle query.
La prima query utilizza l'operatore di confronto uguale a (=) nella clausola WHERE in una colonna indicizzata. I risultati sono il valore Clustered Index Seek nella colonna LogicalOp e il nome dell'indice nella colonna Argument.
La seconda query utilizza l'operatore LIKE nella clausola WHERE. In tal modo viene imposta l'esecuzione da parte di SQL Server di un'analisi di indice cluster per individuare i dati che soddisfano la condizione della clausola WHERE. 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.
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.
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
Vedi anche
SET Istruzioni (Transact-SQL)
SET SHOWPLAN_TEXT (Transact-SQL)
SET SHOWPLAN_XML (Transact-SQL)