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. Az információk felfedésének elkerülése érdekében a rendszer kiszűr minden olyan sort, amely nem a csatlakoztatott bérlőhöz tartozó adatokat tartalmaz. Emellett a memory_object_address és a pool_id oszlop értékei is szűrve lesznek; az oszlop értéke a következőre NULLvan á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 Plans és az Object Plans gyorsítótárak esetében a kivonattábla mérete 32 bites rendszereken akár 10 007, 64 bites rendszereken pedig akár 40 009 is lehet. A Kötött fák gyorsítótár esetében a kivonattábla mérete 32 bites rendszereken akár 1009, 64 bites rendszereken akár 4001 is lehet. A Extended Stored Procedures gyorsítótárban a hash tábla mérete akár 127 lehet 32 és 64 bites rendszereken.
refcounts int Azoknak a cache objektumoknak a száma, amelyek erre a cache objektumra hivatkoznak. refcounts Legalább 1-nek kell lennie ahhoz, hogy egy bejegyzés bekerüljön a gyorsítótárba.
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ő 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
Alkalmi: Alkalmi lekérdezé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
Eseményindító: 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 felügyeleti függvényekkel 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 Annak a csomópontnak az azonosítója, amelyen ez a disztribúció található.

A következővonatkozik: Azure Synapse Analytics, Analytics Platform System (PDW)

Permissions

Az SQL Server 2019 (15.x) és a korábbi verziók engedélyhez szükségesek VIEW SERVER STATE .

Az SQL Server 2022 (16.x) és újabb verziói, valamint a felügyelt Azure SQL-példány engedélyt igényelnek VIEW SERVER PERFORMANCE STATE .

Az Azure SQL Database Alapszintű, S0 és S1 szolgáltatási célkitűzésein, valamint rugalmas készletekben lé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.

Példák

A. Az újrafelhasznált gyorsítótárazott bejegyzések kötegszövegének visszaadása

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;

B. Lekérdezési tervek visszaadása az összes gyorsítótárazott eseményindítóhoz

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

C. Adja vissza azokat a SET-beállításokat, amelyekkel a tervet lefordították

Az alábbi példa azokat a SET beállításokat adja vissza, amelyekkel a tervet lefordították. A sql_handle terv is visszakerül. Az PIVOT operátor a sorok helyett oszlopokként adja ki az set_options és sql_handle az attribútumokat. A visszaadott set_optionsértékkel kapcsolatos további információkért lásd a 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. Az összes gyorsítótárazott lefordított csomag memórialebontásának visszaadá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
     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';