Udostępnij przez


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ąć uwidaczniania tych informacji, każdy wiersz zawierający dane, które nie należą do połączonej dzierżawy, jest filtrowany. Ponadto wartości w kolumnach memory_object_address i pool_id są filtrowane; wartość kolumny jest ustawiona na NULLwartość .

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 przypadku pamięci podręcznych planów SQL i planów obiektów rozmiar tabeli skrótu może wynosić do 10 007 w systemach 32-bitowych i maksymalnie 40 009 w systemach 64-bitowych. W przypadku pamięci podręcznej Drzew powiązanych rozmiar tabeli skrótów może wynosić do 1009 w systemach 32-bitowych i maksymalnie 4001 w 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.
refcounts int Liczba obiektów cache odwołujących się do tego obiektu cache. refcounts musi być co najmniej 1, aby wpis był w pamięci podręcznej.
usecounts 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
Rozszerzony 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 dynamicznymi funkcjami zarządzania:

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 Identyfikator węzła, w ramach którego znajduje się ta dystrybucja.

Dotyczy do: Azure Synapse Analytics, Analytics Platform System (PDW)

Permissions

Program SQL Server 2019 (15.x) i starsze wersje wymagają VIEW SERVER STATE uprawnień.

Program SQL Server 2022 (16.x) i nowsze wersje oraz usługa Azure SQL Managed Instance wymagają VIEW SERVER PERFORMANCE STATE uprawnień.

W przypadku celów usługi Azure 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.

Przykłady

A. Zwraca tekst wsadowy 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;

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

C. Zwraca opcje ZESTAWU, za pomocą których został skompilowany plan

Poniższy przykład zwraca SET opcje, z którymi został skompilowany plan. Plan sql_handle jest również zwrócony. Operator PIVOT służy do wyprowadzania set_options atrybutów i sql_handle jako kolumn, a nie jako wierszy. Aby uzyskać więcej informacji na temat wartości zwróconej w pliku set_options, zobacz 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. Zwraca podział 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
     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';