Share via


SET SHOWPLAN_ALL (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Veroorzaakt dat Microsoft SQL Server Transact-SQL statements niet uitvoert. In plaats daarvan geeft SQL Server gedetailleerde informatie terug over hoe de statements uitgevoerd zouden worden (een queryplan) en geeft schattingen van de resource-eisen voor de statements en verwachte rijen (cardinaliteitsschatting).

Transact-SQL syntaxis-conventies

Syntaxis

  
SET SHOWPLAN_ALL { ON | OFF }  

Opmerkingen

De instelling van SET SHOWPLAN_ALL wordt ingesteld tijdens execute- of run-tijd en niet tijdens parsetijd.

Wanneer SET SHOWPLAN_ALL AAN is, geeft SQL Server uitvoeringsinformatie terug voor elke instructie zonder deze uit te voeren, en Transact-SQL statements worden niet uitgevoerd. Nadat deze optie AAN is gezet, wordt informatie over alle volgende Transact-SQL-statements teruggegeven totdat de optie UIT is gezet. Als bijvoorbeeld een CREATE TABLE-instructie wordt uitgevoerd terwijl SET SHOWPLAN_ALL deze AAN is, geeft SQL Server een foutmelding terug van een volgende SELECT-instructie met diezelfde tabel, waarmee gebruikers worden geïnformeerd dat de gespecificeerde tabel niet bestaat. Daarom mislukken volgende verwijzingen naar deze tabel. Wanneer SET SHOWPLAN_ALL UIT is, voert SQL Server de statements uit zonder een rapport te genereren.

SET SHOWPLAN_ALL bedoeld is om gebruikt te worden door applicaties die geschreven zijn om de output ervan te verwerken. Gebruik SET SHOWPLAN_TEXT om leesbare output terug te geven voor Microsoft Win32-opdrachtpromptapplicaties, zoals de osql-hulp .

SET SHOWPLAN_TEXT en SET SHOWPLAN_ALL kunnen niet worden opgegeven binnen een opgeslagen procedure; Dat moeten de enige statements in een batch zijn.

SET SHOWPLAN_ALL levert informatie terug als een set rijen die een hiërarchische boom vormen die de stappen vertegenwoordigen die de SQL Server-queryprocessor neemt terwijl deze elke instructie uitvoert. Elke instructie die in de output wordt weergegeven, bevat één enkele rij met de tekst van de instructie, gevolgd door meerdere rijen met de details van de uitvoeringsstappen. De tabel toont de kolommen die de uitvoer bevat.

Kolomnaam Description
StmtText Voor rijen die niet van type PLAN_ROW zijn, bevat deze kolom de tekst van de Transact-SQL-instructie. Voor rijen van type PLAN_ROW bevat deze kolom een beschrijving van de bewerking. Deze kolom bevat de fysieke operator en kan optioneel ook de logische operator bevatten. Deze kolom kan ook worden gevolgd door een beschrijving die wordt bepaald door de fysieke operator. Voor meer informatie, zie Showplan Logical and Physical Operators Reference.
StmtId Nummer van de afschrift in de huidige batch.
NodeId ID van de node in de huidige query.
Parent Node-ID van de ouderstap.
PhysicalOp Fysiek implementatie-algoritme voor de node. Alleen voor rijen van type PLAN_ROWS.
LogicalOp Relationele algebraïsche operator die deze knoop vertegenwoordigt. Alleen voor rijen van type PLAN_ROWS.
argument Geeft aanvullende informatie over de uitgevoerde operatie. De inhoud van deze kolom hangt af van de fysieke operator.
GedefinieerdeWaarden Bevat een komma-gescheiden lijst van waarden die door deze operator worden geïntroduceerd. Deze waarden kunnen berekende expressies zijn die aanwezig waren in de huidige query (bijvoorbeeld in de SELECT-lijst of WHERE-clausule), of interne waarden die door de queryprocessor zijn geïntroduceerd om deze query te verwerken. Deze gedefinieerde waarden kunnen vervolgens elders binnen deze query worden verwezen. Alleen voor rijen van type PLAN_ROWS.
EstimateRows Geschat aantal rijen output geproduceerd door deze operator. Alleen voor rijen van type PLAN_ROWS.
EstimateIO Geschatte I/O-kosten* voor deze operator. Alleen voor rijen van type PLAN_ROWS.
EstimateCPU Geschatte CPU-kosten* voor deze operator. Alleen voor rijen van type PLAN_ROWS.
AvgRowSize Geschatte gemiddelde rijgrootte (in bytes) van de rij die door deze operator wordt gestuurd.
TotalSubtreeCost Geschatte (cumulatieve) kosten* van deze operatie en alle kindoperaties.
OutputList Bevat een komma-gescheiden lijst van kolommen die door de huidige bewerking worden geprojecteerd.
Warnings Bevat een door komma gescheiden lijst van waarschuwingsberichten die betrekking hebben op de huidige operatie. Waarschuwingsberichten kunnen de string "NO STATS:()" bevatten met een lijst van kolommen. Dit waarschuwingsbericht betekent dat de query-optimizer heeft geprobeerd een beslissing te nemen op basis van de statistieken voor deze kolom, maar er waren geen beschikbaar. Daarom moest de query-optimizer een gok doen, wat mogelijk resulteerde in de selectie van een inefficiënt queryplan. Voor meer informatie over het aanmaken of bijwerken van kolomstatistieken (die de query-optimizer helpen een efficiënter queryplan te kiezen), zie UPDATE STATISTICS. Deze kolom kan optioneel de string "MISSING JOIN PREDICATE" bevatten, wat betekent dat er een join (met tabellen) plaatsvindt zonder join-predicaat. Het per ongeluk weglaten van een join-predicaat kan resulteren in een query die veel langer duurt dan verwacht en een enorme set resultaten oplevert. Als deze waarschuwing aanwezig is, controleer dan of het ontbreken van een join-predicaat intentioneel is.
Type Node-type. Voor de ouderknoop van elke query is dit het type Transact-SQL statement (bijvoorbeeld SELECT, INSERT, EXECUTE, enzovoort). Voor subknooppunten die uitvoeringsplannen representeren, is het type PLAN_ROW.
Parallel 0 = De operator draait niet parallel.

1 = De operator draait parallel.
SchattingUitvoeringen Geschat aantal keren dat deze operator wordt uitgevoerd tijdens het uitvoeren van de huidige query.

*Kosten-eenheden zijn gebaseerd op een interne meting van tijd, niet op de kloktijd. Ze worden gebruikt om de relatieve kosten van een plan te bepalen in vergelijking met andere plannen.

Permissions

Om SET SHOWPLAN_ALL te gebruiken, moet je voldoende rechten hebben om de statements uit te voeren waarop SET SHOWPLAN_ALL wordt uitgevoerd, en je moet SHOWPLAN-toestemming hebben voor alle databases die verwezen objecten bevatten.

Voor de instructies SELECT, INSERT, UPDATE, DELETE , EXEC stored_procedure en EXEC user_defined_function moet de gebruiker om een Showplan te 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 permissies nodig om de Transact-SQL statements uit te voeren.

Voorbeelden

De twee volgende statements gebruiken de SET SHOWPLAN_ALL-instellingen om te laten zien hoe SQL Server het gebruik van indexen in queries analyseert en optimaliseert.

De eerste query gebruikt de Equals-vergelijkingsoperator (=) in de WHERE-clausule op een geïndexeerde kolom. Dit resulteert in de Clustered Index Seek-waarde in de LogicalOp-kolom en de naam van de index in de Argument-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 voldoet aan de WHERE-clausulevoorwaarde. Dit resulteert in de Clustered Index Scan-waarde in de LogicalOp-kolom met de naam van de index in de Argument-kolom , en de Filter-waarde in de LogicalOp-kolom met de WHERE-clausule in de Argument-kolom .

De waarden in de kolommen EstimateRows en TotalSubtreeCost zijn kleiner voor de eerste geïndexeerde query, wat aangeeft dat deze veel sneller wordt verwerkt en minder middelen gebruikt dan de niet-geïndexeerde query.

USE AdventureWorks2022;  
GO  
SET SHOWPLAN_ALL ON;  
GO  
-- First query.  
SELECT BusinessEntityID   
FROM HumanResources.Employee  
WHERE NationalIDNumber = '509647174';  
GO  
-- Second query.  
SELECT BusinessEntityID, EmergencyContactID   
FROM HumanResources.Employee  
WHERE EmergencyContactID LIKE '1%';  
GO  
SET SHOWPLAN_ALL OFF;  
GO  

Zie ook

SET-instructies (Transact-SQL)
SET SHOWPLAN_TEXT (Transact-SQL)
SET SHOWPLAN_XML (Transact-SQL)