Sdílet prostřednictvím


sys.dm_exec_query_plan_stats (Transact-SQL)

Platí pro: SQL Server 2019 (15.x) a novější verze Databáze Azure SQL DatabaseAzure SQL Managed InstanceSQL v Microsoft Fabric

Vrátí ekvivalent posledního známého skutečného plánu provádění pro dříve uložený plán dotazu v mezipaměti.

Syntaxe

sys.dm_exec_query_plan_stats ( plan_handle )

Arguments

plan_handle

Token, který jednoznačně identifikuje plán provádění dotazů pro dávku, která se spustila, a její plán se nachází v mezipaměti plánu nebo se právě spouští. 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.
objectid 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 postupů pro orders aplikaci může mít název orderproc;1, orderproc;2atd. Pro ad hoc a připravené dávky má tento sloupec hodnotu null.

Sloupec je nullable.
encrypted bit Určuje, jestli je odpovídající uložená procedura zašifrovaná.

0 = nezašifrováno
1 = šifrované

Sloupec není nullable.
query_plan xml Obsahuje poslední známou reprezentaci plánu spuštění dotazu, který je zadaný 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

Toto je funkce výslovného souhlasu. Pokud chcete povolit na úrovni serveru, použijte příznak trasování 2451. Pokud chcete povolit na úrovni databáze, použijte LAST_QUERY_PLAN_STATS možnost v konfiguraci ALTER DATABASE SCOPED.

Tato systémová funkce funguje ve zjednodušené infrastruktuře profilace statistik provádění dotazů. Pro více informací, viz Infrastruktura profilování dotazů.

Výstup sys.dm_exec_query_plan_stats Showplan obsahuje následující informace:

  • Všechny informace o čase kompilace nalezené v plánu uloženém v mezipaměti

  • Informace o modulu runtime, jako je skutečný počet řádků na operátor, celkový čas procesoru dotazů a doba provádění, upozornění na přelití, skutečný dop, maximální využitá paměť a udělená paměť

Za následujících podmínek se ve sloupci vrácené tabulky vrátí výstup Showplan query_plan prosys.dm_exec_query_plan_stats:

Za následujících podmínek se ve sloupci vrácené tabulky vrátí zjednodušený výstup query_plan Showplan prosys.dm_exec_query_plan_stats:

  • Plán najdete v sys.dm_exec_cached_plans.

    a

  • Dotaz je dostatečně jednoduchý, obvykle zařazený do kategorií jako součást úlohy OLTP.

1 Odkazuje na showplan, který obsahuje pouze operátor kořenového uzlu (SELECT).

Za následujících podmínek se nevrátí žádný výstup:sys.dm_exec_query_plan_stats

Poznámka:

Omezení počtu vnořených úrovní povolených v datovém typu XML znamená, že sys.dm_exec_query_plan nelze vracet 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 systému SQL Server 2005 (9.x) Service Pack 2 a novějších verzích query_plan vrátí NULLsloupec .

Povolení

SQL Server 2019 (15.x) a starší verze vyžadují VIEW SERVER STATE oprávnění k serveru.

SQL Server 2022 (16.x) a novější verze vyžadují VIEW SERVER PERFORMANCE STATE oprávnění k serveru.

Examples

A. Podívejte se na poslední známý skutečný plán provádění dotazů pro konkrétní plán uložený v mezipaměti.

Následující ukázkové sys.dm_exec_cached_plans dotazy najdou zajímavý plán a zkopírují ho plan_handle z výstupu.

SELECT * FROM sys.dm_exec_cached_plans;
GO

Potom k získání posledního známého skutečného plánu provádění dotazu použijte zkopírovanou plan_handle s systémovou funkcí sys.dm_exec_query_plan_stats.

SELECT * FROM sys.dm_exec_query_plan_stats(< copied plan_handle >);
GO

B. Podívejte se na poslední známý skutečný plán provádění dotazů pro všechny plány v mezipaměti.

SELECT * FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps;
GO

C. Podívejte se na poslední známý skutečný plán provádění dotazů pro konkrétní plán uložený v mezipaměti a text dotazu.

SELECT * FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps
WHERE st.text LIKE 'SELECT * FROM Person.Person%';
GO

D. Podívejte se na události uložené v mezipaměti pro trigger

SELECT * FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle)
WHERE objtype = 'Trigger';
GO