SET SHOWPLAN_XML (Transact-SQL)
Si applica a: SQL Server
database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics (solo pool SQL dedicato)
Impedisce l'esecuzione di istruzioni Transact-SQL di SQL Server. SQL Server restituisce invece informazioni dettagliate sulla modalità di esecuzione delle istruzioni sotto forma di documento XML ben definito.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
SET SHOWPLAN_XML { ON | OFF }
Nota
Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere Documentazione delle versioni precedenti.
Osservazioni:
L'opzione SET SHOWPLAN_XML viene impostata in fase di esecuzione, non in fase di analisi.
Quando l'opzione SET SHOWPLAN_XML è impostata su ON, SQL Server restituisce le informazioni sul piano di esecuzione per ogni istruzione, senza eseguirla. Le istruzioni Transact-SQL non vengono eseguite. Quando l'opzione è impostata su ON, vengono restituite informazioni del piano di esecuzione su tutte le istruzioni Transact-SQL successive fino a quando l'opzione non viene reimpostata su OFF. Se, ad esempio, si esegue un'istruzione CREATE TABLE quando l'opzione SET SHOWPLAN_XML è impostata su ON, SQL Server restituisce un messaggio di errore per una successiva istruzione SELECT che interessa la stessa tabella. La tabella specificata non esiste. I successivi riferimenti a tale tabella pertanto hanno esito negativo. Quando l'opzione SET SHOWPLAN_XML è impostata su OFF, le istruzioni vengono eseguite da SQL Server senza la generazione di alcun report.
SET SHOWPLAN_XML è stata creata specificatamente per la restituzione di output come nvarchar(max) per applicazioni quali l'utilità sqlcmd, in cui l'output XML viene successivamente usato da altri strumenti per visualizzare ed elaborare le informazioni del piano della query.
Nota
La visualizzazione a gestione dinamica, sys.dm_exec_query_plan
, restituisce le stesse informazioni di SET SHOWPLAN XML nel tipo di dati xml . Queste informazioni vengono restituite dalla query_plan
colonna di sys.dm_exec_query_plan
. Per altre informazioni, vedere sys.dm_exec_query_plan (Transact-SQL).
Non è possibile specificare SET SHOWPLAN_XML all'interno di una stored procedure. Deve essere l'unica istruzione in un batch.
SET SHOWPLAN_XML restituisce le informazioni come set di documenti XML. Ogni batch dopo l'istruzione SET SHOWPLAN_XML ON viene restituito nell'output da un unico documento. Ogni documento contiene il testo delle istruzioni nel batch, seguito dai dettagli dei passaggi dell'esecuzione. Nel documento vengono illustrati i costi stimati, il numero di righe, gli indici utilizzati e i tipi di operatori eseguiti, l'ordine di join e ulteriori informazioni sui piani di esecuzione.
Nota
Se l'opzione Includi piano di esecuzione effettivo è selezionata in SQL Server Management Studio, l'opzione SET non genera alcun output di Showplan XML. Prima di usare l'opzione SET, deselezionare il pulsante Includi piano di esecuzione effettivo.
I piani di esecuzione stimati tramite SSMS e SET SHOWPLAN_XML sono disponibili per pool SQL dedicati (in precedenza SQL Data Warehouse) e pool SQL dedicati in Azure Synapse Analytics. Per recuperare un piano di esecuzione effettivo per pool SQL dedicati (in precedenza SQL Data Warehouse) e pool SQL dedicati in Azure Synapse Analytics, sono disponibili comandi diversi. Per altre informazioni, vedere Monitorare il carico di lavoro del pool SQL Azure Synapse Analytics tramite DMV.
Percorso dell'output SHOWPLAN
Il documento contenente l'XML Schema per l'output XML di SET SHOWPLAN_XML viene copiato durante l'installazione in una directory locale nel computer in cui è installato Microsoft SQL Server. Il documento è reperibile nell'unità contenente i file di installazione di SQL Server, in un percorso simile al seguente:
\Microsoft SQL Server\130\Tools\Binn\schemas\sqlserver\2004\07\showplan\showplanxml.xsd
Nel percorso precedente, il nodo 130\
viene usato da SQL Server 2016. Il numero 130 è derivato dal primo nodo del valore restituito da SELECT @@VERSION
, che è 13. Per SQL Server 2017 il percorso userà 140\
, perché il primo nodo del relativo @@VERSION
valore è 14. SQL Server 2019 il primo valore di @@VERSION
è 15. SQL Server 2022 il primo valore di @@VERSION
è 16.
Lo schema Showplan è disponibile anche in Xml Schema di Microsoft SQL Server.
Autorizzazioni
Per poter utilizzare SET SHOWPLAN_XML, è necessario disporre delle autorizzazioni sufficienti per eseguire le istruzioni in cui SET SHOWPLAN_XM viene eseguito, nonché l'autorizzazione SHOWPLAN per tutti i database contenenti oggetti di riferimento.
Per SELECT
le istruzioni , DELETE
EXEC *stored_procedure*
INSERT
UPDATE
e EXEC *user_defined_function*
, per produrre un oggetto 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, ad esempio DDL, USE *database_name*
, SET
, DECLARE
, SQL dinamico e così via, sono necessarie solo le autorizzazioni appropriate per eseguire le istruzioni Transact-SQL.
Esempi
Nelle due istruzioni seguenti vengono utilizzate le impostazioni dell'opzione SET SHOWPLAN_XML per illustrare l'analisi e l'ottimizzazione dell'utilizzo degli indici nelle query in SQL Server.
La prima query usa l'operatore di confronto Equals (=
) nella clausola WHERE in una colonna indicizzata. La seconda query utilizza l'operatore LIKE nella clausola WHERE. In tal modo viene imposta l'esecuzione di un'analisi di indice cluster in SQL Server per individuare i dati che soddisfano la condizione della clausola WHERE. I valori in EstimateRows
e gli EstimatedTotalSubtreeCost
attributi sono più piccoli per la prima query indicizzata, a indicare che viene elaborato molto più velocemente e usa meno risorse rispetto alla query non indicizzata.
USE AdventureWorks2022;
GO
SET SHOWPLAN_XML ON;
GO
-- First query.
SELECT BusinessEntityID
FROM HumanResources.Employee
WHERE NationalIDNumber = '509647174';
GO
-- Second query.
SELECT BusinessEntityID, JobTitle
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Production%';
GO
SET SHOWPLAN_XML OFF;