Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come funziona SHOWPLAN_XML in SQL Server

In SQL Server puoi utilizzare SET SHOWPLAN_XML istruzione per restituire informazioni dettagliate su come verrà eseguita un'istruzione T-SQL, sotto forma di un documento XML ben definito.

È simile a SHOWPLAN_ALL , tranne che SHOWPLAN_ALL restituisce il suo set di dati di righe che formano un albero gerarchico.

Puoi impostare SHOWPLAN_XML su ON o OFF .

Quando SHOWPLAN_XML è ON , tutte le successive istruzioni T-SQL non vengono eseguite. Invece SQL Server restituisce le informazioni sull'esecuzione per l'istruzione (senza eseguirla).

Esempio

Ecco un esempio da dimostrare.

SET SHOWPLAN_XML ON;
GO

SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO

Nota che SET SHOWPLAN_XML non può essere specificato all'interno di una stored procedure e deve essere l'unica istruzione in un batch.

Il risultato che ottieni potrebbe dipendere dallo strumento che stai utilizzando per accedere a SQL Server.

Quando lo eseguo in Azure Data Studio, posso fare clic sulle varie schede per ottenere una visualizzazione diversa del risultato.

I Risultati la scheda mostra la stringa XML grezza:

Cliccando sulla riga si apre il documento XML in una nuova scheda:

Il Piano delle query la scheda mostra una rappresentazione grafica del risultato:

Le Operazioni principali tab presenta i dati in formato tabulare che ti consente di ordinare i dati in base a varie metriche:

Non funziona?

Se non funziona per te, assicurati di Includi il piano di esecuzione effettivo non è selezionato in SSMS. Quando è selezionato, SET SHOWPLAN_XML ON non produce output Showplan XML.

Come spegnerlo

Puoi disattivarlo utilizzando SET SHOWPLAN_XML OFF .

Dopo aver eseguito questa operazione, le istruzioni successive verranno eseguite normalmente.

SET SHOWPLAN_XML OFF;
GO

SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO

Risultato:

Commands completed successfully.
+---------+-----------+---------+-----------+-----------+
| CatId   | CatName   | DogId   | DogName   | GoodDog   |
|---------+-----------+---------+-----------+-----------|
| 2       | Fluffy    | 2       | Fluffy    | 0         |
+---------+-----------+---------+-----------+-----------+
(1 row affected)
Commands completed successfully.

Piano di esecuzione nelle GUI

Se usi uno strumento grafico come SSMS o Azure Data Studio, potresti avere un'opzione di scelta rapida per visualizzare il piano di esecuzione della query grafica stimato. Ciò ti consente di visualizzare il piano di query senza dover eseguire SET SHOWPLAN_XML ON .

Per eseguire un piano di query stimato:

  • In SSMS puoi usare Ctrl + L per farlo. Oppure puoi fare clic su Mostra piano di esecuzione stimato oppure fai clic con il pulsante destro del mouse nella finestra della query e seleziona Visualizza piano di esecuzione stimato . Questo ti eviterà di dover girare SHOWPLAN_XML on e off nel tuo codice.
  • In Azure Data Studio, puoi fare clic su Spiega pulsante sopra la finestra della query.

Puoi anche eseguire un piano di query effettivo:

  • In SSMS, nella Query menu, fai clic su Includi piano di esecuzione effettivo oppure fai clic su Includi piano di esecuzione effettivo pulsante della barra degli strumenti.
  • In Azure Data Studio, vai a Visualizza> Tavolozza comandi e digita Esegui query corrente con piano effettivo .

Tieni presente che se Includi il piano di esecuzione effettivo è selezionato in SSMS, il SET SHOWPLAN_XML ON l'opzione non produce output Showplan XML. Prova a cancellare Includi piano di esecuzione effettivo prima di utilizzare questo SET opzione.

Tuttavia, trovo che Azure Data Studio faccia l'opposto SHOWPLAN_XML ON sembra sovrascrivere Esegui query corrente con piano effettivo opzione, a meno che non eseguo Spiega primo (piano di query stimato), dopodiché Esegui query corrente con piano effettivo improvvisamente funziona (le Righe effettive e Esecuzioni effettive colonne delle Operazioni principali tab restituisce i dati appropriati).

Probabilmente è meglio disattivare l'opzione Showplan XML prima di utilizzare altri metodi per recuperare il piano di query.