sys.dm_exec_plan_attributes (Transact-SQL)

 

ОБЛАСТЬ ПРИМЕНЕНИЯ ЭТОЙ СТАТЬИ:даSQL Server (начиная с 2008)нетБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data Warehouse

Возвращает по одной строке для каждого атрибута плана, ассоциированного с планом, заданным посредством дескриптора плана. Функция с табличным значением может использоваться для получения подробных сведений об определенном плане, например значения ключа кэша или количество одновременных текущих выполнений плана.

System_CAPS_ICON_note.jpg Примечание


Некоторые из сведений, возвращаемых этой функцией, сопоставляется sys.syscacheobjects представлением обратной совместимости.

  
sys.dm_exec_plan_attributes ( plan_handle )  

plan_handle
Уникально идентифицирует план запроса для запущенного пакета, план которого хранится в кэше планов. plan_handlevarbinary(64). Дескриптор плана можно получить из sys.dm_exec_cached_plans динамическое административное представление.

Имя столбцаТип данныхDescription
атрибутvarchar(128)Имя атрибута, ассоциированного с этим планом. В таблице немедленно ниже перечислены возможные атрибуты, их типы данных и их описания.
значениеsql_variantЗначение атрибута, ассоциированного с этим планом.
is_cache_keyбитУказывает, используется ли атрибут в качестве части ключа уточняющего запроса к кэшу для плана.
AttributeТип данныхDescription
set_optionsintПоказывает значения параметров, с использованием которых был скомпилирован план.
objectidintОдно из основных ключевых слов, используемое для поиска объекта в кэш-памяти. Это идентификатор объекта, хранимый в sys.objects для объектов базы данных (процедуры, представления, триггеры и т. д). Для планов типа «Нерегламентированный» или «Подготовленный» — это внутренний хэш текста пакета.
dbidintИдентификатор базы данных, содержащей сущность, к которой относится план.

Для нерегламентированных и подготовленных планов это идентификатор базы данных, из которой выполняется пакет.
dbid_executeintДля системных объектов, хранящихся в ресурсов базы данных, идентификатор базы данных, из которой выполняется кэшированный план. Во всех остальных случаях это значение равно 0.
user_idintЗначение «-2» означает, что представленный пакет не зависит от неявного разрешения имен и может совместно использоваться разными пользователями. Этот метод является предпочтительным. Любое другое значение обозначает идентификатор пользователя, отправившего запрос к базе данных.
language_idsmallintИдентификатор языка соединения, в результате которого был создан объект кэша. Дополнительные сведения см. в разделе sys.syslanguages ( Transact-SQL ).
date_formatsmallintФормат даты соединения, во время которого был создан объект кэша. Дополнительные сведения см. в разделе SET DATEFORMAT ( Transact-SQL ).
date_firsttinyintЗначение первой даты. Дополнительные сведения см. в разделе SET DATEFIRST ( Transact-SQL ).
statusintБиты внутреннего состояния, являющиеся частью ключа уточняющего запроса к кэшу.
required_cursor_optionsintПараметры курсора, указанные пользователем, такие как тип курсора.
acceptable_cursor_optionsintПараметры курсора, которые SQL Server может неявно преобразовывать для поддержания выполнения инструкции. Например, пользователь может указать динамический курсор, но оптимизатор запросов может преобразовать этот тип курсора в статический.
inuse_exec_contextintКоличество выполняемых в данный момент пакетов, использующих план запроса.
free_exec_contextintКоличество контекстов выполнения в кэш-памяти для плана запроса, которые не используются в данный момент.
hits_exec_contextintКоличество получений контекста выполнения из кэш-памяти планов и его повторных использований, приводящее к снижению издержек на повторную компиляцию инструкции SQL. Это значение является статистическим для всех пакетов, выполняющихся в настоящий момент.
misses_exec_contextintКоличество обнаружений отсутствия контекста выполнения в кэш-памяти планов, приводящее к созданию нового контекста выполнения для пакета выполнения.
removed_exec_contextintКоличество контекстов выполнения, которые были удалены по причине слишком активного использования памяти для плана в кэш-памяти.
inuse_cursorsintКоличество выполняемых в данный момент пакетов, содержащих один или более курсоров, использующих план в кэш-памяти.
free_cursorsintКоличество бездействующих или свободных курсоров для плана в кэш-памяти.
hits_cursorsintКоличество получений неактивного курсора из плана в кэш-памяти и его повторных использований. Это значение является статистическим для всех пакетов, выполняющихся в настоящий момент.
misses_cursorsintКоличество случаев обнаружения отсутствия неактивного курсора в кэш-памяти.
removed_cursorsintКоличество курсоров, которые были удалены по причине слишком активного использования памяти для плана в кэше.
sql_handlevarbinary(64)Дескриптор SQL для пакета.
merge_action_typesmallintТип плана выполнения триггеров, используемого в результате инструкции MERGE.

0 указывает план без триггеров, или план триггеров, который не выполняется в результате инструкции MERGE, или план триггеров, который выполняется в результате инструкции MERGE, в которой задано только действие DELETE.

1 указывает план триггеров INSERT, который выполняется в результате инструкции MERGE.

2 указывает план триггеров UPDATE, который выполняется в результате инструкции MERGE.

3 указывает план триггеров DELETE, который выполняется в результате инструкции MERGE, содержащей соответствующее действие INSERT или UPDATE.

Для вложенных триггеров, выполняемых каскадными операциями, это значение является действием инструкции MERGE, запустившей каскад.

На SQL Server требуется разрешение VIEW SERVER STATE на сервере.

На База данных SQL уровней Premium необходимо разрешение VIEW DATABASE STATE в базе данных. На База данных SQL уровней Standard и Basic требуется База данных SQL учетная запись администратора.

Копии того же скомпилированного плана могут отличаться только значением в set_options столбца. Это указывает на то, что разные соединения используют разные наборы параметров SET для одного запроса. Использование разных наборов параметров, как правило, нежелательно, поскольку приводит к дополнительным компиляциям, меньшему повторному использованию планов и расширению кэша планов по причине размещения нескольких копий планов в кэш-памяти.

Оценка параметров SET

Чтобы преобразовать значение, возвращенное в set_options параметры, с которыми был скомпилирован план, необходимо вычитать эти значения из set_options значения, начиная с максимально возможного значения, пока не достигнете нуля. Каждое вычитаемое значение соответствует одному параметру, который использовался в плане запроса. Например если значение в set_options равно 251, был скомпилирован план с возможны ANSI_NULL_DFLT_ON (128), QUOTED_IDENTIFIER (64), ANSI_NULLS(32), ANSI_WARNINGS (16), CONCAT_NULL_YIELDS_NULL (8), Parallel Plan(2) и ANSI_PADDING (1).

ПараметрЗначение
ANSI_PADDING1
Parallel Plan2
FORCEPLAN4
CONCAT_NULL_YIELDS_NULL8
ANSI_WARNINGS16
ANSI_NULLS32
QUOTED_IDENTIFIER64
ANSI_NULL_DFLT_ON128
ANSI_NULL_DFLT_OFF256
NoBrowseTable

Указывает, что план не использует рабочую таблицу для реализации операции FOR BROWSE.
512
TriggerOneRow

Указывает, что план содержит однострочную оптимизацию для таблиц разности триггеров AFTER.
1024
ResyncQuery

Указывает, что запрос был направлен внутренней системной хранимой процедурой.
2048
ARITH_ABORT4096
NUMERIC_ROUNDABORT8192
DATEFIRST16384
DATEFORMAT32768
LanguageID65536
UPON

Указывает, что параметру базы данных PARAMETERIZATION присвоено значение FORCED при компиляции плана.
131072
ROWCOUNTПрименяется к: SQL Server 2012 для SQL Server 2016

262144

Неактивные курсоры кэшируются в скомпилированном плане так, чтобы одновременно работающие пользователи курсоров могли повторно использовать память, использованную для хранения курсора. Предположим, что пакет объявляет и использует курсор без его освобождения. Если два пользователя выполняют один и тот же пакет, то будет два активных курсора. После освобождения курсоров (потенциально в разных пакетах), память, используемая для хранения курсора, кэшируется и не освобождается. Этот список неактивных курсоров хранится в скомпилированном плане. При следующем выполнении пакета пользователем память кэшированного курсора будет использоваться повторно и инициализироваться соответствующим образом, как для активного курсора.

Оценка параметров курсора

Чтобы преобразовать значение, возвращенное в required_cursor_options и acceptable_cursor_options параметры, с которыми был скомпилирован план, необходимо вычитать эти значения из значения столбца, начиная с максимально возможного значения, пока не достигнете нуля. Каждое вычитаемое значение соответствует одному курсору, который использовался в плане запроса.

ПараметрЗначение
None0
INSENSITIVE1
SCROLL2
READ ONLY4
FOR UPDATE8
LOCAL16
GLOBAL32
FORWARD_ONLY64
KEYSET128
DYNAMIC256
SCROLL_LOCKS512
OPTIMISTIC1024
STATIC2048
FAST_FORWARD4096
IN PLACE8192
ДЛЯ select_statement16384

A. Возврат атрибутов для конкретного плана

Следующий пример возвращает все атрибуты для указанного плана. В первый раз динамическое административное представление sys.dm_exec_cached_plans опрашивается для получения дескриптора указанного плана. Во втором запросе <plan_handle> заменяется значением дескриптора плана из первого запроса.

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  

Б. Возврат параметров SET для скомпилированных планов и дескриптора SQL для планов в кэш-памяти

Следующий пример возвращает значение, представляющее параметры, с использованием которых был скомпилирован план. Кроме того, возвращается дескриптор SQL для всех кэшированных планов.

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  

Динамические административные представления и функции ( Transact-SQL и #41;
( динамические административные представления и функции, связанные с выполнением Transact-SQL и #41;
sys.dm_exec_cached_plans ( Transact-SQL и #41;
sys.databases ( Transact-SQL и #41;
sys.Objects ( Transact-SQL и #41;

Добавления сообщества

ДОБАВИТЬ
Показ: