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

SQL Server SHOWPLAN_ALL

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.