Sdílet prostřednictvím


sys.dm_exec_cached_plans (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)databáze SQL v Microsoft Fabric

Vrací řádek pro každý plán dotazů, který je uložen v SQL Serveru pro rychlejší provádění dotazů. Tento dynamický pohled správy můžete použít k nalezení cacheovaných plánů dotazů, cacheovaných textů dotazů, množství paměti zabírané cacheovanými plány a počtu opakovaných použití cacheovaných plánů.

V Azure SQL Database nemůžou zobrazení dynamické správy zveřejnit informace, které by ovlivnily zahrnutí databáze nebo zpřístupnily informace o jiných databázích, ke kterým má uživatel přístup. Aby se zabránilo zveřejnění těchto informací, vyfiltruje se každý řádek obsahující data, která nepatří do připojeného tenanta. Kromě toho jsou hodnoty ve sloupcích memory_object_address a pool_id filtrovány; hodnota sloupce je nastavena na NULLhodnotu .

Poznámka:

Pokud to chcete volat ze služby Azure Synapse Analytics nebo systému PDW (Analytics Platform System), použijte název sys.dm_pdw_nodes_exec_cached_plans. Tato syntaxe není podporována bezserverovým fondem SQL ve službě Azure Synapse Analytics.

Název sloupce Datový typ Description
bucketid int ID hashovacího kbelíku, ve kterém je záznam uložen. Hodnota označuje rozsah od 0 až po velikost hashovací tabulky pro typ cache.

V případě mezipaměti plánů SQL a plánů objektů může být velikost tabulky hash až 10 007 v 32bitových systémech a až 40 009 v 64bitových systémech. V mezipaměti Bound Trees může být velikost tabulky hash až 1 009 v 32bitových systémech a až 4 001 v 64bitových systémech. Pro cache Extended Stored Procedures může velikost hashovací tabulky být až 127 na 32bitových a 64bitových systémech.
refcounts int Počet cache objektů, které odkazují na tento cache objekt. refcounts musí být alespoň 1, aby položka byla v mezipaměti.
usecounts int Počet vyhledávání objektu cache. Nezvyšuje to, když parametrizované dotazy najdou plán v cache. Při použití showplanu lze to několikrát zvýšit.
size_in_bytes int Počet bajtů spotřebovaných objektem cache.
memory_object_address varbinary(8) Paměťová adresa uloženého záznamu. Tuto hodnotu lze použít s sys.dm_os_memory_objects k získání rozdělení paměti cacheovaného plánu a s sys.dm_os_memory_cache_entries_entries pro získání nákladů na cachování záznamu.
cacheobjtype nvarchar(34) Typ objektu v cache. Hodnota může být jedna z těchto hodnot:

Zkompilovaný plán
Zkompilovaný plánový stub
Strom parse
Rozšířený proces
CLR Kompilovaný Func
CLR Compiled Proc
objtype nvarchar(16) Typ objektu. Níže jsou uvedeny možné hodnoty a jejich odpovídající popisy.

Proc: Uložená procedura
Připraveno: Připravené prohlášení
Ad hoc: Ad hoc dotaz. Označuje Transact-SQL zasílané jako jazykové události pomocí oSQL nebo sqlcmd místo vzdálených volání procedur.
ReplProc: Replikace-filtr-procedura
Spouštěč: Spouštěč
Zobrazit: Zobrazit
Výchozí: Výchozí
UsrTab: Uživatelská tabulka
SysTab: Systémová tabulka
Check: CHECK omezení
Pravidlo: Pravidlo
plan_handle varbinary(64) Identifikátor plánu v paměti. Tento identifikátor je přechodný a zůstává konstantní pouze v době, kdy plán zůstává v mezipaměti. Tuto hodnotu můžete použít s následujícími funkcemi dynamické správy:

sys.dm_exec_sql_text
sys.dm_exec_query_plan
sys.dm_exec_plan_attributes
pool_id int ID zdrojového fondu, proti kterému je tato paměťová spotřeba plánu zohledněna.
pdw_node_id int Identifikátor uzlu, na který je tato distribuce zapnutá.

Platí na: Azure Synapse Analytics, Analytics Platform System (PDW)

Povolení

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

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

U cílů služby Azure SQL Database Basic, S0 a S1 a pro databáze v elastických fondech se vyžaduje účet správce serveru , účet správce Microsoft Entra nebo členství v ##MS_ServerStateReader##roli serveru . U všech ostatních cílů VIEW DATABASE STATE služby SQL Database se vyžaduje buď oprávnění k databázi, nebo členství v ##MS_ServerStateReader## roli serveru.

Examples

A. Vrácení dávkového textu položek uložených v mezipaměti, které se znovu používají.

Následující příklad vrací SQL text všech uložených záznamů, které byly použity vícekrát.

SELECT usecounts,
       cacheobjtype,
       objtype,
       text
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
WHERE usecounts > 1
ORDER BY usecounts DESC;

B. Návratové plány dotazů pro všechny triggery uložené v mezipaměti

Následující příklad vrací plány dotazů všech cacheovaných spouštěčů.

SELECT plan_handle,
       query_plan,
       objtype
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_query_plan(plan_handle)
WHERE objtype = 'Trigger';

C. Vrátí možnosti SET, se kterými byl plán zkompilován.

Následující příklad vrátí SET možnosti, se kterými byl plán zkompilován. Plán sql_handle je také vrácen. Operátor PIVOT slouží k výstupu set_options sloupců a sql_handle atributů jako sloupců, nikoli jako řádků. Další informace o hodnotě vrácené v set_optionsčásti sys.dm_exec_plan_attributes.

SELECT plan_handle,
       pvt.set_options,
       pvt.sql_handle
FROM (
    SELECT plan_handle,
           epa.attribute,
           epa.value
    FROM sys.dm_exec_cached_plans
        OUTER APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa
    WHERE cacheobjtype = 'Compiled Plan'
) AS ecpa
PIVOT (MAX (ecpa.value) FOR ecpa.attribute IN ("set_options", "sql_handle")) AS pvt;

D. Vrácení rozpisu paměti všech kompilovaných plánů uložených v mezipaměti

Následující příklad vrací rozpis paměti používané všemi zkompilovanými plány v cache.

SELECT plan_handle,
       ecp.memory_object_address AS CompiledPlan_MemoryObject,
       omo.memory_object_address,
       type,
       page_size_in_bytes
FROM sys.dm_exec_cached_plans AS ecp
     INNER JOIN sys.dm_os_memory_objects AS omo
        ON ecp.memory_object_address = omo.memory_object_address
        OR ecp.memory_object_address = omo.parent_address
WHERE cacheobjtype = 'Compiled Plan';