In SQL Server kunt u de SET SHOWPLAN_ALL
. gebruiken statement om gedetailleerde informatie te retourneren over hoe een T-SQL-statement wordt uitgevoerd, evenals schattingen van de resourcevereisten voor de statements.
SHOWPLAN_ALL
retourneert informatie als een set rijen die een hiërarchische boomstructuur vormen die de stappen vertegenwoordigt die worden genomen door de SQL Server-queryprocessor terwijl deze elke instructie uitvoert. Het lijkt op SHOWPLAN_TEXT
, behalve dat SHOWPLAN_ALL
geeft meer gedetailleerde informatie terug (en is bedoeld om te worden gebruikt met toepassingen die de uitvoer aankunnen).
U kunt SHOWPLAN_ALL
. instellen naar ofwel ON
of OFF
.
Wanneer SHOWPLAN_ALL
is ON
, worden alle volgende T-SQL-instructies niet uitgevoerd. In plaats daarvan retourneert SQL Server uitvoeringsinformatie voor de instructie (zonder deze uit te voeren).
Het is belangrijk op te merken dat SHOWPLAN_ALL
geeft schattingen van de resourcevereisten, en dat de werkelijke resourcevereisten kunnen verschillen wanneer de instructie daadwerkelijk wordt uitgevoerd.
Voorbeeld
Hier is een voorbeeld om te demonstreren.
SET SHOWPLAN_ALL ON;
GO
SELECT * FROM Cats;
GO
Merk op dat SET SHOWPLAN_ALL
kan niet worden opgegeven in een opgeslagen procedure en moet de enige instructie in een batch zijn.
Zo ziet het resultaat eruit in Azure Data Studio:
En zo ziet het eruit in mssql-cli (opdrachtregelinterface) bij gebruik van verticale uitvoer:
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.
Er zijn veel kolommen, dus ik heb hier verticale uitvoer gebruikt, zodat het gemakkelijker te lezen is.
Als mijn zoekopdracht complexer was, zouden er meer rijen worden geretourneerd.
Hier is een voorbeeld van een (iets) complexere zoekopdracht.
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Resultaat:
Hoe het uit te schakelen
Je kunt het uitschakelen met SET SHOWPLAN_ALL OFF
.
Zodra je dit hebt gedaan, worden de volgende instructies normaal uitgevoerd.
SET SHOWPLAN_ALL OFF;
GO
SELECT * FROM Cats;
GO
Resultaat:
Commands completed successfully. +---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected) Commands completed successfully.
Verouderd of niet?
Volgens dit oude MSDN-artikel, SET SHOWPLAN_ALL
is gepland voor beëindiging in toekomstige showplan-versies, en het wordt aanbevolen dat u SET SHOWPLAN_XML
gebruikt in plaats daarvan.
Dat MSDN-artikel is echter voor SQL Server 2008 R2 en terwijl ik dit schrijf, lijkt het niet te zijn verouderd in SQL Server 2019. In de huidige documentatie wordt zelfs geen melding gemaakt van beëindiging en het is niet inbegrepen wanneer ik een lijst met verouderde items in SQL Server uitvoer.
Hoe dan ook, het loont waarschijnlijk de moeite om hier rekening mee te houden voordat u het in toekomstige releases gebruikt.
Grafisch uitvoeringsplan
Als u een grafisch hulpprogramma gebruikt, zoals SSMS of Azure Data Studio, heeft u mogelijk de mogelijkheid om het geschatte grafische uitvoeringsplan voor de query voor de huidige query te bekijken.
- In SSMS kun je Ctrl + L . gebruiken om dit te doen. Of u kunt klikken op Geschat uitvoeringsplan weergeven of klik met de rechtermuisknop in het queryvenster en selecteer Geschat uitvoeringsplan weergeven .
- In Azure Data Studio kunt u klikken op de Uitleggen knop boven het vraagvenster.
U kunt ook SET SHOWPLAN_XML ON
. gebruiken om het in te schakelen, en SET SHOWPLAN_XML OFF
om het uit te schakelen.