sys.dm_exec_plan_attributes (Transact-SQL)sys.dm_exec_plan_attributes (Transact-SQL)

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions)

Возвращает по одной строке для каждого атрибута плана, ассоциированного с планом, заданным посредством дескриптора плана.Returns one row per plan attribute for the plan specified by the plan handle. Функция с табличным значением может использоваться для получения подробных сведений об определенном плане, например значения ключа кэша или количество одновременных текущих выполнений плана.You can use this table-valued function to get details about a particular plan, such as the cache key values or the number of current simultaneous executions of the plan.

Примечание

Некоторые сведения, возвращаемые этой функцией, сопоставлены с представлением обратной совместимости sys.sysкачеобжектс .Some of the information returned through this function maps to the sys.syscacheobjects backward compatibility view.

СинтаксисSyntax

sys.dm_exec_plan_attributes ( plan_handle )  

АргументыArguments

plan_handleplan_handle
Уникально идентифицирует план запроса для запущенного пакета, план которого хранится в кэше планов.Uniquely identifies a query plan for a batch that has executed and whose plan resides in the plan cache. plan_handle имеет тип varbinary (64).plan_handle is varbinary(64). Маркер плана можно получить из динамического административного представления sys. dm_exec_cached_plans .The plan handle can be obtained from the sys.dm_exec_cached_plans dynamic management view.

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

Имя столбцаColumn name Тип данныхData type ОписаниеDescription
Атрибутattribute varchar(128)varchar(128) Имя атрибута, ассоциированного с этим планом.Name of the attribute associated with this plan. В таблице ниже приведен список возможных атрибутов, их типов данных и их описания.The table immediately below this one lists the possible attributes, their data types, and their descriptions.
valuevalue sql_variantsql_variant Значение атрибута, ассоциированного с этим планом.Value of the attribute that is associated with this plan.
is_cache_keyis_cache_key bitbit Указывает, используется ли атрибут в качестве части ключа уточняющего запроса к кэшу для плана.Indicates whether the attribute is used as part of the cache lookup key for the plan.

В приведенной выше таблице атрибут может иметь следующие значения:From the above table, attribute can have the following values:

АтрибутAttribute Тип данныхData type ОписаниеDescription
set_optionsset_options intint Показывает значения параметров, с использованием которых был скомпилирован план.Indicates the option values that the plan was compiled with.
objectidobjectid intint Одно из основных ключевых слов, используемое для поиска объекта в кэш-памяти.One of the main keys used for looking up an object in the cache. Это идентификатор объекта, хранящийся в представлении sys. Objects для объектов базы данных (процедуры, представления, триггеры и т. д.).This is the object ID stored in sys.objects for database objects (procedures, views, triggers, and so on). Для планов типа «Нерегламентированный» или «Подготовленный» — это внутренний хэш текста пакета.For plans of type "Adhoc" or "Prepared", it is an internal hash of the batch text.
dbiddbid intint Идентификатор базы данных, содержащей сущность, к которой относится план.Is the ID of the database containing the entity the plan refers to.

Для нерегламентированных и подготовленных планов это идентификатор базы данных, из которой выполняется пакет.For ad hoc or prepared plans, it is the database ID from which the batch is executed.
dbid_executedbid_execute intint Для системных объектов, хранящихся в базе данных Resource , это идентификатор базы данных, из которой выполняется кэшированный план.For system objects stored in the Resource database, the database ID from which the cached plan is executed. Во всех остальных случаях это значение равно 0.For all other cases, it is 0.
user_iduser_id intint Значение «-2» означает, что представленный пакет не зависит от неявного разрешения имен и может совместно использоваться разными пользователями.Value of -2 indicates that the batch submitted does not depend on implicit name resolution and can be shared among different users. Это является предпочтительным методом.This is the preferred method. Любое другое значение обозначает идентификатор пользователя, отправившего запрос к базе данных.Any other value represents the user ID of the user submitting the query in the database.
language_idlanguage_id smallintsmallint Идентификатор языка соединения, в результате которого был создан объект кэша.ID of the language of the connection that created the cache object. Дополнительные сведения см. в разделе языкиsys.sys(Transact-SQL).For more information, see sys.syslanguages (Transact-SQL).
date_formatdate_format smallintsmallint Формат даты соединения, во время которого был создан объект кэша.Date format of the connection that created the cache object. Дополнительные сведения см. в разделе SET DATEFORMAT (Transact-SQL).For more information, see SET DATEFORMAT (Transact-SQL).
date_firstdate_first tinyinttinyint Значение первой даты.Date first value. Дополнительные сведения см. в разделе SET DATEFIRST (Transact-SQL).For more information, see SET DATEFIRST (Transact-SQL).
statusstatus intint Биты внутреннего состояния, являющиеся частью ключа уточняющего запроса к кэшу.Internal status bits that are part of the cache lookup key.
required_cursor_optionsrequired_cursor_options intint Параметры курсора, указанные пользователем, такие как тип курсора.Cursor options specified by the user such as the cursor type.
acceptable_cursor_optionsacceptable_cursor_options intint Параметры курсора, которые SQL ServerSQL Server может неявно преобразовывать для поддержания выполнения инструкции.Cursor options that SQL ServerSQL Server may implicitly convert to in order to support the execution of the statement. Например, пользователь может указать динамический курсор, но оптимизатор запросов может преобразовать этот тип курсора в статический.For example, the user may specify a dynamic cursor, but the query optimizer is permitted to convert this cursor type to a static cursor.
inuse_exec_contextinuse_exec_context intint Количество выполняемых в данный момент пакетов, использующих план запроса.Number of currently executing batches that are using the query plan.
free_exec_contextfree_exec_context intint Количество контекстов выполнения в кэш-памяти для плана запроса, которые не используются в данный момент.Number of cached execution contexts for the query plan that are not being currently used.
hits_exec_contexthits_exec_context intint Количество получений контекста выполнения из кэш-памяти планов и его повторных использований, приводящее к снижению издержек на повторную компиляцию инструкции SQL.Number of times the execution context was obtained from the plan cache and reused, saving the overhead of recompiling the SQL statement. Это значение является статистическим для всех пакетов, выполняющихся в настоящий момент.The value is an aggregate for all batch executions so far.
misses_exec_contextmisses_exec_context intint Количество обнаружений отсутствия контекста выполнения в кэш-памяти планов, приводящее к созданию нового контекста выполнения для пакета выполнения.Number of times that an execution context could not be found in the plan cache, resulting in the creation of a new execution context for the batch execution.
removed_exec_contextremoved_exec_context intint Количество контекстов выполнения, которые были удалены по причине слишком активного использования памяти для плана в кэш-памяти.Number of execution contexts that have been removed because of memory pressure on the cached plan.
inuse_cursorsinuse_cursors intint Количество выполняемых в данный момент пакетов, содержащих один или более курсоров, использующих план в кэш-памяти.Number of currently executing batches containing one or more cursors that are using the cached plan.
free_cursorsfree_cursors intint Количество бездействующих или свободных курсоров для плана в кэш-памяти.Number of idle or free cursors for the cached plan.
hits_cursorshits_cursors intint Количество получений неактивного курсора из плана в кэш-памяти и его повторных использований.Number of times that an inactive cursor was obtained from the cached plan and reused. Это значение является статистическим для всех пакетов, выполняющихся в настоящий момент.The value is an aggregate for all batch executions so far.
misses_cursorsmisses_cursors intint Количество случаев обнаружения отсутствия неактивного курсора в кэш-памяти.Number of times that an inactive cursor could not be found in the cache.
removed_cursorsremoved_cursors intint Количество курсоров, которые были удалены по причине слишком активного использования памяти для плана в кэше.Number of cursors that have been removed because of memory pressure on the cached plan.
sql_handlesql_handle varbinary(64)varbinary(64) Дескриптор SQL для пакета.The SQL handle for the batch.
merge_action_typemerge_action_type smallintsmallint Тип плана выполнения триггеров, используемого в результате инструкции MERGE.The type of trigger execution plan used as the result of a MERGE statement.

0 указывает план без триггеров, или план триггеров, который не выполняется в результате инструкции MERGE, или план триггеров, который выполняется в результате инструкции MERGE, в которой задано только действие DELETE.0 indicates a non-trigger plan, a trigger plan that does not execute as the result of a MERGE statement, or a trigger plan that executes as the result of a MERGE statement that only specifies a DELETE action.

1 указывает план триггеров INSERT, который выполняется в результате инструкции MERGE.1 indicates an INSERT trigger plan that runs as the result of a MERGE statement.

2 указывает план триггеров UPDATE, который выполняется в результате инструкции MERGE.2 indicates an UPDATE trigger plan that runs as the result of a MERGE statement.

3 указывает план триггеров DELETE, который выполняется в результате инструкции MERGE, содержащей соответствующее действие INSERT или UPDATE.3 indicates a DELETE trigger plan that runs as the result of a MERGE statement containing a corresponding INSERT or UPDATE action.

Для вложенных триггеров, выполняемых каскадными операциями, это значение является действием инструкции MERGE, запустившей каскад.For nested triggers run by cascading actions, this value is the action of the MERGE statement that caused the cascade.

РазрешенияPermissions

В SQL ServerSQL Server необходимо VIEW SERVER STATE разрешение.On SQL ServerSQL Server, requires VIEW SERVER STATE permission.
На База данных SQLSQL Database уровнях Premium требуется VIEW DATABASE STATE разрешение в базе данных.On База данных SQLSQL Database Premium Tiers, requires the VIEW DATABASE STATE permission in the database. На База данных SQLSQL Database уровнях Standard и Basic требуется Администратор сервера или учетная запись администратора Azure Active Directory .On База данных SQLSQL Database Standard and Basic Tiers, requires the Server admin or an Azure Active Directory admin account.

ПримечанияRemarks

Параметры SETSet Options

Копии одного и того же скомпилированного плана могут отличаться только значением столбца set_options .Copies of the same compiled plan might differ only by the value in the set_options column. Это указывает на то, что разные соединения используют разные наборы параметров SET для одного запроса.This indicates that different connections are using different sets of SET options for the same query. Использование разных наборов параметров, как правило, нежелательно, поскольку приводит к дополнительным компиляциям, меньшему повторному использованию планов и расширению кэша планов по причине размещения нескольких копий планов в кэш-памяти.Using different sets of options is usually undesirable because it can cause extra compilations, less plan reuse, and plan cache inflation because of multiple copies of plans in the cache.

Оценка параметров SETEvaluating Set Options

Чтобы перевести значение, возвращаемое в set_options , в параметры, с помощью которых был скомпилирован план, вычтите значения из set_options значения, начиная с максимально возможного значения, пока не будет достигнуто значение 0.To translate the value returned in set_options to the options with which the plan was compiled, subtract the values from the set_options value, starting with the largest possible value, until you reach 0. Каждое вычитаемое значение соответствует одному параметру, который использовался в плане запроса.Each value you subtract corresponds to an option that was used in the query plan. Например, если значение в set_options равно 251, то параметры, с которыми был скомпилирован план, — это ANSI_NULL_DFLT_ON (128), QUOTED_IDENTIFIER (64), ANSI_NULLS (32), ANSI_WARNINGS (16), CONCAT_NULL_YIELDS_NULL (8), параллельный план (2) и ANSI_PADDING (1).For example, if the value in set_options is 251, the options the plan was compiled with are ANSI_NULL_DFLT_ON (128), QUOTED_IDENTIFIER (64), ANSI_NULLS(32), ANSI_WARNINGS (16), CONCAT_NULL_YIELDS_NULL (8), Parallel Plan(2) and ANSI_PADDING (1).

ПараметрOption ЗначениеValue
ANSI_PADDINGANSI_PADDING 11
параллелпланParallelPlan

Указывает, что параметры параллелизма плана изменились.Indicates that the plan parallelism options have changed.
22
FORCEPLANFORCEPLAN 44
CONCAT_NULL_YIELDS_NULLCONCAT_NULL_YIELDS_NULL 88
ANSI_WARNINGSANSI_WARNINGS 1616
ANSI_NULLSANSI_NULLS 3232
QUOTED_IDENTIFIERQUOTED_IDENTIFIER 6464
ANSI_NULL_DFLT_ONANSI_NULL_DFLT_ON 128128
ANSI_NULL_DFLT_OFFANSI_NULL_DFLT_OFF 256256
NoBrowseTableNoBrowseTable

Указывает, что план не использует рабочую таблицу для реализации операции FOR BROWSE.Indicates that the plan does not use a work table to implement a FOR BROWSE operation.
512512
TriggerOneRowTriggerOneRow

Указывает, что план содержит однострочную оптимизацию для таблиц разности триггеров AFTER.Indicates that the plan contains single row optimization for AFTER trigger delta tables.
10241024
ResyncQueryResyncQuery

Указывает, что запрос был направлен внутренней системной хранимой процедурой.Indicates that the query was submitted by internal system stored procedures.
20482048
ARITH_ABORTARITH_ABORT 40964096
NUMERIC_ROUNDABORTNUMERIC_ROUNDABORT 81928192
DATEFIRSTDATEFIRST 1638416384
DATEFORMATDATEFORMAT 3276832768
LanguageIDLanguageID 6553665536
UPONUPON

Указывает, что параметру базы данных PARAMETERIZATION присвоено значение FORCED при компиляции плана.Indicates that the database option PARAMETERIZATION was set to FORCED when the plan was compiled.
131072131072
ROWCOUNTROWCOUNT Применимо к: SQL Server 2012 (11.x)SQL Server 2012 (11.x) Кому SQL Server 2019 (15.x)SQL Server 2019 (15.x)Applies To: SQL Server 2012 (11.x)SQL Server 2012 (11.x) to SQL Server 2019 (15.x)SQL Server 2019 (15.x)

262144262144

КурсорыCursors

Неактивные курсоры кэшируются в скомпилированном плане так, чтобы одновременно работающие пользователи курсоров могли повторно использовать память, использованную для хранения курсора.Inactive cursors are cached in a compiled plan so that the memory used to store the cursor can be reused by concurrent users of cursors. Предположим, что пакет объявляет и использует курсор без его освобождения.For example, suppose that a batch declares and uses a cursor without deallocating it. Если два пользователя выполняют один и тот же пакет, то будет два активных курсора.If there are two users executing the same batch, there will be two active cursors. После освобождения курсоров (потенциально в разных пакетах), память, используемая для хранения курсора, кэшируется и не освобождается.Once the cursors are deallocated (potentially in different batches), the memory used to store the cursor is cached and not released. Этот список неактивных курсоров хранится в скомпилированном плане.This list of inactive cursors is kept in the compiled plan. При следующем выполнении пакета пользователем память кэшированного курсора будет использоваться повторно и инициализироваться соответствующим образом, как для активного курсора.The next time a user executes the batch, the cached cursor memory will be reused and initialized appropriately as an active cursor.

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

Чтобы перевести значение, возвращаемое в required_cursor_options и acceptable_cursor_options в параметры, с помощью которых был скомпилирован план, вычтите значения из значения столбца, начиная с максимально возможного значения, пока не будет достигнуто значение 0.To translate the value returned in required_cursor_options and acceptable_cursor_options to the options with which the plan was compiled, subtract the values from the column value, starting with the largest possible value, until you reach 0. Каждое вычитаемое значение соответствует одному курсору, который использовался в плане запроса.Each value you subtract corresponds to a cursor option that was used in the query plan.

ПараметрOption ЗначениеValue
NoneNone 00
INSENSITIVEINSENSITIVE 11
SCROLLSCROLL 22
READ ONLYREAD ONLY 44
FOR UPDATEFOR UPDATE 88
LOCALLOCAL 1616
GLOBALGLOBAL 3232
FORWARD_ONLYFORWARD_ONLY 6464
KEYSETKEYSET 128128
DYNAMICDYNAMIC 256256
SCROLL_LOCKSSCROLL_LOCKS 512512
OPTIMISTICOPTIMISTIC 10241024
STATICSTATIC 20482048
FAST_FORWARDFAST_FORWARD 40964096
IN PLACEIN PLACE 81928192
FOR select_statementFOR select_statement 1638416384

ПримерыExamples

A.A. Возврат атрибутов для конкретного планаReturning the attributes for a specific plan

Следующий пример возвращает все атрибуты для указанного плана.The following example returns all plan attributes for a specified plan. В первый раз динамическое административное представление sys.dm_exec_cached_plans опрашивается для получения дескриптора указанного плана.The sys.dm_exec_cached_plans dynamic management view is queried first to obtain the plan handle for the specified plan. Во втором запросе <plan_handle> заменяется значением дескриптора плана из первого запроса.In the second query, replace <plan_handle> with a plan handle value from the first query.

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. Возврат параметров SET для скомпилированных планов и дескриптора SQL для планов в кэш-памятиReturning the SET options for compiled plans and the SQL handle for cached plans

Следующий пример возвращает значение, представляющее параметры, с использованием которых был скомпилирован план.The following example returns a value representing the options that each plan was compiled with. Кроме того, возвращается дескриптор SQL для всех кэшированных планов.In addition, the SQL handle for all the cached plans is returned.

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  

См. такжеSee Also

Динамические административные представления и функции (Transact-SQL) Dynamic Management Views and Functions (Transact-SQL)
Динамические административные представления и функции, связанные с выполнением (Transact-SQL) Execution Related Dynamic Management Views and Functions (Transact-SQL)
sys.dm_exec_cached_plans (Transact-SQL) sys.dm_exec_cached_plans (Transact-SQL)
sys.databases (Transact-SQL) sys.databases (Transact-SQL)
sys.objects (Transact-SQL)sys.objects (Transact-SQL)