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

SQL Server SHOWPLAN_ALL

I SQL Server kan du bruge SET SHOWPLAN_ALL erklæring for at returnere detaljerede oplysninger om, hvordan en T-SQL-sætning udføres, samt estimater af ressourcekravene til sætningerne.

SHOWPLAN_ALL returnerer information som et sæt rækker, der danner et hierarkisk træ, der repræsenterer de trin, som SQL Server-forespørgselsprocessoren tager, når den udfører hver sætning. Det ligner SHOWPLAN_TEXT , bortset fra at SHOWPLAN_ALL returnerer mere detaljerede oplysninger (og er beregnet til at blive brugt med applikationer, der kan håndtere dets output).

Du kan indstille SHOWPLAN_ALL til enten ON eller OFF .

Når SHOWPLAN_ALL er ON , udføres alle efterfølgende T-SQL-sætninger ikke. I stedet returnerer SQL Server udførelsesoplysninger for sætningen (uden at udføre den).

Det er vigtigt at bemærke, at SHOWPLAN_ALL giver estimat af ressourcekravene, og at de faktiske ressourcekrav kan være forskellige, når sætningen rent faktisk udføres.

Eksempel

Her er et eksempel til at demonstrere.

SET SHOWPLAN_ALL ON;
GO

SELECT * FROM Cats;
GO

Bemærk, at SET SHOWPLAN_ALL kan ikke specificeres i en lagret procedure, og det skal være den eneste sætning i en batch.

Sådan ser resultatet ud i Azure Data Studio:

Og her er, hvordan det ser ud i mssql-cli (kommandolinjegrænseflade), når du bruger lodret output:

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.

Der er mange spalter, så jeg brugte lodret output her, så det gør det nemmere at læse.

Hvis min forespørgsel var mere kompleks, ville flere rækker blive returneret.

Her er et eksempel på en (lidt) mere kompleks forespørgsel.

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

Resultat:

Sådan slukker du det

Du kan slå det fra ved at bruge SET SHOWPLAN_ALL OFF .

Når du har gjort dette, vil efterfølgende sætninger udføres som normalt.

SET SHOWPLAN_ALL OFF;
GO

SELECT * FROM Cats;
GO

Resultat:

Commands completed successfully.
+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 1       | Meow      |
| 2       | Fluffy    |
| 3       | Scratch   |
+---------+-----------+
(3 rows affected)
Commands completed successfully.

Forældet eller ej?

Ifølge denne gamle MSDN-artikel, SET SHOWPLAN_ALL er planlagt til udfasning i fremtidige showplan-versioner, og det anbefales, at du bruger SET SHOWPLAN_XML i stedet.

Den MSDN-artikel er dog til SQL Server 2008 R2, og mens jeg skriver dette, ser den ikke ud til at være blevet forældet i SQL Server 2019. Faktisk nævner den aktuelle dokumentation ikke noget om afskrivning, og den er ikke inkluderet når jeg kører en liste over forældede elementer i SQL Server.

Uanset hvad, kan det nok betale sig at have dette i tankerne, før du bruger det i fremtidige udgivelser.

Grafisk udførelsesplan

Hvis du bruger et grafisk værktøj såsom SSMS eller Azure Data Studio, har du muligvis mulighed for at se den anslåede grafiske forespørgselsudførelsesplan for den aktuelle forespørgsel.

  • I SSMS kan du bruge Ctrl + L at gøre dette. Eller du kan klikke på Vis estimeret eksekveringsplan ikonet, eller højreklik i forespørgselsvinduet og vælg Vis estimeret eksekveringsplan .
  • I Azure Data Studio kan du klikke på Forklar knappen over forespørgselsvinduet.

Du kan også bruge SET SHOWPLAN_XML ON for at aktivere det, og SET SHOWPLAN_XML OFF for at deaktivere den.


  1. PL/pgSQL kontrollerer om der findes en række

  2. Det svarer til SQLServer-funktionen SCOPE_IDENTITY() i mySQL?

  3. Beverly Hills 90210 og ZIP+4:Håndtering af adresser i datamodeller

  4. ListView viser ikke de korrekte billeder, der er i drawable i henhold til deres navn i sqlite