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.
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)