sql >> Database >  >> RDS >> Sqlserver

Hoe SHOWPLAN_XML werkt in SQL Server

In SQL Server kunt u de SET SHOWPLAN_XML statement om gedetailleerde informatie te retourneren over hoe een T-SQL-statement wordt uitgevoerd, in de vorm van een goed gedefinieerd XML-document.

Het lijkt op SHOWPLAN_ALL , behalve dat SHOWPLAN_ALL retourneert zijn dataset van rijen die een hiërarchische boom vormen.

U kunt SHOWPLAN_XML . instellen naar ofwel ON of OFF .

Wanneer SHOWPLAN_XML 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).

Voorbeeld

Hier is een voorbeeld om te demonstreren.

SET SHOWPLAN_XML ON;
GO

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

Merk op dat SET SHOWPLAN_XML kan niet worden opgegeven in een opgeslagen procedure en moet de enige instructie in een batch zijn.

Het resultaat dat u krijgt, hangt mogelijk af van de tool die u gebruikt om toegang te krijgen tot SQL Server.

Wanneer ik dit in Azure Data Studio uitvoer, kan ik op de verschillende tabbladen klikken om een ​​ander beeld van het resultaat te krijgen.

De Resultaten tabblad geeft de onbewerkte XML-tekenreeks weer:

Als u op de rij klikt, wordt het XML-document geopend in een nieuw tabblad:

Het queryplan tab geeft een grafische weergave van het resultaat:

De Topactiviteiten tab presenteert de gegevens in tabelvorm waarmee u de gegevens kunt sorteren op verschillende meetwaarden:

Werkt niet?

Als het niet voor u werkt, zorg er dan voor dat Inclusief daadwerkelijk uitvoeringsplan is niet geselecteerd in SSMS. Wanneer dit is geselecteerd, SET SHOWPLAN_XML ON produceert geen XML Showplan-uitvoer.

Hoe het uit te schakelen

Je kunt het uitschakelen met SET SHOWPLAN_XML OFF .

Zodra je dit hebt gedaan, worden de volgende instructies normaal uitgevoerd.

SET SHOWPLAN_XML OFF;
GO

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

Resultaat:

Commands completed successfully.
+---------+-----------+---------+-----------+-----------+
| CatId   | CatName   | DogId   | DogName   | GoodDog   |
|---------+-----------+---------+-----------+-----------|
| 2       | Fluffy    | 2       | Fluffy    | 0         |
+---------+-----------+---------+-----------+-----------+
(1 row affected)
Commands completed successfully.

Uitvoeringsplan in GUI's

Als u een grafisch hulpprogramma gebruikt, zoals SSMS of Azure Data Studio, hebt u mogelijk een snelkoppelingsoptie om het geschatte grafische uitvoeringsplan voor query's te bekijken. Hierdoor kunt u het queryplan bekijken zonder dat u SET SHOWPLAN_XML ON . hoeft uit te voeren .

Een geschat zoekplan uitvoeren:

  • 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 . Dit voorkomt dat u SHOWPLAN_XML moet draaien aan en uit in je code.
  • In Azure Data Studio kunt u klikken op de Uitleggen knop boven het vraagvenster.

U kunt ook een echt zoekplan uitvoeren:

  • In SSMS, op de Query menu, klik op Inclusief feitelijk uitvoeringsplan of klik op Inclusief daadwerkelijk uitvoeringsplan werkbalkknop.
  • Ga in Azure Data Studio naar Bekijken> Opdrachtenpalet en typ Huidige zoekopdracht uitvoeren met feitelijk plan .

Houd er rekening mee dat als Inclusief daadwerkelijk uitvoeringsplan is geselecteerd in SSMS, de SET SHOWPLAN_XML ON optie produceert geen XML Showplan-uitvoer. Probeer het Actief uitvoeringsplan opnemen . te wissen knop voordat u deze SET . gebruikt optie.

Ik vind echter dat Azure Data Studio het tegenovergestelde doet SHOWPLAN_XML ON lijkt de Huidige zoekopdracht uitvoeren met feitelijk plan te negeren optie, behalve als ik Uitleggen . uitvoer eerst (geschat queryplan), waarna Huidige zoekopdracht uitvoeren met feitelijk plan werkt plotseling (de Actual Rows en Daadwerkelijke uitvoeringen kolommen van de Topactiviteiten tab retourneert de juiste gegevens).

Het is waarschijnlijk het beste om de XML Showplan-optie uit te schakelen voordat u andere methoden gebruikt om het queryplan op te halen.


  1. Serialiseren van verwijdert uit geclusterde Columnstore-indexen

  2. MySQL-gebruikersdatabase heeft geen wachtwoordkolommen - MySQL installeren op OSX

  3. Meerdere databases gebruiken in Laravel

  4. converteer Excel Date Serienummer naar Normale Datum