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


sys.dm_exec_plan_attributes (Transact-SQL)

Vonatkozik a következőkre: SQL Server 2016 (13.x) és későbbi verziók Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

A terv által meghatározott terv attribútumára egy sort ad vissza. Ezt a táblázatértékű függvényt használhatod arra, hogy információkat kapj egy adott tervről, például a cache kulcsértékekről vagy a terv aktuális egyidejű végrehajtásának számáról.

Megjegyzés:

Ezen a függvényen keresztül visszaküldött információk egy része a sys.syscacheobjects visszafelé kompatibilitási nézetre képezhető meg.

Szemantika

sys.dm_exec_plan_attributes ( plan_handle )  

Arguments

plan_handle
Egyedileg azonosítja egy lekérdezési tervet egy olyan csomagra, amely már elindult, és amelynek terve a terv cache-ben található. plan_handlevarbinary(64). A terv kezelő sys.dm_exec_cached_plans dinamikus menedzsment nézetből kapható.

Visszaadott tábla

Oszlop név Adattípus Description
attribútum varchar(128) A tervhez tartozó attribútumnak a neve. Az alábbi táblázat felsorolja a lehetséges attribútumokat, adattípusokat és leírásokat.
value sql_variant Az attribútum értéke, amely ehhez a tervhez kapcsolódik.
is_cache_key bit Jelzi, hogy az attribútum a terv cache keresőkulcsának részeként van-e használatban.

A fenti táblázatból az attribútum a következő értékeket kaphatja:

Attribute Adattípus Description
set_options int Jelzi azokat az opcióértékeket, amelyekkel a tervet összeállították.
objektumazonosító int Az egyik fő kulcs, amit egy objektum keresésére használnak a gyorsítótárban. Ez az objektumazonosító, amelyet a sys.objects adatbázis objektumokhoz (eljárások, nézetek, triggerek stb.) tárolnak. "Adhoc" vagy "Prepared" típusú tervek esetén ez a batch szöveg belső hash-je.
dbid int Az adatbázis azonosítója, amely tartalmazza azt az entitást, amelyre a terv utal.

Ad hoc vagy előkészített tervek esetén az adatbázis azonosítója az adott adás végrehajtása.
dbid_execute int A Resource adatbázisban tárolt rendszerobjektumok esetén az az adatbázisazonosító, amelyből a gyorsítótározott tervet hajtják végre. Minden más esetben 0.
felhasználó_azonosító int A -2 értéke azt jelzi, hogy a benyújtott tétel nem függ implicit névfelbontástól, és megosztható különböző felhasználók között. Ez az előnyben részesített módszer. Bármely más érték a lekérdezést benyújtó felhasználó felhasználói azonosítóját jelenti az adatbázisban.
language_id smallint Annak a nyelvnek az azonosítója, amely létrehozta a cache objektumot. További információ: sys.syslanguages (Transact-SQL).
date_format smallint A cache objektumot létrehozó kapcsolat dátumformátuma. További információ: SET DATEFORMAT (Transact-SQL).
date_first tinyint A dátum első értéke. További információ: SET DATEFIRST (Transact-SQL).
compat_level tinyint A lekérdezési tervet lefordított adatbázisban beállított kompatibilitási szintet képviseli. A visszaadott kompatibilitási szint az aktuális adatbázis kontextusának kompatibilitási szintje az adhoc állításokhoz, és nem befolyásolja a lekérdezési tipp QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n. A tárolt eljárásban vagy függvényben található állítások esetén ez megfelel annak az adatbázis kompatibilitási szintjének, amelyben a tárolt eljárás vagy függvény létrejött.
állapot int Belső státuszbitek, amelyek a cache keresőkulcs részei.
required_cursor_options int A felhasználó által megadott kurzorbeállítások, például a kurzor típusa.
acceptable_cursor_options int Az SQL Server implicit módon átalakítható kurzorbeállítások az utasítás végrehajtásának támogatása érdekében. Például a felhasználó megadhat egy dinamikus kurzort, de a lekérdezésoptimalizáló engedélyezett arra, hogy ezt a kurzortípust statikus kurzorrá alakítsa.
merge_action_type smallint Az a típus, amelyet egy MERGE utasítás eredményeként használnak.

0 egy nem trigger tervet, egy olyan trigger tervet, amely nem MERGE utasítás eredményében hajt végre, vagy egy olyan trigger tervet, amely egy MERGE utasítás eredményeként hajt végre, és csak egy DELETE műveletet jelöl meg.

1 egy INSERT trigger tervet jelöl, amely egy MERGE utasítás eredményeként fut.

2 egy UPDATE trigger tervet jelöl, amely egy MERGE utasítás eredményeként fut.

3 egy DELETE trigger tervet jelöl, amely egy MERGE utasítás eredménye alapján fut, amely tartalmazza a megfelelő INSERT vagy UPDATE műveletet.

A beágyazott triggerek esetén, amelyeket kaszkád műveletek futtatnak, ez az érték a MERGE utasítás művelete, amely a kaszkádot okozta.
is_replication_specific int Azt jelenti, hogy a terv fordításából készült session egy olyan szekció, amely egy dokumentálatlan kapcsolati tulajdonsággal csatlakozik az SQL Server példányához, amely lehetővé teszi a szerver számára, hogy a szekciót replikációs komponensek által létrehozott jelenségként azonosítsa, így a szerver bizonyos funkcionális aspektusainak viselkedése változik az adott replikációs komponensek elvárásai szerint.
optional_spid smallint A session_id (spid) kapcsolat a cache kulcs részévé válik, hogy csökkentse az újrafordítások számát. Ez megakadályozza, hogy egyetlen ülésszak újrafordítása legyen egy nem dinamikusan kötött ideiglenes táblákat tartalmazó terv újrafelhasználása.
optional_clr_trigger_dbid int Csak CLR DML trigger esetén van feltöltve. Az entitást tartalmazó adatbázis azonosítója.

Bármely más objektumtípus esetén nullát ad vissza.
optional_clr_trigger_objid int Csak CLR DML trigger esetén van feltöltve. A sys.objects-ben tárolt objektumazonosító.

Bármely más objektumtípus esetén nullát ad vissza.
parent_plan_handle varbinary(64) Mindig NULL.
is_azure_user_plan tinyint 1 egy Azure SQL adatbázisban végrehajtott lekérdezésekhez, amelyeket egy felhasználó által indított ülésből hajtanak végre.

0 olyan lekérdezések esetén, amelyeket egy olyan ülésből hajtottak végre, amelyeket nem egy végfelhasználó indított, hanem az Azure infrastruktúrán belül futó alkalmazások indítottak le, és más célokra küldenek lekérdezéseket telemetria gyűjtésére vagy adminisztratív feladatok végrehajtására. Az ügyfeleknek nem számítanak fel olyan erőforrásokért, amelyeket lekérdezések fogyasztanak el, ahol is_azure_user_plan = 0.

Csak Azure SQL Database.
inuse_exec_context int A jelenleg végrehajtó tételek száma, amelyek a lekérdezési tervet használják.
free_exec_context int A lekérdezési tervhez tartozó gyorsítótározott végrehajtási kontextusok száma, amelyek jelenleg nem használatban vannak.
hits_exec_context int Hányszor szerezték meg a végrehajtási kontextust a tervgyorsítótárból és használták újra, így megtakarítva az SQL utasítás újrafordításának többletköltségét. Az érték az eddigi összes kötött végrehajtás összege.
misses_exec_context int Hányszor nem találtak végrehajtási kontextust a tervgyorsítótárban, ami új végrehajtási kontextus létrehozásához vezetett a batch végrehajtáshoz.
removed_exec_context int Azok száma a végrehajtási kontextusok, amelyeket a cache-re gyakorolt memórianyomás miatt töröltek.
inuse_cursors int A jelenleg futó tételek száma, amelyek egy vagy több kurzort tartalmaznak, és a gyorsítótározott tervet használják.
free_cursors int A gyorsatáros csomaghoz használt üres vagy szabad kurzorok száma.
hits_cursors int Hányszor szereztek inaktív kurzort a gyorsítótározott tervből és újrahasználtak. Az érték az eddigi összes kötött végrehajtás összege.
misses_cursors int Hányszor nem találtak inaktív kurzort a gyorsítótárban.
removed_cursors int Hány kurzor került eltávolításra a cache csomag memórianyomása miatt.
sql_handle varbinary(64) Az SQL handle a batchhez.

Permissions

SQL Serveren engedély szükséges VIEW SERVER STATE .

Azure SQL Database Basic, S0 és S1 szolgáltatási céloknál, valamint rugalmas poolok adatbázisainál a szerveradmin vagy Microsoft Entra admin fiók szükséges. Minden más SQL Database szolgáltatás célnál az VIEW DATABASE STATE engedély az adatbázisban szükséges.

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.

Megjegyzések

Beállítások megadása

Ugyanannak a lefordított tervnek a másolatai csak a set_options oszlopban szereplő érték alapján különbözhetnek. Ez azt jelzi, hogy különböző kapcsolatok ugyanazzal a lekérdezéssel eltérő SET opciókat használnak. A különböző opciók használata általában nem kívánatos, mert ez plusz fordításokat, kevesebb terv újrahasználatot és gyorsítótár felfújását okozhat, mivel több terv van a gyorstárban.

Halmazopciók értékelése

Ahhoz, hogy a set_options-ben visszaadott értéket a terv összeállított opcióihoz fordítsuk, vonjuk le az értékeket a set_options értékből, a lehető legnagyobb értéktől kezdve, amíg el nem éred a 0-ot. Minden kivonás érték megfelel egy olyan opciónak, amelyet a lekérdezési tervben használtak. Például, ha set_options értéke 251, akkor a terv összeállított opciói ANSI_NULL_DFLT_ON (128), QUOTED_IDENTIFIER (64), ANSI_NULLS(32), ANSI_WARNINGS (16), CONCAT_NULL_YIELDS_NULL (8), Párhuzamos terv(2) és ANSI_PADDING (1).

Lehetőség Érték
ANSI_PADDING 1
ParallelPlan

Ez azt jelzi, hogy a tervpárhuzamossági lehetőségek megváltoztak.
2
FORCEPLAN 4
CONCAT_NULL_YIELDS_NULL 8
ANSI_WARNINGS (ANSI figyelmeztetések) 16
ANSI_NULLS 32
QUOTED_IDENTIFIER 64
ANSI_NULL_DFLT_ON 128
ANSI_NULL_DFLT_OFF 256
NoBrowseTable

Jelzi, hogy a terv nem használ munkatáblát a FOR BROWSE művelet megvalósításához.
512
TriggerOneRow

Jelzi, hogy a terv tartalmaz egy soros optimalizációt AFTER trigger delta táblákhoz.
1024
ResyncQuery

Jelzi, hogy a lekérdezést belső rendszer által tárolt eljárások küldték be.
2048
ARITH_ABORT 4096
NUMERIC_ROUNDABORT 8192
DATEFIRST 16384
DATEFORMAT 32768
LanguageID 65536
ON

Azt jelzi, hogy az adatbázis PARAMÉTEREZÉS opció FORCED volt beállítva a terv fordításakor.
131072
ROWCOUNT Vonatkozik a következőkre: SQL Server 2012 (11.x) és újabbá

262144

Cursors

Az inaktív kurzorokat egy lefordított tervben gyorsítják be, hogy a kurzor tárolásához használt memóriát a kurzorok párhuzamos felhasználói újra felhasználhassák. Például tegyük fel, hogy egy tétel deklarál és használ egy kurzort anélkül, hogy leosztaná azt. Ha két felhasználó hajtja végre ugyanazt a kötetet, akkor két aktív kurzor lesz. Miután a kurzorokat széthelyezik (esetleg különböző kötetekben), a kurzor tárolására használt memória gyorsatárba kerül, és nem szabadul. Ez az inaktív kurzorok listája a lefordított tervben van. Amikor a felhasználó legközelebb végrehajtja a batch-et, a gyorsítótározott kurzormemóriát újrahasznosítják és megfelelő módon inicializálják aktív kurzorként.

Kurzor opciók értékelése

Ahhoz, hogy a required_cursor_options és acceptable_cursor_options-ben visszaadott értéket a terv lefordított opcióira fordítsuk, vond le az értékeket az oszlop értékéből, a lehető legnagyobb értéktől kezdve, amíg el nem éred a 0-ot. Minden kivonás érték megfelel egy kurzor opciónak, amelyet a lekérdezési tervben használtak.

Lehetőség Érték
None 0
ÉRZÉKETLEN 1
KÉZIRATTEKERCS 2
CSAK OLVASHATÓ 4
FRISSÍTÉSÉRT 8
HELYI 16
GLOBÁLIS 32
FORWARD_ONLY 64
BILLENTYŰKÉSZLET 128
DINAMIKUS 256
SCROLL_LOCKS 512
OPTIMISTA 1024
STATIKUS 2048
FAST_FORWARD 4096
HELYBEN 8192
EZÉRT select_statement 16384

Példák

A. A megadott terv attribútumainak visszaküldése

Az alábbi példa egy meghatározott terv összes terv attribútumát visszaadja. Először a sys.dm_exec_cached_plans dinamikus menedzsment nézetet kérik, hogy megkapjuk a megadott terv terv handle címét. A második lekérdezésben <plan_handle> helyettesítsd az első lekérdezés terve handle értékét.

SELECT plan_handle, refcounts, usecounts, size_in_bytes, cacheobjtype, objtype   
FROM sys.dm_exec_cached_plans;  
GO  
SELECT attribute, [value], is_cache_key  
FROM sys.dm_exec_plan_attributes(<plan_handle>);  
GO  

B. A SET opciók visszaküldése a fordított tervekhez és az SQL handle gyorsítótáros tervekhez

A következő példa egy értéket ad vissza, amely az egyes tervek által összeállított opciókat jelöli. Ezen felül visszakerül az összes gyorsatározott terv SQL handle is.

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  

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_cached_plans (Transact-SQL)
sys.databases (Transact-SQL)
sys.objects (Transact-SQL)