sys.dm_exec_plan_attributes (Transact-SQL)

Gäller för: SQL Server 2016 (13.x) och senare versioner Azure SQL DatabaseAzure SQL Managed InstanceSQL-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


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)