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