Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Vrací Showplan ve formátu XML pro dávku specifikovanou plánovým handlem. Plán určený rukojetím plánu může být buď uložen do mezipaměti, nebo právě vykonáván.
XML schéma pro Showplan je publikováno a dostupné na této webové stránce Microsoftu. Je také dostupný v adresáři, kde je SQL Server nainstalován.
Syntaxe
sys.dm_exec_query_plan(plan_handle)
Arguments
plan_handle
Je token, který jednoznačně identifikuje plán provedení dotazu pro dávku, která byla vykonána a její plán se nachází v cache plánu, nebo je právě vykonává.
plan_handle je varbinary(64).
Plan_handle lze získat z následujících objektů dynamické správy:
Vrácená tabulka
| Název sloupce | Datový typ | Description |
|---|---|---|
| dbid | smallint | ID kontextové databáze, která se projevila při kompilaci příkazu Transact-SQL odpovídající tomuto plánu. Pro ad hoc a připravené příkazy SQL ID databáze, ve které byly příkazy zkompilovány. Sloupec je nullable. |
| ID objektu | int | ID objektu (například uložená procedura nebo uživatelem definovaná funkce) pro tento plán dotazu. Pro ad hoc a připravené dávky má tento sloupec hodnotu null. Sloupec je nullable. |
| number | smallint | Celé číslo očíslované uložené procedury. Například skupina procedur pro aplikaci příkazů může být pojmenována orderproc; 1, orderproc; 2, a tak dále. Pro ad hoc a připravené dávky má tento sloupec hodnotu null. Sloupec je nullable. |
| zakódovaný | bit | Určuje, jestli je odpovídající uložená procedura zašifrovaná. 0 = nezašifrováno 1 = šifrované Sloupec není nulovatelný. |
| query_plan | xml | Obsahuje reprezentaci Showplan v době kompilace plánu provádění dotazu, která je specifikována pomocí plan_handle. Showplan je ve formátu XML. Jeden plán se vygeneruje pro každou dávku, která obsahuje například ad hoc příkazy Transact-SQL, volání uložených procedur a volání funkcí definovaná uživatelem. Sloupec je nullable. |
Poznámky
Za následujících podmínek se v sloupci query_plan vrácené tabulky pro sys.dm_exec_query_plan nevrací výstup ze Showplan:
Pokud byl plán dotazu specifikovaný pomocí plan_handle vyřazen z cache plánu, sloupec query_plan vrácené tabulky je null. Například tato podmínka může nastat, pokud existuje časové zpoždění mezi tím, kdy byla schránka plánu zachycena, a jejím použitím s sys.dm_exec_query_plan.
Některé Transact-SQL příkazy nejsou cacheovány, například příkazy pro hromadné operace nebo příkazy obsahující literály řetězců větší než 8 KB. XML Showplany pro takové příkazy nelze pomocí sys.dm_exec_query_plan získat, pokud se dávka právě nevykonává, protože v cache neexistují.
Pokud Transact-SQL batch nebo uložená procedura obsahuje volání uživatelsky definované funkce nebo volání dynamického SQL, například pomocí EXEC (string), zkompilovaný XML Showplan pro uživatelsky definovanou funkci není zahrnut v tabulce vrácené sys.dm_exec_query_plan pro batch nebo uloženou proceduru. Místo toho musíte provést samostatné volání pro sys.dm_exec_query_plan pro plánovací handle odpovídající uživatelem definované funkciji.
Když ad hoc dotaz používá jednoduchou nebo nucenou parametrizaci, sloupec query_plan obsahuje pouze text příkazu, nikoli skutečný plán dotazu. Pro vrácení plánu dotazu zavolejte sys.dm_exec_query_plan pro rukojeť plánu připraveného parametrizovaného dotazu. Zjistit, zda byl dotaz parametrizován, můžete odkazovat na sloupec SQL v pohledu sys.syscacheobjects nebo na textový sloupec v pohledu sys.dm_exec_sql_text dynamické správy.
Poznámka:
Kvůli omezení počtu vnořených úrovní povolených v XML datovém typu nemůže sys.dm_exec_query_plan vrátit plány dotazů, které splňují nebo překračují 128 úrovní vnořených prvků. V dřívějších verzích SQL Serveru tato podmínka zabránila vrácení plánu dotazu a vygenerování chyby 6335. V SQL Server 2005 (9.x) Service Pack 2 a novějších verzích sloupec query_plan vrací NULL.
Můžete použít dynamickou správu sys.dm_exec_text_query_plan (Transact-SQL ) k vrácení výstupu plánu dotazu v textové podobě.
Povolení
Pro spuštění sys.dm_exec_query_plan musí být uživatel členem role pevného správce systému nebo mít VIEW SERVER STATE oprávnění na serveru.
Oprávnění pro SQL Server 2022 a novější
Vyžaduje oprávnění ZOBRAZIT STAV VÝKONU SERVERU na serveru.
Examples
Následující příklady ukazují, jak používat sys.dm_exec_query_plan dynamický pohled na správu.
Pro zobrazení XML Showplans spusťte následující dotazy v Query Editoru SQL Server Management Studio, poté klikněte na ShowPlanXML ve sloupci query_plan tabulky vrácené sys.dm_exec_query_plan. XML Showplan se zobrazí v panelu souhrnu Management Studio. Pro uložení XML Showplanu do souboru klikněte pravým tlačítkem na ShowPlanXML ve sloupci query_plan , klikněte na Uložit výsledky jako, pojmenujte soubor ve formátu <file_name.sqlplan>; například MyXMLShowplan.sqlplan.
A. Získejte plán dotazů v cache pro pomalu běžící Transact-SQL dotaz nebo dávkový soubor
Plány dotazů pro různé typy Transact-SQL dávek, jako jsou ad hoc dávky, uložené procedury a uživatelsky definované funkce, jsou uloženy do oblasti paměti nazývané plánová cache. Každý cacheovaný plán dotazu je identifikován jedinečným identifikátorem nazývaným plánový handle. Tento plán můžete zadat pomocí sys.dm_exec_query_plan dynamického pohledu správy, abyste získali plán provedení pro konkrétní Transact-SQL dotaz nebo dávku.
Pokud Transact-SQL dotaz nebo batch běží dlouho na konkrétním spojení se SQL Serverem, získejte plán provedení tohoto dotazu nebo dávkového vyšetření, abyste zjistili, co způsobuje zpoždění. Následující příklad ukazuje, jak získat XML Showplan pro pomalu běžící dotaz nebo dávku.
Poznámka:
Pro tento příklad nahraďte hodnoty session_id a plan_handle hodnotami specifickými pro váš server.
Nejprve získáte ID relace (SPID) pro proces, který dotaz nebo dávku vykonává, pomocí uložené procedury sp_who :
USE master;
GO
exec sp_who;
GO
Výsledná množina, která je vrácena , sp_who označuje, že ID relace je 54. Můžete použít ID relace v dynamickém pohledu sys.dm_exec_requests správy k získání plánu pomocí následujícího dotazu:
USE master;
GO
SELECT * FROM sys.dm_exec_requests
WHERE session_id = 54;
GO
Tabulka, kterou sys.dm_exec_requests vrátí, označuje, že plánová rukojeť pro pomalu běžící dotaz nebo batch je , 0x06000100A27E7C1FA821B10600kterou můžete zadat jako plan_handle argument s , sys.dm_exec_query_plan abyste získali plán vykonání ve formátu XML následovně. Plán provedení ve formátu XML pro pomalu běžící dotaz nebo dávku je obsažen ve sloupci query_plan tabulky vrácené .sys.dm_exec_query_plan
USE master;
GO
SELECT *
FROM sys.dm_exec_query_plan (0x06000100A27E7C1FA821B10600);
GO
B. Získejte každý plán dotazu z cache plánu
Pro získání snímku všech plánů dotazů umístěných v cache plánů načtěte rukojeti plánů všech plánů dotazů v cache dotazem sys.dm_exec_cached_plans do dynamického pohledu správy. Rukojeti plánu jsou uloženy ve sloupci plan_handle .sys.dm_exec_cached_plans Poté použijte operátor CROSS APPLY k předání rukojeti plánu sys.dm_exec_query_plan následujícím způsobem. Výstup XML Showplanu pro každý plán, který je aktuálně v plánové cache, je ve sloupci query_plan tabulky, která je vrácena.
USE master;
GO
SELECT *
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle);
GO
C. Získejte každý plán dotazů, pro který server shromáždil statistiky dotazů, z cache plánu
Pro získání snímku všech plánů dotazů, pro které server shromáždil statistiky, jež se aktuálně nacházejí v cache plánů, načtěte plánové rukojeti těchto plánů v cache dotazem do sys.dm_exec_query_stats dynamického pohledu správy. Rukojeti plánu jsou uloženy ve sloupci plan_handle .sys.dm_exec_query_stats Poté použijte operátor CROSS APPLY k předání rukojeti plánu sys.dm_exec_query_plan následujícím způsobem. Výstup XML Showplanu pro každý plán, pro který server aktuálně shromáždil statistiky v cache plánu, je ve sloupci query_plan tabulky, která je vrácena.
USE master;
GO
SELECT *
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);
GO
D. Získejte informace o pěti nejčastějších dotazech podle průměrné doby CPU
Následující příklad vrací plány a průměrný čas CPU pro pět nejčastějších dotazů.
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
Viz také
zobrazení a funkce dynamické správy (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: Odkaz na logické a fyzické operátory
sys.dm_exec_text_query_plan (Transact-SQL)