Поделиться через


sys.dm_exec_plan_attributes

Изменения: 12 декабря 2006 г.

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

ms189472.note(ru-ru,SQL.90).gifПримечание.
Часть сведений, возвращаемая этой функцией, сопоставляется с представлением обратной совместимости sys.syscacheobjects.

Синтаксис

sys.dm_exec_plan_attributes (plan_handle)

Аргументы

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

Возвращаемая таблица

Имя столбца

Тип данных

Описание

attribute

varchar(128)

Имя атрибута, ассоциированного с этим планом. Это может быть:

Атрибут

Тип данных

Описание

set_optionsintПоказывает значения параметров, с использованием которых был скомпилирован план.

objectidintОдно из основных ключевых слов, используемое для поиска объекта в кэш-памяти. Это идентификатор объекта, хранимый в таблице sys.objects базы данных (процедуры, представления, триггеры и т.п.). Для планов типа «Нерегламентированный» или «Подготовленный» — это внутренний хэш текста пакета.

dbidintИдентификатор базы данных, содержащей сущность, для которой создан план. Для нерегламентированных и подготовленных планов это идентификатор базы данных, из которой выполняется пакет.

dbid_executeintДля системных объектов, хранимых в базе данных Resource, представляет собой идентификатор базы данных, из которой выполняется план в кэш-памяти. Во всех остальных случаях это значение равно 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 для пакета.

value

sql_variant

Значение атрибута, ассоциированного с этим планом.

is_cache_key

bit

Указывает, используется ли атрибут в качестве части ключа уточняющего запроса к кэшу для плана.

Замечания

Параметры SET

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

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

Чтобы выделить из возвращенного в столбце set_options значения параметры, с использованием которых был скомпилирован план, необходимо вычитать эти значения из значения set_options, начиная с максимально возможного значения, до получения значения 0. Каждое вычитаемое значение соответствует одному параметру, который использовался в плане запроса. Например, если значение 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_PADDING

1

Parallel Plan

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

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

512

TriggerOneRow

Указывает, что план содержит однострочную оптимизацию для триггеров AFTER и INSTEAD OF. Иначе говоря, этот параметр установлен в том случае, если в таблицах inserted и deleted затрагивается только одна строка. Применяется к триггерам Transact-SQL и CLR, выполняющим внутрипроцессный доступ к данным.

1024

ResyncQuery

Указывает, что запрос был направлен внутренней системной хранимой процедурой.

2048

ARITH_ABORT

4096

NUMERIC_ROUNDABORT

8192

DATEFIRST

16384

DATEFORMAT

32768

LanguageID

65536

UPON

Указывает, что параметру базы данных PARAMETERIZATION присвоено значение FORCED при компиляции плана.

131072

Курсоры

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

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

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

Параметр Значение

нет

0

INSENSITIVE

1

SCROLL

2

READ ONLY

4

FOR UPDATE

8

LOCAL

16

GLOBAL

32

FORWARD_ONLY

64

KEYSET

128

DYNAMIC

256

SCROLL_LOCKS

512

OPTIMISTIC

1024

STATIC

2048

FAST_FORWARD

4096

IN PLACE

8192

FOR select_statement

16384

Разрешения

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

Примеры

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

Следующий пример возвращает все атрибуты для указанного плана. В первый раз динамическое административное представление 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, text
FROM (
    SELECT plan_handle, epa.attribute, epa.value, st.text 
    FROM sys.dm_exec_cached_plans 
        OUTER APPLY sys.dm_exec_plan_attributes(plan_handle) AS epa
        CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
    WHERE cacheobjtype = 'Compiled Plan') AS ecpa 
PIVOT (MAX(ecpa.value) FOR ecpa.attribute IN ("set_options", "sql_handle")) AS pvt;
GO

См. также

Справочник

Динамические административные представления и функции
Динамические административные представления и соответствующие функции, связанные с выполнением
sys.dm_exec_cached_plans
sys.databases (Transact-SQL)
sys.objects (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

12 декабря 2006 г.

Новое содержимое
  • Перечислены атрибуты, возвращаемые в столбце Атрибут.
  • Добавлены разделы «Примечания» и «Примеры».