Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Vonatkozik a következőkre: SQL Server 2016 (13.x) és későbbi verziók
Azure SQL Database
Azure SQL Managed Instance
SQL 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.
Note
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.
Syntax
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ó.
Visszajuttatott tábla
| Oszlop neve | Adattípus | Leírás |
|---|---|---|
| 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. |
| érték | 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 | Leírás |
|---|---|---|
| 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). |
| dátumformátum | 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 adott hoc állítások jelenlegi adatbázis-kontextusának kompatibilitási szintje, és nem befolyásolja a QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n lekérdezési tipp. 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 utasítás eredményeként használt eseményindító végrehajtási tervének MERGE típusa. 0 egy nem trigger tervet, egy olyan trigger tervet, amely nem egy utasítás eredménye alapján hajt végre MERGE , vagy egy olyan trigger tervet, amely egy olyan utasítás eredménye alapján hajt végre MERGE , amely csak egy DELETE műveletet megad. Az 1 egy INSERT utasítás eredményeként MERGE futó eseményindító-tervet jelöl. A 2 egy UPDATE utasítás eredményeként MERGE futó eseményindító-tervet jelez. A 3 egy DELETE eseményindító-tervet jelöl, amely egy MERGE megfelelő INSERT vagy UPDATE műveletet tartalmazó utasítás eredményeként fut. A kaszkádolt műveletek által futtatott beágyazott eseményindítók esetében ez az érték annak az utasításnak a MERGE művelete, amely a kaszkádolást 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
Az SQL Serveren VIEW SERVER STATE engedély szükséges.
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 vagy a Microsoft Entra rendszergazdai fiókra van szükség. 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
SERVER PERFORMANCE STATE engedélyt igényel VIEW a szerveren.
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 eltérő opciókat SET használnak ugyanazzal a lekérdezéssel. 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 a következők: 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).
| Option | É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 | 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. |
131 072 |
| 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.
| Option | Érték |
|---|---|
| Nincs | 0 |
| ÉRZÉKETLEN | 1 |
| KÉZIRATTEKERCS | 2 |
| CSAK OLVASHATÓ | 4 |
| EZÉRT UPDATE | 8 |
| LOCAL | 16 |
| GLOBAL | 32 |
| FORWARD_ONLY | 64 |
| KEYSET | 128 |
| DYNAMIC | 256 |
| SCROLL_LOCKS | 512 |
| OPTIMISTA | 1024 |
| STATIC | 2048 |
| FAST_FORWARD | 4096 |
| HELYBEN | 8192 |
| EZÉRT select_statement | 16384 |
Examples
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. Visszaküldöm a SET fordított tervek opcióit és az SQL handle gyorsítótáros tervek számára
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