Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Gör att Microsoft SQL Server inte kör Transact-SQL satser. Istället returnerar SQL Server detaljerad information om hur satserna skulle exekveras (en frågeplan) och ger uppskattningar av resursbehovet för satserna och förväntade rader (kardinalitetsuppskattning).
Transact-SQL syntaxkonventioner
Syntax
SET SHOWPLAN_ALL { ON | OFF }
Anmärkningar
Inställningen för SET SHOWPLAN_ALL är inställd vid exekverings- eller körningstid och inte vid parsetid.
När SET SHOWPLAN_ALL är PÅ returnerar SQL Server exekveringsinformation för varje sats utan att köra den, och Transact-SQL satser körs inte. Efter att detta alternativ är PÅ returneras information om alla efterföljande Transact-SQL-satser tills alternativet är AV. Till exempel, om ett CREATE TABLE-sats körs medan SET SHOWPLAN_ALL är PÅ, returnerar SQL Server ett felmeddelande från en efterföljande SELECT-sats som involverar samma tabell, vilket informerar användare om att den specificerade tabellen inte existerar. Därför misslyckas efterföljande referenser till den här tabellen. När SET SHOWPLAN_ALL är AV kör SQL Server satserna utan att generera en rapport.
SET SHOWPLAN_ALL är avsedd att användas av applikationer skrivna för att hantera dess utdata. Använd SET SHOWPLAN_TEXT för att returnera läsbar utdata för Microsoft Win32-kommandopromptsapplikationer, såsom osql-verktyget .
SET SHOWPLAN_TEXT och SET SHOWPLAN_ALL kan inte specificeras i en lagrad procedur; De måste vara de enda uttalandena i en batch.
SET SHOWPLAN_ALL returnerar information som en uppsättning rader som bildar ett hierarkiskt träd som representerar de steg som SQL Server-frågeprocessorn utför när varje sats exekveras. Varje sats som återspeglas i utdatan innehåller en enda rad med texten till satsen, följt av flera rader med detaljer om exekveringsstegen. Tabellen visar vilka kolumner som utdata innehåller.
| Kolumnnamn | Description |
|---|---|
| StmtText | För rader som inte är av typ PLAN_ROW innehåller denna kolumn texten till Transact-SQL-satsen. För rader av typ PLAN_ROW innehåller denna kolumn en beskrivning av operationen. Denna kolumn innehåller den fysiska operatorn och kan valfritt även innehålla den logiska operatorn. Denna kolumn kan också följas av en beskrivning som bestäms av den fysiska operatorn. För mer information, se Showplan Logical and Physical Operators Reference. |
| StmtId | Nummer på kontoutdraget i den aktuella omgången. |
| NodeId | ID för noden i den aktuella frågan. |
| Förälder | Nod-ID för föräldrasteget. |
| PhysicalOp | Fysisk implementeringsalgoritm för noden. Endast för rader av typ PLAN_ROWS. |
| LogicalOp | Relationell algebraisk operator som denna nod representerar. Endast för rader av typ PLAN_ROWS. |
| Argument | Tillhandahåller kompletterande information om den operation som utförs. Innehållet i denna kolumn beror på den fysiska operatorn. |
| DefinedValues | Innehåller en kommaseparerad lista av värden som introduceras av denna operator. Dessa värden kan vara beräknade uttryck som fanns i den aktuella frågan (till exempel i SELECT-listan eller WHERE-klausulen), eller interna värden som introducerats av frågeprocessorn för att bearbeta denna fråga. Dessa definierade värden kan sedan refereras till någon annanstans inom denna fråga. Endast för rader av typ PLAN_ROWS. |
| EstimateRows | Uppskattat antal rader av utdata som produceras av denna operatör. Endast för rader av typ PLAN_ROWS. |
| EstimateIO | Uppskattad I/O-kostnad* för denna operatör. Endast för rader av typ PLAN_ROWS. |
| EstimateCPU | Uppskattad CPU-kostnad* för denna operatör. Endast för rader av typ PLAN_ROWS. |
| AvgRowSize | Uppskattad genomsnittlig radstorlek (i bytes) för raden som passerar genom denna operator. |
| TotalSubtreeCost | Uppskattad (kumulativ) kostnad* för denna operation och alla barnoperationer. |
| OutputList | Innehåller en kommaseparerad lista av kolumner som projiceras av den aktuella operationen. |
| Warnings | Innehåller en komma-separerad lista av varningsmeddelanden relaterade till den aktuella operationen. Varningsmeddelanden kan innehålla strängen "NO STATS:()" med en lista över kolumner. Detta varningsmeddelande innebär att frågeoptimeraren försökte fatta ett beslut baserat på statistiken för denna kolumn, men att ingen fanns tillgänglig. Följaktligen var frågeoptimeraren tvungen att göra en gissning, vilket kan ha lett till att en ineffektiv frågeplan valts. För mer information om att skapa eller uppdatera kolumnstatistik (vilket hjälper frågeoptimeraren att välja en mer effektiv frågeplan), se UPPDATERA STATISTIK. Denna kolumn kan valfritt innehålla strängen "MISSING JOIN PREDICATE", vilket innebär att en join (med tabeller) sker utan join-predikat. Att av misstag tappa ett join-predikat kan resultera i en fråga som tar mycket längre tid att köra än väntat och ger en enorm resultatuppsättning. Om denna varning finns, kontrollera att frånvaron av ett join-predikat är avsiktlig. |
| Type | Nodtyp. För föräldranoden till varje fråga är detta Transact-SQL satstypen (till exempel SELECT, INSERT, EXECUTE och så vidare). För subnoder som representerar exekveringsplaner är typen PLAN_ROW. |
| Parallell |
0 = Operatören körs inte parallellt. 1 = Operatören körs parallellt. |
| UppskattningUtföranden | Uppskattat antal gånger denna operator kommer att köras under den aktuella frågan. |
*Kostnadsenheter baseras på en intern tidsmätning, inte väggklockstid. De används för att bestämma den relativa kostnaden för en plan jämfört med andra planer.
Permissions
För att använda SET SHOWPLAN_ALL måste du ha tillräckliga behörigheter för att köra de satser där SET SHOWPLAN_ALL körs, och du måste ha SHOWPLAN-behörighet för alla databaser som innehåller refererade objekt.
För satserna SELECT, INSERT, UPDATE, DELETE , EXEC stored_procedure och EXEC user_defined_function måste användaren för att skapa en Showplan:
Ha rätt behörighet för att köra Transact-SQL-instruktionerna.
Ha SHOWPLAN-behörighet för alla databaser som innehåller objekt som refereras av Transact-SQL-instruktioner, till exempel tabeller, vyer och så vidare.
För alla andra satser, såsom DDL, USE database_name, SET, DECLARE, dynamisk SQL och så vidare, krävs endast lämpliga behörigheter för att köra Transact-SQL-satserna.
Examples
De två följande satserna använder SET SHOWPLAN_ALL-inställningarna för att visa hur SQL Server analyserar och optimerar användningen av index i frågor.
Den första frågan använder Equals-jämförelseoperatorn (=) i WHERE-klausulen på en indexerad kolumn. Detta resulterar i värdet Clustered Index Seek i kolumnen LogicalOp och namnet på indexet i kolumnen Argument .
Den andra frågan använder LIKE-operatorn i WHERE-satsen. Detta tvingar SQL Server att använda en klustrad indexskanning och hitta den data som uppfyller WHERE-klausulvillkoret. Detta resulterar i värdet Clustered Index Scan i kolumnen LogicalOp med namnet på indexet i kolumnen Argument , och Filtervärdet i kolumnen LogicalOp med WHERE-klausulvillkoret i kolumnen Argument .
Värdena i kolumnerna EstimateRows och TotalSubtreeCost är mindre för den första indexerade frågan, vilket indikerar att den bearbetas mycket snabbare och använder färre resurser än den icke-indexerade frågan.
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
Se även
SET-instruktioner (Transact-SQL)
STÄLL SHOWPLAN_TEXT (Transact-SQL)
SET SHOWPLAN_XML (Transact-SQL)