In SQL Server puoi utilizzare SET SHOWPLAN_ALL
istruzione per restituire informazioni dettagliate su come viene eseguita un'istruzione T-SQL, nonché stime dei requisiti di risorse per le istruzioni.
SHOWPLAN_ALL
restituisce le informazioni come un insieme di righe che formano un albero gerarchico che rappresenta i passaggi eseguiti da Query Processor di SQL Server durante l'esecuzione di ogni istruzione. È simile a SHOWPLAN_TEXT
, tranne che SHOWPLAN_ALL
restituisce informazioni più dettagliate (ed è destinato all'uso con applicazioni in grado di gestirne l'output).
Puoi impostare SHOWPLAN_ALL
su ON
o OFF
.
Quando SHOWPLAN_ALL
è ON
, tutte le successive istruzioni T-SQL non vengono eseguite. Invece SQL Server restituisce le informazioni sull'esecuzione per l'istruzione (senza eseguirla).
È importante notare che SHOWPLAN_ALL
fornisce stime dei requisiti di risorse e che i requisiti di risorse effettivi possono differire quando l'istruzione viene effettivamente eseguita.
Esempio
Ecco un esempio da dimostrare.
SET SHOWPLAN_ALL ON;
GO
SELECT * FROM Cats;
GO
Nota che SET SHOWPLAN_ALL
non può essere specificato all'interno di una stored procedure e deve essere l'unica istruzione in un batch.
Ecco come appare il risultato in Azure Data Studio:
Ed ecco come appare in mssql-cli (interfaccia della riga di comando) quando si utilizza l'output verticale:
Commands completed successfully. -[ RECORD 1 ]------------------------- StmtText | SELECT * FROM Cats; StmtId | 1 NodeId | 1 Parent | 0 PhysicalOp | NULL LogicalOp | NULL Argument | 1 DefinedValues | NULL EstimateRows | 3 EstimateIO | NULL EstimateCPU | NULL AvgRowSize | NULL TotalSubtreeCost | 0.0032853 OutputList | NULL Warnings | NULL Type | SELECT Parallel | 0 EstimateExecutions | NULL -[ RECORD 2 ]------------------------- StmtText | |--Clustered Index Scan(OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F])) StmtId | 1 NodeId | 2 Parent | 1 PhysicalOp | Clustered Index Scan LogicalOp | Clustered Index Scan Argument | OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F]) DefinedValues | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName] EstimateRows | 3 EstimateIO | 0.003125 EstimateCPU | 0.0001603 AvgRowSize | 142 TotalSubtreeCost | 0.0032853 OutputList | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName] Warnings | NULL Type | PLAN_ROW Parallel | 0 EstimateExecutions | 1 (2 rows affected) Commands completed successfully.
Ci sono molte colonne, quindi ho usato l'output verticale qui in modo che sia più facile da leggere.
Se la mia query fosse più complessa, verrebbero restituite più righe.
Ecco un esempio di una query (leggermente) più complessa.
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Risultato:
Come spegnerlo
Puoi disattivarlo utilizzando SET SHOWPLAN_ALL OFF
.
Dopo aver eseguito questa operazione, le istruzioni successive verranno eseguite normalmente.
SET SHOWPLAN_ALL OFF;
GO
SELECT * FROM Cats;
GO
Risultato:
Commands completed successfully. +---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected) Commands completed successfully.
Deprecato o no?
Secondo questo vecchio articolo MSDN, SET SHOWPLAN_ALL
è previsto per il ritiro nelle versioni future di showplan e si consiglia di utilizzare SET SHOWPLAN_XML
invece.
Tuttavia, quell'articolo di MSDN è per SQL Server 2008 R2 e, mentre lo scrivo, non sembra essere stato deprecato in SQL Server 2019. In effetti, la documentazione attuale non fa menzione della deprecazione e non è inclusa quando eseguo un elenco di elementi obsoleti in SQL Server.
Ad ogni modo, probabilmente conviene tenerlo a mente prima di usarlo nelle versioni future.
Piano di esecuzione grafica
Se usi uno strumento grafico come SSMS o Azure Data Studio, potresti avere la possibilità di visualizzare il piano di esecuzione della query grafica stimato per la query corrente.
- 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 .
- In Azure Data Studio, puoi fare clic su Spiega pulsante sopra la finestra della query.
Puoi anche usare SET SHOWPLAN_XML ON
per abilitarlo, e SET SHOWPLAN_XML OFF
per disabilitarlo.