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

ESTE TÓPICO APLICA-SE A:simSQL Server (a partir de 2008)nãoBanco de Dados SQL do Microsoft AzurenãoAzure SQL Data Warehouse nãoParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Retorna uma linha por atributo de plano para o plano especificado pelo identificador de plano.Returns one row per plan attribute for the plan specified by the plan handle. Você pode usar esta função com valor de tabela para obter detalhes sobre um plano específico, como os valores chave de cache ou o número atual de execuções simultâneas do plano.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.

Observação

Algumas das informações retornadas por essa função é mapeado para o syscacheobjects exibição de compatibilidade com versões anteriores.Some of the information returned through this function maps to the sys.syscacheobjects backward compatibility view.

SintaxeSyntax

sys.dm_exec_plan_attributes ( plan_handle )  

ArgumentosArguments

plan_handleplan_handle
Identifica exclusivamente um plano de consulta de um lote que foi executado e cujo plano reside no cache de plano.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). O identificador de plano pode ser obtido o exec_cached_plans exibição de gerenciamento dinâmico.The plan handle can be obtained from the sys.dm_exec_cached_plans dynamic management view.

Tabela retornadaTable Returned

Nome da colunaColumn name Tipo de dadosData type DescriptionDescription
atributoattribute varchar (128)varchar(128) O nome do atributo associado com este plano.Name of the attribute associated with this plan. A tabela imediatamente abaixo dessa lista os atributos possíveis, seus tipos de dados e suas descrições.The table immediately below this one lists the possible attributes, their data types, and their descriptions.
valuevalue sql_variantsql_variant Valor do atributo que é associado ao plano.Value of the attribute that is associated with this plan.
is_cache_keyis_cache_key bitbit Indica se o atributo é usado como parte da chave de consulta de cache para o plano.Indicates whether the attribute is used as part of the cache lookup key for the plan.

Na tabela acima, atributo pode ter os seguintes valores:From the above table, attribute can have the following values:

AtributoAttribute Tipo de dadosData type DescriptionDescription
set_optionsset_options intint Indica os valores de opção com os quais o plano foi compilado.Indicates the option values that the plan was compiled with.
objectidobjectid intint Uma das chaves principais usadas para pesquisar um objeto no cache.One of the main keys used for looking up an object in the cache. Este é o objeto ID armazenada na sys. Objects para objetos de banco de dados (procedimentos, exibições, gatilhos e assim por diante).This is the object ID stored in sys.objects for database objects (procedures, views, triggers, and so on). Para planos do tipo "Adhoc" ou "Preparado", é um hash interno do texto de lote.For plans of type "Adhoc" or "Prepared", it is an internal hash of the batch text.
dbiddbid intint É o identificador do banco de dados que contém a entidade à qual o plano se refere.Is the ID of the database containing the entity the plan refers to.

Para planos ad hoc ou preparados, é o identificador do banco de dados da partir do qual o lote é executado.For ad hoc or prepared plans, it is the database ID from which the batch is executed.
dbid_executedbid_execute intint Para objetos de sistema armazenados na recurso de banco de dados, a ID de banco de dados do qual o plano armazenado em cache é executado.For system objects stored in the Resource database, the database ID from which the cached plan is executed. 0 para todos os outros casos.For all other cases, it is 0.
user_iduser_id intint Um valor de -2 indica que o lote enviado não depende da resolução de nome implícita e pode ser compartilhado entre usuários diferentes.Value of -2 indicates that the batch submitted does not depend on implicit name resolution and can be shared among different users. Este é o método preferencial.This is the preferred method. Qualquer outro valor representa a identificação do usuário que submete a consulta no banco de dados.Any other value represents the user ID of the user submitting the query in the database.
language_idlanguage_id smallintsmallint A identificação de idioma da conexão que criou o objeto de cache.ID of the language of the connection that created the cache object. Para obter mais informações, consulte sys. syslanguages ( Transact-SQL ) .For more information, see sys.syslanguages (Transact-SQL).
date_formatdate_format smallintsmallint O formato de data da conexão que criou o objeto de cache.Date format of the connection that created the cache object. Para obter mais informações, consulte SET DATEFORMAT ( Transact-SQL ) .For more information, see SET DATEFORMAT (Transact-SQL).
date_firstdate_first tinyinttinyint Primeiro valor de data.Date first value. Para obter mais informações, consulte SET DATEFIRST ( Transact-SQL ) .For more information, see SET DATEFIRST (Transact-SQL).
statusstatus intint Bits de status interno que fazem parte da chave de consulta do cache.Internal status bits that are part of the cache lookup key.
required_cursor_optionsrequired_cursor_options intint Opções de cursor especificadas pelo usuário, como o tipo de cursor.Cursor options specified by the user such as the cursor type.
acceptable_cursor_optionsacceptable_cursor_options intint Opções de cursor que o SQL ServerSQL Server pode converter implicitamente para aceitar a execução da instrução.Cursor options that SQL ServerSQL Server may implicitly convert to in order to support the execution of the statement. Por exemplo, o usuário pode especificar um cursor dinâmico, mas o otimizador de consulta pode converter esse tipo de cursor para um cursor estático.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 Número de lotes em execução que estão usando o plano de consulta.Number of currently executing batches that are using the query plan.
free_exec_contextfree_exec_context intint Número de contextos de execução em cache do plano de consulta que não está sendo utilizado atualmente.Number of cached execution contexts for the query plan that are not being currently used.
hits_exec_contexthits_exec_context intint Número de vezes que o contexto de execução foi obtido do cache de plano e reutilizado, economizando a sobrecarga de recompilar a instrução SQL.Number of times the execution context was obtained from the plan cache and reused, saving the overhead of recompiling the SQL statement. O valor é uma agregação de todas as execuções de lote até o momento.The value is an aggregate for all batch executions so far.
misses_exec_contextmisses_exec_context intint Número de vezes que não foi possível localizar um contexto de execução no cache de plano, resultando na criação de um contexto de execução novo para a execução de lote.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 Número de contextos de execução que foram removidos devido à pressão de memória no plano de cache.Number of execution contexts that have been removed because of memory pressure on the cached plan.
inuse_cursorsinuse_cursors intint Número de lotes em execução que contêm um ou mais cursores que estão usando o plano de cache.Number of currently executing batches containing one or more cursors that are using the cached plan.
free_cursorsfree_cursors intint Número de cursores inativos ou livres no plano de cache.Number of idle or free cursors for the cached plan.
hits_cursorshits_cursors intint Número de vezes que um cursor inativo foi obtido do plano de cache e reutilizado.Number of times that an inactive cursor was obtained from the cached plan and reused. O valor é uma agregação de todas as execuções de lote até o momento.The value is an aggregate for all batch executions so far.
misses_cursorsmisses_cursors intint Número de vezes que não foi possível localizar um cursor inativo no cache.Number of times that an inactive cursor could not be found in the cache.
removed_cursorsremoved_cursors intint Número de cursores de que foram removidos devido à pressão de memória no plano de cache.Number of cursors that have been removed because of memory pressure on the cached plan.
sql_handlesql_handle varbinary(64)varbinary(64) O identificador SQL do lote.The SQL handle for the batch.
merge_action_typemerge_action_type smallintsmallint O tipo de plano de execução de gatilho usado como o resultado de uma instrução MERGE.The type of trigger execution plan used as the result of a MERGE statement.

0 indica plano de não gatilho, um plano de gatilho não executado como o resultado de uma instrução MERGE ou um plano de gatilho executado como o resultado de uma instrução MERGE que só especifica uma ação 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 indica um plano de gatilho INSERT que executa como o resultado de uma instrução MERGE.1 indicates an INSERT trigger plan that runs as the result of a MERGE statement.

2 indica um plano de gatilho UPDATE que executa como o resultado de uma instrução MERGE.2 indicates an UPDATE trigger plan that runs as the result of a MERGE statement.

3 indica um plano de gatilho DELETE que executa como o resultado de uma instrução MERGE que contém uma ação INSERT ou UPDATE correspondente.3 indicates a DELETE trigger plan that runs as the result of a MERGE statement containing a corresponding INSERT or UPDATE action.

Para gatilhos aninhados executados por cascateamento de ações, este valor é a ação da instrução MERGE que causou a cascata.For nested triggers run by cascading actions, this value is the action of the MERGE statement that caused the cascade.

PermissõesPermissions

Em SQL ServerSQL Server requer a permissão VIEW SERVER STATE no servidor.On SQL ServerSQL Server requires VIEW SERVER STATE permission on the server.

Em Banco de Dados SQLSQL Database camadas Premium requer a permissão VIEW DATABASE STATE no banco de dados.On Banco de Dados SQLSQL Database Premium Tiers requires the VIEW DATABASE STATE permission in the database. Em Banco de Dados SQLSQL Database camadas Standard e Basic requer o Banco de Dados SQLSQL Database conta de administrador.On Banco de Dados SQLSQL Database Standard and Basic Tiers requires the Banco de Dados SQLSQL Database admin account.

ComentáriosRemarks

Opções de configuraçãoSet Options

Cópias do mesmo plano compilado podem diferir somente pelo valor no set_options coluna.Copies of the same compiled plan might differ only by the value in the set_options column. Indica que conexões diferentes estão usando conjuntos diferentes de opções SET para a mesma consulta.This indicates that different connections are using different sets of SET options for the same query. Usar conjuntos diferentes de opções não é desejável, porque podem causar compilações extras, baixa reutilização de plano e inflação de cache do plano, devido a várias cópias de planos no cache.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.

Avaliando opções de configuraçãoEvaluating Set Options

Para converter o valor retornado em set_options para as opções com a qual o plano foi compilado, subtraia os valores do set_options valor, começando com o maior valor possível, até que você chegar a 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. Cada valor subtraído corresponde a uma opção que foi usada no plano de consulta.Each value you subtract corresponds to an option that was used in the query plan. Por exemplo, se o valor em set_options for 251, as opções que o plano foi compilado com são ANSI_NULL_DFLT_ON (128), QUOTED_IDENTIFIER (64), ANSI_NULLS(32), ANSI_WARNINGS (16), CONCAT_NULL_YIELDS_NULL (8), Plan(2) paralela e 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).

OpçãoOption ValorValue
ANSI_PADDINGANSI_PADDING 11
Plano paraleloParallel Plan 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

Indica que o plano não usa uma tabela de trabalho para implementar uma operação de FOR BROWSE.Indicates that the plan does not use a work table to implement a FOR BROWSE operation.
512512
TriggerOneRowTriggerOneRow

Indica que o plano contém uma única otimização de linha para tabelas delta de gatilho AFTER.Indicates that the plan contains single row optimization for AFTER trigger delta tables.
10241024
ResyncQueryResyncQuery

Indica que a consulta foi submetida através de procedimentos armazenados do sistema interno.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

Indica que a opção de banco de dados PARAMETERIZATION foi definida como FORCED quando o plano foi compilado.Indicates that the database option PARAMETERIZATION was set to FORCED when the plan was compiled.
131072131072
ROWCOUNTROWCOUNT Aplica-se a: SQL Server 2012SQL Server 2012 para SQL Server 2017SQL Server 2017Applies To: SQL Server 2012SQL Server 2012 to SQL Server 2017SQL Server 2017

262144262144

CursoresCursors

Cursores inativos são colocados em cache em um plano compilado de forma que a memória usada para armazenar o cursor pode ser usada de novo por usuários simultâneos de cursores.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. Por exemplo, suponha que um lote declara e usa um cursor sem desalocá-lo.For example, suppose that a batch declares and uses a cursor without deallocating it. Se houver dois usuários executando o mesmo lote, haverá dois cursores ativos.If there are two users executing the same batch, there will be two active cursors. Quando os cursores são desalocados (potencialmente em lotes diferentes), a memória usada para armazenar o cursor é gravada em cache e não é liberada.Once the cursors are deallocated (potentially in different batches), the memory used to store the cursor is cached and not released. Esta lista de cursores inativos é mantida no plano compilado.This list of inactive cursors is kept in the compiled plan. Na próxima vez que um usuário executar o lote, a memória de cursor em cache será usada novamente e inicializada adequadamente como um cursor ativo.The next time a user executes the batch, the cached cursor memory will be reused and initialized appropriately as an active cursor.

Avaliando opções de cursorEvaluating Cursor Options

Para converter o valor retornado em required_cursor_options e acceptable_cursor_options para as opções com a qual o plano foi compilado, subtraia os valores do valor da coluna, começando com o maior valor possível até chegar a 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. Cada valor subtraído corresponde a uma opção cursor que foi usada no plano de consulta.Each value you subtract corresponds to a cursor option that was used in the query plan.

OpçãoOption ValorValue
NenhumaNone 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
PARA select_statementFOR select_statement 1638416384

ExemplosExamples

A.A. Retornando os atributos de um plano específicoReturning the attributes for a specific plan

O exemplo a seguir retorna todos os atributos de um plano específico.The following example returns all plan attributes for a specified plan. A exibição de gerenciamento dinâmico sys.dm_exec_cached_plans é consultada primeiro para obter o identificador para o plano especificado.The sys.dm_exec_cached_plans dynamic management view is queried first to obtain the plan handle for the specified plan. Na segunda consulta, substitua o <plan_handle> por um valor de identificador de plano da primeira consulta.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.B. Retornando as opções SET para planos compilados e a o identificador SQL para planos em cacheReturning the SET options for compiled plans and the SQL handle for cached plans

O exemplo a seguir retorna um valor que representa as opções com as quais cada plano foi compilado.The following example returns a value representing the options that each plan was compiled with. Além disso, o identificador SQL para todos os planos em cache é retornado.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  

Consulte tambémSee Also

Exibições e funções de gerenciamento dinâmico (Transact-SQL) Dynamic Management Views and Functions (Transact-SQL)
Funções e exibições de gerenciamento dinâmico ( relacionadas à execução 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)