Megosztás a következőn keresztül:


sys.dm_exec_cached_plans (Transact-SQL)

Vonatkozik a következőkre:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalitikai Platform System (PDW)SQL adatbázis a Microsoft Fabric-ben

Minden lekérdezési tervhez egy sort ad vissza, amelyet az SQL Server gyorsabb lekérdezés végrehajtása érdekében gyorsít. Ezt a dinamikus menedzsment nézetet használhatod arra, hogy megtaláld a gyorsatározott lekérdezési terveket, a gyorsatározott lekérdezési szöveget, a gyorsítótározott tervek által használt memóriát és a gyorsatározott tervek újrahasznosítási számát.

Az Azure SQL Database-ben a dinamikus felügyeleti nézetek nem tehetnek közzé olyan információkat, amelyek hatással lennének az adatbázis-elszigetelésre, vagy nem tehetnek közzé információkat más olyan adatbázisokról, amelyekhez a felhasználó hozzáfér. Ennek az információnak a feltárása érdekében minden olyan sor, amely nem a kapcsolódó bérlőhöz tartozó adatokat tartalmaz, kiszűrik. Ezen felül a memory_object_address és pool_id oszlopok értékeit szűrik; az oszlop értéke NULL-ra van állítva.

Megjegyzés:

Ha ezt az Azure Synapse Analytics vagy az Analytics Platform System (PDW) szolgáltatásból szeretné meghívni, használja a nevet sys.dm_pdw_nodes_exec_cached_plans. Ezt a szintaxist az Azure Synapse Analytics kiszolgáló nélküli SQL-készlete nem támogatja.

Oszlop név Adattípus Description
Bucketid int Annak a hash bucketnek az azonosítója, amelyben a bejegyzés gyorsatárban van. Az érték 0 és a gyorsítótár típusának hash tábla méretéig terjedő tartományt jelöl.

Az SQL Tervek és Objektumtervek gyorsítótárainál a hash tábla mérete akár 10007 lehet 32 bites rendszereken, míg akár 40009 64 bites rendszereken. A Bound Trees gyorsítótár esetén a hash tábla mérete akár 1009 lehet 32 bites rendszereken, és akár 4001 64 bites rendszereken. A Extended Stored Procedures gyorsítótárban a hash tábla mérete akár 127 lehet 32 és 64 bites rendszereken.
Visszaszámlálások int Azoknak a cache objektumoknak a száma, amelyek erre a cache objektumra hivatkoznak. A visszaszámlálásnak legalább 1-nek kell lennie, hogy egy bejegyzés a cache-ben legyen.
Usecounts int Hányszor keresték meg a cache objektumot. Nem növelik, ha paraméterezett lekérdezések találnak tervet a cache-ben. Többször is növelhető showplan használatával.
size_in_bytes int A gyorsítótár objektum által elhasznált bájtok száma.
memory_object_address varbinary(8) A gyorsítótározott bejegyzés memóriacíme. Ez az érték sys.dm_os_memory_objects-vel használható a gyorsítótározott terv memóriabontásának megszerzésére, sys.dm_os_memory_cache_entries-vel _entries pedig a bejegyzés gyorsítótárázásának költségének meghatározására.
cacheobjtype nvarchar(34) A gyorsítótárban lévő objektum típusa. Az érték a következők egyike lehet:

Összeállított terv

Összeállított tervcsík

Parse fa

Kiterjesztett proc

CLR Fordított Func

CLR fordított proc
objtype nvarchar(16) Objektum típusa. Az alábbiakban a lehetséges értékek és azok megfelelő leírásai találhatók.

Proc: Tárolt eljárás
Előkészítve: Előkészített nyilatkozat
Adhoc: Ad hoc kérdés. Azt jelenti, hogy Transact-SQL nyelvi eseményként küldtek be osql vagy sqlcmd használatával távoli eljáráshívások helyett.
ReplProc: Replikáció-szűrő-eljárás
Trigger: Trigger
Nézet: Kilátás
Alapértelmezett: Alapértelmezett
UsrTab: Felhasználói tábla
SysTab: Rendszertábla
Megnézés: ELLENŐRZÉS korlátozás
Szabály: Szabály
plan_handle varbinary(64) A memóriabeli terv azonosítója. Ez az azonosító átmeneti, és csak addig marad állandó, amíg a terv a gyorsítótárban marad. Ez az érték a következő dinamikus menedzsment funkciókkal használható:

sys.dm_exec_sql_text

sys.dm_exec_query_plan

sys.dm_exec_plan_attributes
pool_id int Az erőforrás-pool azonosítója, amelyhez ez a terv memóriahasználata számít.
pdw_node_id int A következővonatkozik: Azure Synapse Analytics, Analytics Platform System (PDW)

Annak a csomópontnak az azonosítója, amelyen ez a disztribúció található.

1

Permissions

Az SQL Serveren és a felügyelt SQL-példányon VIEW SERVER STATE engedély szükséges.

Az SQL Database Alapszintű, S0és S1 szolgáltatás célkitűzésein, valamint rugalmas készletekbenlévő adatbázisok esetében a kiszolgálói rendszergazdai fiókra, a Microsoft Entra rendszergazdai fiókra vagy a ##MS_ServerStateReader##kiszolgálói szerepkör tagságára van szükség. Az SQL Database szolgáltatás minden más célkitűzéséhez vagy az adatbázis VIEW DATABASE STATE engedélyére, vagy a ##MS_ServerStateReader## kiszolgálói szerepkör tagságára van szükség.

Engedélyek az SQL Server 2022-hez és újabb verziókhoz

A KISZOLGÁLÓ TELJESÍTMÉNYÁLLAPOTÁNAK MEGTEKINTÉSE engedélyre van szükség a kiszolgálón.

Példák

A. A gyorsítótárban tárolt bejegyzések csomagszövegének visszaküldése, amelyeket újrahasznosítottak

A következő példa az összes gyorsítótározott bejegyzés SQL szövegét adja vissza, amelyeket többször is használtak.

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. Lekérdezési tervek visszaküldése minden gyorsítótározott triggerre

A következő példa visszaadja az összes gyorsítótározott trigger lekérdezési terveit.

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. A terv összeállítására szolgáló SET opciók visszaküldése

A következő példa adja vissza azokat a SET opciókat, amelyekkel a tervet fordították. A sql_handle terv is visszakerül. A PIVOT operátort arra használják, hogy a set_options és sql_handle attribútumokat oszlopként adja ki, nem sorként. További információért a visszaadott értékről set_optionslásd 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. Minden gyorsatározott lefordított terv memóriabontásának visszaállítása

A következő példa a gyorsítótárban az összes lefordított terve által használt memóriát tartalmazza.

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  

Lásd még:

Dinamikus felügyeleti nézetek és függvények (Transact-SQL)
végrehajtással kapcsolatos dinamikus felügyeleti nézetek és függvények (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)