Udostępnij za pośrednictwem


sys.dm_exec_plan_attributes (języka Transact-SQL)

Zwraca jeden wiersz na atrybut plan dla programu określonego przez dojście do planu.Ta funkcja wycenione tabela umożliwia uzyskiwanie szczegółowych informacji o określonym planu, takie jak wartości kluczy w pamięci podręcznej lub liczbę równoczesnych wykonań bieżącego planu.

Uwaga

Niektóre informacje zwrócone za pomocą tej funkcja jest mapowany na sys.syscacheobjects widok zachowania zgodności z poprzednimi wersjami.

sys.dm_exec_plan_attributes ( plan_handle )

Argumenty

  • plan_handle
    Uniquely identifies a query plan for a batch that has executed and whose plan resides in the plan cache.plan_handle is varbinary(64).Uchwyt planu można otrzymać od sys.dm_exec_cached_plans dynamicznego zarządzania widoku.

Zwracana tabela

Nazwa kolumna

Typ danych

Description

atrybut

varchar(128)

Nazwa atrybut skojarzonego z tego planu.Jedną z następujących czynności:

AttributeTyp danychDescription
set_options int Wskazuje wartości opcji, które plan został skompilowany.
objectid int Jeden z wielu kluczy służących do wyszukiwania obiektu w pamięci podręcznej.To jest identyfikator obiektu przechowywany w plikusys.objects dla obiektów bazy danych (procedury, widoki, wyzwalacze i tym podobne).W przypadku planów typu ad hoc lub przygotowanych jest to wewnętrzny skrót tekstu wsadowego.
DBID int Czy odwołuje się identyfikator bazy danych zawierającej obiekt planu.Plany ad hoc lub gotowa jest identyfikator bazy danych, z którego jest wykonywane partia.
dbid_execute int Na obiekty systemowe przechowywane w Zasób bazy danych Identyfikator bazy danych, z którego jest wykonywane buforowanego planu.W przypadku wszystkich innych przypadkach jest 0.
user_id int Wartość -2 oznacza, że przesłany plik wsadowy nie zależy od jawnego rozpoznawania nazw i może być współużytkowany przez różnych użytkowników.Jest to metoda preferowana.Dowolna inna wartość reprezentuje identyfikator użytkownika przesyłającego kwerendę do bazy danych.
language_id smallint / = (Podzielić jest równe) (języka Transact-SQL)Aby uzyskać więcej informacji zobaczsys.syslanguages (Transact-SQL).
date_format smallint Na przykład, jeśli zmienna jest @ x równe 34, a następnie @ x / = 2 ma oryginalną wartość @ x, przez 2 i ustawia @ x dla tej nowej wartości (17).Aby uzyskać więcej informacji zobaczzestaw DATEFORMAT (języka Transact-SQL).
date_first tinyint Pierwsza wartość data.Aby uzyskać więcej informacji zobaczSET DATEFIRST (Transact-SQL).
Stan int Wewnętrzny stan bitów, które są częścią klucz wyszukiwania w pamięci podręcznej.
required_cursor_options int Opcje kursor określonych przez użytkownika, takie jak typ kursor.
acceptable_cursor_options int Kursor opcji SQL Server mogą niejawnie przekonwertować do realizacji w instrukcja obsługi. Na przykład użytkownik może określić kursor dynamicznych, ale może się przekonwertować ten typ kursora na kursor statyczny optymalizator kwerendy.Aby uzyskać więcej informacji zobaczUsing Implicit Cursor Conversions.
inuse_exec_context int Liczba aktualnie wykonywanych instancji, które korzystają z tego planu kwerend.Aby uzyskać więcej informacji na temat wykonywania kwerendy i kontekstu planów zobacz Wykonanie planu buforowanie i ponowne użycie.
free_exec_context int Liczba kontekstów wykonanie buforowanego planu kwerendy, które nie są aktualnie używane.
hits_exec_context int Liczba określająca, ile razy kontekstu wykonanie został uzyskany z pamięci podręcznej planu i ponownie użyty, zapisywanie obciążenie związane z ponownej kompilacji w instrukcja języka SQL.Wartość jest agregacja dla wszystkich wykonań wsadowego dotąd.
misses_exec_context int Liczba określająca, ile razy kontekstu wykonania nie można odnaleźć w pamięci podręcznej planu, co przy tworzeniu nowego kontekstu wykonania dla wykonania partia.
removed_exec_context int Liczba kontekstów wykonania, które zostały usunięte z powodu presji pamięci na buforowanego planu.
inuse_cursors int Liczba aktualnie wykonywanych instancje zawierające jeden lub więcej kursory, korzystających z buforowanego planu.
free_cursors int Liczba bezczynności lub wolne kursorów dla buforowanego planu.
hits_cursors int Liczba określająca, ile razy nieaktywny kursor został uzyskany z buforowanego planu i ponownego użycia.Wartość jest agregacja dla wszystkich wykonań wsadowego dotąd.
misses_cursors int Liczba określająca, ile razy nieaktywny kursor nie można znaleźć w pamięci podręcznej.
removed_cursors int Liczbę kursorów, które zostały usunięte z powodu presji pamięci na buforowanego planu.
sql_handle varbinary (64)Dojście SQL dla partia.
merge_action_type smallint Typ planu wykonania wyzwalacza używane w wyniku instrukcja korespondencji SERYJNEJ. wartość 0 wskazuje, plan nie wyzwalacz, planu wyzwalacz, który nie wykonuje się w wyniku instrukcja korespondencji SERYJNEJ lub planu wyzwalacz, który jest wykonywany w wyniku instrukcja korespondencji SERYJNEJ, która określa tylko akcja DELETE.wartość 1 wskazuje plan wyzwalacz INSERT, który działa jako wynik instrukcja korespondencji SERYJNEJ.2-wskazuje planu wyzwalacza UPDATE uruchamiana w wyniku instrukcja korespondencji SERYJNEJ.3-wskazuje planu wyzwalacza DELETE, który działa jako wynik instrukcja korespondencji SERYJNEJ zawierające odpowiednią akcja INSERT lub UPDATE.Uruchom akcje kaskadowych zagnieżdżonych wyzwalaczy ta wartość jest akcja instrukcja korespondencji SERYJNEJ, która spowodowała kaskadowo.

wartość

sql_variant

Wartość atrybut, który jest skojarzony z tego planu.

is_cache_key

bit

Wskazuje, czy atrybut jest używany jako część klucz wyszukiwania pamięci podręcznej dla planu.

Uprawnienia

Wymaga uprawnienia VIEW SERVER STATE na serwerze.

Remarks

zestaw Opcje

Kopie tego samego planu skompilowany mogą różnić się tylko według wartości w set_options kolumna.Oznacza to, że różne połączenia korzystają z różnych zestawów zestaw opcje dla tej samej kwerendy.Korzystanie z różnych zestawów opcji jest zazwyczaj niepożądanych, ponieważ mogą powodować dodatkowe kompilacje mniej ponownego użycia planu i zaplanować inflacji pamięci podręcznej ze względu na wiele kopii planów w pamięci podręcznej.Aby uzyskać więcej informacji zobaczQuery Tuning Recommendations.

Ustaw opcje oceny

Aby przetłumaczyć wartość zwracana w set_options do opcji, z którymi został skompilowany plan, odejmować wartości od set_options wartość, począwszy od największej wartości to możliwe, dopóki nie osiągniesz 0.Każda wartość odejmowaniu odpowiada opcja, która została użyta w planu kwerend.Na przykład jeśli wartość w set_options jest 251, opcje plan został skompilowany z ANSI_NULL_DFLT_ON (128), QUOTED_IDENTIFIER (64), ANSI_NULLS(32), ANSI_WARNINGS (16), CONCAT_NULL_YIELDS_NULL (8), Parallel Plan(2) i ANSI_PADDING (1).

Opcja

Wartość

ANSI_PADDING

1

Plan równoległe

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

Wskazuje, że plan nie używają tabela pracy do wykonania operacji przez FOR BROWSE.

512

TriggerOneRow

Wskazuje, czy plan zawiera jeden wiersz optymalizację dla później tabel delta wyzwalacza.

1024

ResyncQuery

Wskazuje, że kwerendy przekazano wewnętrznego systemu przechowywane procedury.

2048

ARITH_ABORT

4096

NUMERIC_ROUNDABORT

8192

DATEFIRST

16384

DATEFORMAT

32768

LanguageID

65536

PO

Wskazuje, że opcja bazy danych PARAMETRYZACJI był zestaw do FORCED, jeśli plan został skompilowany.

131072

SPACJA lub tabulator

Nieaktywne kursory są buforowane w skompilowany plan, aby ilość pamięci używanej do przechowywania kursor może zostać użyty ponownie przez użytkowników równocześnie kursorów.Na przykład załóżmy, że zadanie partia deklaruje i korzysta z kursor bez cofanie przydziału go.Jeśli dwóch użytkowników wykonywania tej samej serii, będzie dwa aktywne kursorów.Po kursory są dealokowane (potencjalnie w różnych instancji), ilość pamięci używanej do przechowywania kursor jest w pamięci podręcznej, a nie zwolniona.Ta lista nieaktywny kursorów jest przechowywana w skompilowany plan.Następnym razem użytkownik wykonuje partia, pamięci podręcznej kursor zostanie ponownie użyty i odpowiednio zainicjowany jako active kursor.

Ocena opcje kursor

Aby przetłumaczyć wartość zwracana w required_cursor_options and acceptable_cursor_options do opcji, z którymi został skompilowany plan, odejmować wartość od wartości kolumna, począwszy od największej wartości to możliwe, dopóki nie osiągniesz 0.Każdy użytkownik wartość odejmować odpowiada opcja kursor, która została użyta w planu kwerend.

Opcja

Wartość

None

0

NIEWRAŻLIWE

1

PRZEWIJANIA

2

W TRYBIE TYLKO DO ODCZYTU

4

DO AKTUALIZACJI

8

LOKALNE

16

GLOBALNE

32

FORWARD_ONLY

64

ZESTAW KLUCZY

128

DYNAMICZNE

256

SCROLL_LOCKS

512

OPTYMISTYCZNY

1024

STATYCZNE

2048

FAST_FORWARD

4096

W MIEJSCU

8192

DLA select_statement

16384

Przykłady

A.Zwracania atrybutów dla określonego planu

W poniższym przykładzie są zwracane wszystkie atrybuty plan dla określonego planu.The sys.dm_exec_cached_plans dynamiczny widok zarządzania is queried first to obtain the plan handle for the specified plan. Zastąp w drugą kwerendę <plan_handle> z planu obsługi wartości z pierwszej kwerendy.

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.Zwracanie opcji zestaw dla planów skompilowany i uchwyt SQL dla planów pamięci podręcznej

W poniższym przykładzie zwraca wartość reprezentujące każdy plan został skompilowany z opcji.Ponadto zwracana jest dojścia SQL dla wszystkich planów pamięci podręcznej.

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