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
Returnerar Showplan i XML-format för den batch som specificeras av planhandtaget. Planen som specificeras av planhandtaget kan antingen vara cachad eller för närvarande köras.
XML-schemat för Showplan är publicerat och tillgängligt på denna Microsoft-webbplats. Det finns också tillgängligt i katalogen där SQL Server är installerad.
Transact-SQL syntaxkonventioner
Syntax
sys.dm_exec_query_plan(plan_handle)
Arguments
plan_handle
Är en token som unikt identifierar en frågeexekveringsplan för en batch som har körts och vars plan finns i plancachen, eller för närvarande körs.
plan_handle är varbinary(64).
Plan_handle kan hämtas från följande dynamiska hanteringsobjekt:
Tabell returnerad
| Kolumnnamn | Datatyp | Description |
|---|---|---|
| dbid | smallint | ID för kontextdatabasen som var i kraft när Transact-SQL-instruktionen som motsvarar den här planen kompilerades. För ad hoc- och förberedda SQL-instruktioner kompilerades ID:t för databasen där -uttrycken kompilerades. Kolumnen är null. |
| Objekt-ID | int | ID för objektet (till exempel lagrad procedur eller användardefinierad funktion) för den här frågeplanen. För ad hoc- och förberedda batchar är den här kolumnen null. Kolumnen är null. |
| number | smallint | Numrerat heltal för lagrad procedur. Till exempel kan en grupp procedurer för orderansökan kallas orderproc; 1, orderproc; 2, och så vidare. För ad hoc- och förberedda batchar är den här kolumnen null. Kolumnen är null. |
| krypterade | bit | Anger om motsvarande lagrade procedur är krypterad. 0 = inte krypterad 1 = krypterad Kolumnen är inte nullbar. |
| query_plan | xml | Innehåller kompileringstids-Showplan-representationen av frågeexekveringsplanen som specificeras med plan_handle. Showplan är i XML-format. En plan genereras för varje batch som innehåller till exempel ad hoc-Transact-SQL-instruktioner, lagrade proceduranrop och användardefinierade funktionsanrop. Kolumnen är null. |
Anmärkningar
Under följande förhållanden returneras inget Showplan-utdata i kolumnen query_plan i den returnerade tabellen för sys.dm_exec_query_plan:
Om frågeplanen som anges med plan_handle har tagits bort från plancachen är kolumnen query_plan i den returnerade tabellen null. Till exempel kan detta tillstånd uppstå om det finns en tidsfördröjning mellan när planhandtaget fångades och när det användes med sys.dm_exec_query_plan.
Vissa Transact-SQL-satser är inte cachade, såsom bulkoperationer eller satser som innehåller strängliteraler större än 8 KB. XML Showplans för sådana satser kan inte hämtas med hjälp av sys.dm_exec_query_plan om inte batchen för närvarande körs eftersom de inte finns i cachen.
Om en Transact-SQL batch eller lagrad propus innehåller ett anrop till en användardefinierad funktion eller ett anrop till dynamisk SQL, till exempel med EXEC (sträng), inkluderas inte den kompilerade XML Showplan för den användardefinierade funktionen i tabellen som returneras av sys.dm_exec_query_plan för batchen eller den lagrade proceduren. Istället måste du göra ett separat anrop till sys.dm_exec_query_plan för det planhandtag som motsvarar den användardefinierade funktionen.
När en ad hoc-fråga använder enkel eller tvingad parameterisering kommer kolumnen query_plan endast innehålla satstexten och inte själva frågeplanen. För att returnera frågeplanen, anropa sys.dm_exec_query_plan för planhandtaget för den förberedda parameteriserade frågan. Du kan avgöra om frågan har parametriserats genom att referera till sql-kolumnen i sys.syscacheobjects-vyn eller textkolumnen i sys.dm_exec_sql_text dynamiska hanteringsvyn.
Anmärkning
På grund av en begränsning i antalet inbäddade nivåer som tillåts i xml-datatypen kan sys.dm_exec_query_plan inte returnera frågeplaner som uppfyller eller överstiger 128 nivåer av nästlade element. I tidigare versioner av SQL Server hindrade det här villkoret frågeplanen från att returneras och genererar fel 6335. I SQL Server 2005 (9.x) Service Pack 2 och senare versioner returnerar kolumnen query_plan NULL.
Du kan använda funktionen sys.dm_exec_text_query_plan (Transact-SQL) dynamisk hantering för att returnera utdata från frågeplanen i textformat.
Permissions
För att köra sys.dm_exec_query_plan måste en användare vara medlem i sysadmin-funktionen för fast server eller ha VIEW SERVER STATE behörighet på servern.
Behörigheter för SQL Server 2022 och senare
Kräver BEHÖRIGHET FÖR VISNINGSSERVERNS PRESTANDATILLSTÅND på servern.
Examples
Följande exempel visar hur man använder den sys.dm_exec_query_plan dynamiska hanteringsvyn.
För att se XML Showplans, kör följande frågor i Query Editor i SQL Server Management Studio, klicka sedan på ShowPlanXML i den query_plan kolumnen i tabellen som returneras av sys.dm_exec_query_plan. XML Showplan visas i sammanfattningspanelen Management Studio. För att spara XML Showplan till en fil, högerklicka på ShowPlanXML i kolumnen query_plan , klicka på Spara resultat som, namnge filen i formatet <file_name.sqlplan>; till exempel MyXMLShowplan.sqlplan.
A. Hämta den cachade frågeplanen för en långsamt löpande Transact-SQL eller batch
Frågeplaner för olika typer av Transact-SQL-batcher, såsom ad hoc-batcher, lagrade procedurer och användardefinierade funktioner, cachas i ett minnesområde som kallas plancache. Varje cachad frågeplan identifieras av en unik identifierare som kallas planhandtag. Du kan specificera detta planhandtag med den sys.dm_exec_query_plan dynamiska hanteringsvyn för att hämta exekveringsplanen för en viss Transact-SQL fråga eller batch.
Om en Transact-SQL fråga eller batch körs länge på en viss anslutning till SQL Server, hämta exekveringsplanen för den förfrågan eller batchen för att upptäcka vad som orsakar fördröjningen. Följande exempel visar hur man hämtar XML Showplan för en långsamt löpande fråga eller batch.
Anmärkning
För att köra detta exempel, ersätt värdena för session_id och plan_handle med värden specifika för din server.
Först, hämta sessions-ID (SPID) för processen som kör förfrågan eller batchen genom att använda den lagrade sp_who proceduren:
USE master;
GO
exec sp_who;
GO
Resultatmängden som returneras av sp_who indikerar att sessions-ID:t är 54. Du kan använda sessions-ID:t med den dynamiska hanteringsvyn sys.dm_exec_requests för att hämta planhandtaget genom att använda följande fråga:
USE master;
GO
SELECT * FROM sys.dm_exec_requests
WHERE session_id = 54;
GO
Tabellen som returneras av sys.dm_exec_requests indikerar att planhandtaget för den långsamt löpande frågan eller batchen är 0x06000100A27E7C1FA821B10600, vilket du kan specificera som plan_handle argument med sys.dm_exec_query_plan för att hämta exekveringsplanen i XML-format enligt följande. Exekveringsplanen i XML-format för den långsamt löpande frågan eller batchen finns i den query_plan kolumnen i tabellen som returneras av sys.dm_exec_query_plan.
USE master;
GO
SELECT *
FROM sys.dm_exec_query_plan (0x06000100A27E7C1FA821B10600);
GO
B. Hämta varje frågeplan från plancachen
För att hämta en ögonblicksbild av alla frågeplaner som finns i plancachen, hämta planhandtagen för alla frågeplaner i cachen genom att fråga den dynamiska hanteringsvyn sys.dm_exec_cached_plans . Planhandtagen lagras i kolumnen plan_handle i sys.dm_exec_cached_plans. Använd sedan operatorn CROSS APPLY för att skicka planhandtagen till sys.dm_exec_query_plan enligt följande. XML Showplan-utdata för varje plan som för närvarande finns i plancachen finns i kolumnen query_plan i tabellen som returneras.
USE master;
GO
SELECT *
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle);
GO
C. Hämta varje frågeplan för vilken servern har samlat in frågestatistik från plancachen
För att hämta en ögonblicksbild av alla frågeplaner för vilka servern har samlat statistik som för närvarande finns i plancachen, hämta planhandtagen för dessa planer i cachen genom att fråga den dynamiska sys.dm_exec_query_stats hanteringsvyn. Planhandtagen lagras i kolumnen plan_handle i sys.dm_exec_query_stats. Använd sedan operatorn CROSS APPLY för att skicka planhandtagen till sys.dm_exec_query_plan enligt följande. XML Showplan-utdata för varje plan som servern har samlat statistik för i plancachen finns i kolumnen query_plan i tabellen som returneras.
USE master;
GO
SELECT *
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);
GO
D. Hämta information om de fem vanligaste frågorna efter genomsnittlig CPU-tid
Följande exempel visar planerna och genomsnittlig CPU-tid för de fem vanligaste frågorna.
SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],
plan_handle, query_plan
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle)
ORDER BY total_worker_time/execution_count DESC;
GO
Se även
Dynamiska hanteringsvyer och funktioner (Transact-SQL)
sys.dm_exec_cached_plans (Transact-SQL)
sys.dm_exec_query_stats (Transact-SQL)
sys.dm_exec_requests (Transact-SQL)
sp_who (Transact-SQL)
Showplan-referens för logiska och fysiska operatorer
sys.dm_exec_text_query_plan (Transact-SQL)