Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2016 (13.x) och senare versioner
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Returnerar en rad per planattribut för den plan som specificerats av planhandtaget. Du kan använda denna tabellvärdsfunktion för att få detaljer om en viss plan, såsom cache-nyckelvärden eller antalet aktuella samtidiga exekveringar av planen.
Anmärkning
En del av informationen som returneras via denna funktion mappas till sys.syscacheobjects bakåtkompatibilitetsvy.
Syntax
sys.dm_exec_plan_attributes ( plan_handle )
Arguments
plan_handle
Identifierar unikt en frågeplan för en batch som har körts och vars plan finns i plancachen.
plan_handle är varbinary(64). Planhandtaget kan hämtas från den sys.dm_exec_cached_plans dynamiska förvaltningsvyn.
Tabell returnerad
| Kolumnnamn | Datatyp | Description |
|---|---|---|
| attribut | varchar(128) | Namnet på attributet som är kopplat till denna plan. Tabellen direkt under denna listar möjliga attribut, deras datatyper och deras beskrivningar. |
| värde | sql_variant | Värdet på attributet som är kopplat till denna plan. |
| is_cache_key | bit | Anger om attributet används som en del av cacheuppslagsnyckeln för planen. |
Från tabellen ovan kan attributet ha följande värden:
| Attribute | Datatyp | Description |
|---|---|---|
| set_options | int | Anger optionsvärdena som planen sammanställdes med. |
| objekt-id | int | En av huvudnycklarna som används för att slå upp ett objekt i cachen. Detta är objekt-ID:t som lagras i sys.objects för databasobjekt (procedurer, vyer, triggers och så vidare). För planer av typen "Adhoc" eller "Prepared" är det en intern hash av batchtexten. |
| dbid | int | Är ID:t för databasen som innehåller den enhet planen syftar på. För ad hoc- eller förberedda planer är det databas-ID från vilket batchen exekveras. |
| dbid_execute | int | För systemobjekt som lagras i resursdatabasen , databas-ID:t från vilket den cachade planen exekveras. I alla andra fall är det 0. |
| användar-ID | int | Värdet av -2 indikerar att den inskickade batchen inte beror på implicit namnlösning och kan delas mellan olika användare. Det här är den metod som föredras. Alla andra värden representerar användar-ID:t för den användare som skickar in förfrågan i databasen. |
| language_id | smallint | ID för språket för anslutningen som skapade cacheobjektet. Mer information finns i sys.syslanguages (Transact-SQL). |
| date_format | smallint | Datumformat för anslutningen som skapade cacheobjektet. Mer information finns i ANGE DATEFORMAT (Transact-SQL). |
| date_first | tinyint | Datum först värde. Mer information finns i ANGE DATEFIRST (Transact-SQL). |
| compat_level | tinyint | Representerar kompatibilitetsnivån som satts i databasen i vars kontext frågeplanen kompilerades. Den återgivna kompatibilitetsnivån är kompatibilitetsnivån för den aktuella databaskontexten för ad hoc-satser och påverkas inte av frågeledtråden QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n. För satser som ingår i en lagrad propud eller funktion motsvarar den kompatibilitetsnivån för databasen där den lagrade proceduren eller funktionen skapas. |
| status | int | Interna statusbitar som ingår i cache-uppslagsnyckeln. |
| required_cursor_options | int | Marköralternativ som anges av användaren, till exempel markörens typ. |
| acceptable_cursor_options | int | Marköralternativ som SQL Server implicit kan konvertera till för att stödja körningen av -instruktionen. Till exempel kan användaren ange en dynamisk markör, men frågeoptimeraren får konvertera denna markörtyp till en statisk markör. |
| merge_action_type | smallint | Typen av triggerexekveringsplan som används som resultat av ett MERGE-uttalande. 0 indikerar en icke-triggerplan, en triggerplan som inte exekveras som resultat av en MERGE-sats, eller en triggerplan som utförs som resultatet av en MERGE-sats som endast specificerar en DELETE-åtgärd. 1 indikerar en INSERT-triggerplan som körs som resultatet av ett MERGE-uttalande. 2 indikerar en UPDATE-triggerplan som körs som ett resultat av ett MERGE-uttalande. 3 indikerar en DELETE-triggerplan som körs som resultatet av en MERGE-sats som innehåller en motsvarande INSERT- eller UPDATE-åtgärd. För nästlade triggers som körs genom kaskadhantering av handlingar är detta värde åtgärden i MERGE-satsen som orsakade kaskaden. |
| is_replication_specific | int | Representerar att sessionen som denna plan kompilerades från är en som kopplades till instansen av SQL Server med hjälp av en odokumenterad anslutningsegenskap som tillåter servern att identifiera sessionen som en som skapats av replikeringskomponenter, så att beteendet hos vissa funktionella aspekter av servern ändras enligt vad denna replikeringskomponent förväntar sig. |
| optional_spid | smallint | Anslutningen session_id (spid) blir en del av cache-nyckeln för att minska antalet omkompileringar. Detta förhindrar omkompileringar för en enskild session vid återanvändning av en plan som involverar icke-dynamiskt bundna temptabeller. |
| optional_clr_trigger_dbid | int | Endast fylld i fallet med en CLR DML-trigger. ID:t för databasen som innehåller entiteten. För alla andra objekttyper returnerar noll. |
| optional_clr_trigger_objid | int | Endast fylld i fallet med en CLR DML-trigger. Objekt-ID:t lagrat i sys.objects. För alla andra objekttyper returnerar noll. |
| parent_plan_handle | varbinary(64) | Alltid NULL. |
| is_azure_user_plan | tinyint | 1 för frågor som körs i en Azure SQL-databas från en session initierad av en användare. 0 för frågor som har utförts från en session som inte initierats av en slutanvändare, utan av applikationer som körs från Azure-infrastruktur och skickar frågor för andra ändamål som insamling av telemetri eller administrativa uppgifter. Kunder debiteras inte för resurser som förbrukas av frågor där is_azure_user_plan = 0. Azure SQL Database only. |
| inuse_exec_context | int | Antal batcher som för närvarande körs och använder frågeplanen. |
| free_exec_context | int | Antal cachade exekveringskontexter för frågeplanen som inte används för tillfället. |
| hits_exec_context | int | Antal gånger exekveringskontexten hämtades från plancachen och återanvändes, vilket sparade överhead för att kompilera om SQL-satsen. Värdet är en aggregerad summa för alla batchkörningar hittills. |
| misses_exec_context | int | Antal gånger som en exekveringskontext inte kunde hittas i plancachen, vilket resulterade i skapandet av en ny exekveringskontext för batchexekveringen. |
| removed_exec_context | int | Antal exekveringskontexter som tagits bort på grund av minnestryck på den cachade planen. |
| inuse_cursors | int | Antal för närvarande körande batcher som innehåller en eller flera markörer och som använder den cachade planen. |
| free_cursors | int | Antal viloaktiva eller fria markörer för den cachade planen. |
| hits_cursors | int | Antal gånger en inaktiv markör hämtades från den cachade planen och återanvändes. Värdet är en aggregerad summa för alla batchkörningar hittills. |
| misses_cursors | int | Antal gånger en inaktiv markör inte kunde hittas i cachen. |
| removed_cursors | int | Antal markörer som tagits bort på grund av minnestryck på den cachade planen. |
| sql_handle | varbinär(64) | SQL-handtaget för batchen. |
Permissions
På SQL Server krävs VIEW SERVER STATE tillstånd.
På Azure SQL Database Basic, S0 och S1 tjänstemål, samt för databaser i elastiska pooler, krävs serveradministratörskontot eller Microsoft Entra-administratörskontot . För alla andra SQL-databastjänstemål VIEW DATABASE STATE krävs behörighet i databasen.
Behörigheter för SQL Server 2022 och senare
Kräver BEHÖRIGHET FÖR VISNINGSSERVERNS PRESTANDATILLSTÅND på servern.
Anmärkningar
Ange alternativ
Kopior av samma sammanställda plan kan skilja sig endast åt med värdet i kolumnen set_options . Detta indikerar att olika anslutningar använder olika uppsättningar av SET-alternativ för samma fråga. Att använda olika uppsättningar alternativ är vanligtvis oönskat eftersom det kan orsaka extra kompileringar, mindre återanvändning av planer och inflation i plancachen på grund av flera kopior av planer i cachen.
Utvärdering av mängdalternativ
För att översätta värdet som returneras i set_options till de alternativ som planen kompilerades med, subtrahera värdena från set_options värdet, med början på det största möjliga värdet, tills du når 0. Varje värde du subtraherar motsvarar ett alternativ som användes i frågeplanen. Till exempel, om värdet i set_options är 251, är de alternativ planen sammanställdes med ANSI_NULL_DFLT_ON (128), QUOTED_IDENTIFIER (64), ANSI_NULLS(32), ANSI_WARNINGS (16), CONCAT_NULL_YIELDS_NULL (8), Parallell Plan(2) och ANSI_PADDING (1).
| Option | Värde |
|---|---|
| ANSI_PADDING | 1 |
| ParallelPlan Indikerar att alternativen för parallellitet i planen har förändrats. |
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 (anger standardbeteendet för nullvärden i ANSI SQL) | 256 |
| NoBrowseTable Indikerar att planen inte använder en arbetstabell för att implementera en FOR BROWSE-operation. |
512 |
| TriggerOneRow Indikerar att planen innehåller enkelradsoptimering för EFTER att utlöser deltatabeller. |
1024 |
| ResyncQuery Indikerar att frågan skickades in av interna systemlagrade procedurer. |
2048 |
| ARITH_ABORT | 4096 |
| NUMERISK_AVRUND_AVBRYT | 8192 |
| DATEFIRST | 16384 |
| DATEFORMAT | 32768 |
| LanguageID | 65536 |
| PÅ Indikerar att databasalternativet PARAMETERIZATION sattes till FORCED när planen kompilerades. |
131072 |
| ROWCOUNT |
Gäller för: SQL Server 2012 (11.x) och senare 262144 |
Cursors
Inaktiva markörer cachas i en kompilerad plan så att minnet som används för att lagra markören kan återanvändas av samtidiga användare av markörer. Till exempel, anta att en batch deklarerar och använder en markör utan att avlokalisera den. Om det är två användare som kör samma batch kommer det att finnas två aktiva markörer. När markörerna har avfördelats (eventuellt i olika batcher) cachelagras minnet som används för att lagra markören och släpps inte. Denna lista över inaktiva markörer sparas i den kompilerade planen. Nästa gång en användare kör batchen kommer det cachade markörminnet att återanvändas och initieras på lämpligt sätt som en aktiv markör.
Utvärdering av marköralternativ
För att översätta värdet som returneras i required_cursor_options och acceptable_cursor_options till de alternativ som planen kompilerades med, subtrahera värdena från kolumnvärdet, med början på det största möjliga värdet, tills du når 0. Varje värde du subtraherar motsvarar ett marköralternativ som användes i frågeplanen.
| Option | Värde |
|---|---|
| None | 0 |
| OKÄNSLIG | 1 |
| RULLA | 2 |
| ENDAST LÄS | 4 |
| FÖR UPPDATERING | 8 |
| LOKAL | 16 |
| GLOBAL | 32 |
| FORWARD_ONLY | 64 |
| NYCKELUPPSÄTTNING | 128 |
| DYNAMISK | 256 |
| SCROLL_LOCKS | 512 |
| OPTIMISTISK | 1024 |
| STATISK | 2048 |
| FAST_FORWARD | 4096 |
| PÅ PLATS | 8192 |
| FÖR select_statement | 16384 |
Examples
A. Återställa attributen för en specifik plan
Följande exempel returnerar alla planattribut för en specificerad plan. Den sys.dm_exec_cached_plans dynamiska hanteringsvyn frågas först för att få tag på planhandtaget för den specificerade planen. I den andra frågan, ersätt <plan_handle> med ett planhandtagsvärde från den första frågan.
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. Återställer SET-alternativen för kompilerade planer och SQL-handtaget för cachade planer
Följande exempel returnerar ett värde som representerar de alternativ som varje plan har kompilerats med. Dessutom returneras SQL-handtaget för alla cachade planer.
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
Se även
Vyer och funktioner för dynamisk hantering (Transact-SQL)
Körningsrelaterade vyer och funktioner för dynamisk hantering (Transact-SQL)
sys.dm_exec_cached_plans (Transact-SQL)
sys.databases (Transact-SQL)
sys.objects (Transact-SQL)