sql >> Database >  >> RDS >> Sqlserver

SQL Server SHOWPLAN_ALL

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.


  1. Verbind SQL Server met SugarCRM

  2. Gegevens ophalen met UTF-8-tekenset van MSSQL-server met behulp van de PHP FreeTDS-extensie

  3. Hoe de datumnotatie in de Oracle-database te wijzigen

  4. Waarom is het resultaat van de rijen met explain niet gelijk aan count()?