Udostępnij za pomocą


sys.dm_exec_cached_plans (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w Microsoft Fabric

Zwraca wiersz dla każdego planu zapytań, który jest buforowany przez SQL Server dla szybszego wykonywania zapytań. Możesz użyć tego dynamicznego widoku zarządzania, aby znaleźć plany zapytań w pamięci podręcznej, tekst zapytań w pamięci podręcznej, ilość pamięci zajmowanej przez plany buforowane oraz liczbę ponownych użycia tych planów.

W usłudze Azure SQL Database dynamiczne widoki zarządzania nie mogą ujawniać informacji, które mają wpływ na zawieranie bazy danych lub uwidacznianie informacji o innych bazach danych, do których użytkownik ma dostęp. Aby uniknąć ujawniania tych informacji, każdy wiersz zawierający dane nienależące do połączonego tenanta jest filtrowany. Dodatkowo wartości w kolumnach memory_object_address i pool_id są filtrowane; wartość kolumny jest ustawiona na NULL.

Uwaga / Notatka

Aby wywołać to z usługi Azure Synapse Analytics lub Analytics Platform System (PDW), użyj nazwy sys.dm_pdw_nodes_exec_cached_plans. Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.

Nazwa kolumny Typ danych Description
bucketid int ID wiadra z hashem, w którym wpis jest buforowany. Wartość ta wskazuje zakres od 0 aż do rozmiaru tabeli skrótu dla typu pamięci podręcznej.

W cache SQL Plans i Object Plans rozmiar tablicy skrótu może wynosić do 10007 na systemach 32-bitowych i do 40009 na systemach 64-bitowych. Dla pamięci podręcznej Bound Trees rozmiar tablicy skrótu może wynosić do 1009 na systemach 32-bitowych i do 4001 na systemach 64-bitowych. Dla pamięci podręcznej rozszerzonych procedur przechowywanych rozmiar tabeli skrótu może wynosić do 127 na systemach 32-bitowych i 64-bitowych.
Liczenia int Liczba obiektów cache odwołujących się do tego obiektu cache. Liczba referencji musi wynosić co najmniej 1, aby wpis znalazł się w pamięci podręcznej.
Liczba zastosowań int Liczba razy, gdy obiekt pamięci podręcznej był sprawdzany. Nie zwiększa się, gdy parametryzowane zapytania znajdują plan w pamięci podręcznej. Można to zwiększać wielokrotnie przy użyciu showplan.
size_in_bytes int Liczba bajtów zużywanych przez obiekt pamięci podręcznej.
memory_object_address varbinary(8) Adres pamięci wpisu w pamięci podręcznej. Wartość tę można użyć z sys.dm_os_memory_objects do uzyskania podziału pamięci planu buforowanego oraz sys.dm_os_memory_cache_entries_entries do uzyskania kosztu buforowania wpisu.
cacheobjtype nvarchar(34) Typ obiektu w pamięci podręcznej. Wartość może być jedną z następujących wartości:

Plan skompilowany

Skompilowany plan zalążek

Drzewo parsowania

Extended Proc

Skompilowany funkc CLR

Procedura skompilowana CLR
Objtype nvarchar(16) Typ obiektu. Poniżej znajdują się możliwe wartości oraz odpowiadające im opisy.

Proc: Procedura przechowywana
Przygotowany: Przygotowane oświadczenie
Ad-hoc: Zapytanie ad hoc. Odnosi się do Transact-SQL przesyłanych jako zdarzenia językowe za pomocą osql lub sqlcmd zamiast zdalnych wywołań procedur.
ReplProc: Replikacja-filtr-procedura
Wyzwalacz: Wyzwalacz
Widok: Widok
Domyślne: Domyślne
UsrTab: Tabela użytkownika
SysTab: Tabela systemowa
Sprawdź: CHECK ograniczenie
Zasada: Zasada
plan_handle varbinary(64) Identyfikator planu w pamięci. Ten identyfikator jest przejściowy i pozostaje stały tylko wtedy, gdy plan pozostaje w pamięci podręcznej. Ta wartość może być używana z następującymi funkcjami zarządzania dynamicznego:

sys.dm_exec_sql_text

sys.dm_exec_query_plan

sys.dm_exec_plan_attributes
pool_id int ID puli zasobów, na której uwzględniane jest zużycie pamięci planu.
pdw_node_id int Dotyczy do: Azure Synapse Analytics, Analytics Platform System (PDW)

Identyfikator węzła, w ramach którego znajduje się ta dystrybucja.

1

Permissions

W programie SQL Server i usłudze SQL Managed Instance wymagane jest VIEW SERVER STATE uprawnienie.

W przypadku celów usługi SQL Database Basic, S0 i S1 oraz baz danych w elastycznych pulach wymagane jest konto administratora serwera , konto administratora firmy Microsoft Entra lub członkostwo w ##MS_ServerStateReader##roli serwera . We wszystkich innych celach usługi SQL Database wymagane VIEW DATABASE STATE jest uprawnienie do bazy danych lub członkostwo w ##MS_ServerStateReader## roli serwera.

Uprawnienia dla programu SQL Server 2022 i nowszych

Wymaga uprawnienia WYŚWIETL STAN WYDAJNOŚCI SERWERA na serwerze.

Przykłady

A. Zwracanie tekstu wsadowego z buforowanych wpisów, które są ponownie używane

Poniższy przykład zwraca tekst SQL wszystkich wpisów w pamięci podręcznej, które były używane więcej niż raz.

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;  
GO  

B. Zwracanie planów zapytań dla wszystkich buforowanych wyzwalaczy

Poniższy przykład zwraca plany zapytań wszystkich buforowanych wyzwalaczy.

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

C. Zwracając opcje SET, z którymi skompilowano plan

Poniższy przykład zwraca opcje SET, z którymi skompilowano plan. Plan sql_handle jest również zwrócony. Operator PIVOT służy do wypisywania atrybutów i set_optionssql_handle jako kolumn, a nie wierszy. Więcej informacji o wartości zwracanej w set_options, zobacz sys.dm_exec_plan_attributes (Transact-SQL).

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;  
GO  

D. Zwracanie rozkładu pamięci wszystkich buforowanych skompilowanych planów

Poniższy przykład zwraca podział pamięci używanej przez wszystkie skompilowane plany w pamięci podręcznej.

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   
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';  
GO  

Zobacz też

Dynamiczne widoki zarządzania i funkcje (Transact-SQL)
Dynamiczne widoki zarządzania i funkcje związane z wykonywaniem (Transact-SQL)
sys.dm_exec_query_plan (Transact-SQL)
sys.dm_exec_plan_attributes (Transact-SQL)
sys.dm_exec_sql_text (Transact-SQL)
sys.dm_os_memory_objects (Transact-SQL)
sys.dm_os_memory_cache_entries (Transact-SQL)
FROM (Transact-SQL)