SET SHOWPLAN_XML (Transact-SQL)
van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (alleen toegewezen SQL-pool)SQL Analytics-eindpunt in Microsoft FabricWarehouse in Microsoft Fabric
Zorgt ervoor dat SQL Server geen Transact-SQL instructies uitvoert. In plaats daarvan retourneert SQL Server gedetailleerde informatie over hoe de instructies worden uitgevoerd in de vorm van een goed gedefinieerd XML-document.
Set-SHOWPLAN_XML in Fabric Data Warehouse en SQL Analytics-eindpunt is een preview-functie.
Transact-SQL syntaxisconventies
Syntaxis
SET SHOWPLAN_XML { ON | OFF }
Opmerkingen
De instelling van SET SHOWPLAN_XML wordt ingesteld bij uitvoering of uitvoeringstijd en niet op parseringstijd.
Wanneer SET SHOWPLAN_XML is ingeschakeld, retourneert SQL Server informatie over het uitvoeringsplan voor elke instructie zonder deze uit te voeren en worden Transact-SQL instructies niet uitgevoerd. Nadat deze optie is ingesteld op AAN, wordt informatie over het uitvoeringsplan over alle volgende Transact-SQL instructies geretourneerd totdat de optie is uitgeschakeld. Als bijvoorbeeld een CREATE TABLE-instructie wordt uitgevoerd terwijl SET SHOWPLAN_XML IS INGESCHAKELD, retourneert SQL Server een foutbericht uit een volgende SELECT-instructie met betrekking tot diezelfde tabel; de opgegeven tabel bestaat niet. Daarom mislukken volgende verwijzingen naar deze tabel. Wanneer SET SHOWPLAN_XML UIT is, voert SQL Server de instructies uit zonder een rapport te genereren.
SET SHOWPLAN_XML is bedoeld om uitvoer te retourneren als nvarchar(max) voor toepassingen zoals het hulpprogramma sqlcmd, waarbij de XML-uitvoer vervolgens wordt gebruikt door andere hulpprogramma's om de gegevens van het queryplan weer te geven en te verwerken.
Notitie
De dynamische beheerweergave, sys.dm_exec_query_plan
, retourneert dezelfde informatie als SET SHOWPLAN XML in het xml- gegevenstype. Deze informatie wordt geretourneerd uit de kolom query_plan
van sys.dm_exec_query_plan
. Zie sys.dm_exec_query_plan (Transact-SQL)voor meer informatie.
SET SHOWPLAN_XML kan niet worden opgegeven in een opgeslagen procedure. Dit moet de enige instructie in een batch zijn.
SET SHOWPLAN_XML retourneert informatie als een set XML-documenten. Elke batch na de INSTRUCTIE SET SHOWPLAN_XML ON wordt weergegeven in de uitvoer door één document. Elk document bevat de tekst van de instructies in de batch, gevolgd door de details van de uitvoeringsstappen. In het document worden de geschatte kosten, het aantal rijen, de geopende indexen en typen operators weergegeven die zijn uitgevoerd, de samenvoegvolgorde en meer informatie over de uitvoeringsplannen.
Notitie
Als Werkelijke uitvoeringsplan opnemen is geselecteerd in SQL Server Management Studio, produceert deze SET-optie geen XML Showplan-uitvoer. Wis de knop Werkelijke uitvoeringsplan opnemen voordat u deze SET-optie gebruikt.
Geschatte uitvoeringsplannen via SSMS en SET-SHOWPLAN_XML zijn beschikbaar voor toegewezen SQL-pools (voorheen SQL DW) en toegewezen SQL-pools in Azure Synapse Analytics. Er zijn verschillende opdrachten om een daadwerkelijk uitvoeringsplan op te halen voor toegewezen SQL-pools (voorheen SQL DW) en toegewezen SQL-pools in Azure Synapse Analytics. Zie Uw toegewezen SQL-poolworkload van Azure Synapse Analytics bewaken met behulp van DMV'svoor meer informatie.
Locatie van SHOWPLAN-uitvoer
Het document met het XML-schema voor de XML-uitvoer door SET SHOWPLAN_XML wordt gekopieerd tijdens de installatie naar een lokale map op de computer waarop Microsoft SQL Server is geïnstalleerd. Het document is te vinden op het station met de SQL Server-installatiebestanden, op een pad dat lijkt op het volgende:
\Microsoft SQL Server\130\Tools\Binn\schemas\sqlserver\2004\07\showplan\showplanxml.xsd
In het voorgaande pad wordt het knooppunt 130\
gebruikt door SQL Server 2016. Het getal 130 wordt afgeleid van het eerste knooppunt van de waarde die wordt geretourneerd door SELECT @@VERSION
, wat 13 is. Voor SQL Server 2017 zou het pad 140\
gebruiken, omdat het eerste knooppunt van de @@VERSION
-waarde 14 is. SQL Server 2019 is de eerste waarde van @@VERSION
15. SQL Server 2022 de eerste waarde van @@VERSION
is 16.
Het Showplan-schema vindt u ook in XML-schema's van Microsoft SQL Server.
Machtigingen
Als u SET-SHOWPLAN_XML wilt gebruiken, moet u over voldoende machtigingen beschikken om de instructies uit te voeren waarop SET SHOWPLAN_XML wordt uitgevoerd en moet u SHOWPLAN-machtiging hebben voor alle databases met objecten waarnaar wordt verwezen.
Voor SELECT
, INSERT
, UPDATE
, DELETE
, EXEC *stored_procedure*
en EXEC *user_defined_function*
instructies moet de gebruiker een Showplan maken:
De juiste machtigingen hebben om de Transact-SQL-instructies uit te voeren.
ShowPLAN-machtigingen hebben voor alle databases met objecten waarnaar wordt verwezen door de Transact-SQL-instructies, zoals tabellen, weergaven, enzovoort.
Voor alle andere instructies, zoals DDL, USE *database_name*
, SET
, DECLARE
, dynamische SQL, enzovoort, zijn alleen de juiste machtigingen nodig om de Transact-SQL-instructies uit te voeren.
Voorbeelden
De twee instructies die volgen, gebruiken de set-SHOWPLAN_XML-instellingen om de manier weer te geven waarop SQL Server het gebruik van indexen in query's analyseert en optimaliseert.
De eerste query maakt gebruik van de vergelijkingsoperator Equals (=
) in de WHERE-component voor een geïndexeerde kolom. De tweede query maakt gebruik van de OPERATOR LIKE in de WHERE-component. Dit dwingt SQL Server om een geclusterde indexscan te gebruiken en de gegevens te vinden die voldoen aan de WHERE-componentvoorwaarde. De waarden in de EstimateRows
en de EstimatedTotalSubtreeCost
kenmerken zijn kleiner voor de eerste geïndexeerde query, wat aangeeft dat deze veel sneller wordt verwerkt en dat er minder resources worden gebruikt dan de niet-geïndexeerde query.
USE AdventureWorks2022;
GO
SET SHOWPLAN_XML ON;
GO
-- First query.
SELECT BusinessEntityID
FROM HumanResources.Employee
WHERE NationalIDNumber = '509647174';
GO
-- Second query.
SELECT BusinessEntityID, JobTitle
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Production%';
GO
SET SHOWPLAN_XML OFF;