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

CETTE RUBRIQUE S’APPLIQUE À :ouiSQL Server (à partir de la version 2008)nonAzure SQL DatabasenonAzure SQL Data Warehouse nonParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Retourne une ligne par attribut de plan pour le plan spécifié par le handle de plan.Returns one row per plan attribute for the plan specified by the plan handle. Cette fonction à valeur de table vous permet d'obtenir des informations sur un plan particulier, tel que les valeurs clé de cache ou le nombre d'exécutions simultanées en cours du plan.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.

Note

Certaines des informations retournées par cette fonction est mappé à la sys.syscacheobjects vue de compatibilité descendante.Some of the information returned through this function maps to the sys.syscacheobjects backward compatibility view.

SyntaxeSyntax

sys.dm_exec_plan_attributes ( plan_handle )  

ArgumentsArguments

plan_handleplan_handle
Identifie de façon unique un plan de requête pour un lot exécuté et dont le plan réside dans le cache du plan.Uniquely identifies a query plan for a batch that has executed and whose plan resides in the plan cache. plan_handle est varbinary(64).plan_handle is varbinary(64). Le descripteur de plan peut être obtenu à partir de la sys.dm_exec_cached_plans vue de gestion dynamique.The plan handle can be obtained from the sys.dm_exec_cached_plans dynamic management view.

Table retournéeTable Returned

Nom de colonneColumn name Type de donnéesData type DescriptionDescription
attributattribute varchar (128)varchar(128) Nom de l'attribut associé à ce plan.Name of the attribute associated with this plan. Le tableau situé immédiatement sous celle-ci répertorie les attributs possibles, leurs types de données et leurs descriptions.The table immediately below this one lists the possible attributes, their data types, and their descriptions.
valeurvalue sql_variantsql_variant Valeur de l'attribut associé à ce plan.Value of the attribute that is associated with this plan.
is_cache_keyis_cache_key bitbit Indique si l'attribut est utilisé comme une partie de la clé de recherche en cache pour le plan.Indicates whether the attribute is used as part of the cache lookup key for the plan.

Dans le tableau ci-dessus, attribut peut avoir les valeurs suivantes :From the above table, attribute can have the following values:

AttributeAttribute Type de donnéesData type DescriptionDescription
set_optionsset_options Intint Indique les valeurs d'option ayant servi à compiler le plan.Indicates the option values that the plan was compiled with.
objectidobjectid Intint Une des clés principales servant à rechercher un objet dans le cache.One of the main keys used for looking up an object in the cache. Il s’agit d’ID d’objet stocké dans sys.objects pour les objets de base de données (procédures, vues, déclencheurs, etc.).This is the object ID stored in sys.objects for database objects (procedures, views, triggers, and so on). Pour des plans de type « Adhoc » ou « Prepared », il s'agit d'un hachage interne du texte du lot.For plans of type "Adhoc" or "Prepared", it is an internal hash of the batch text.
dbiddbid Intint ID de la base de données contenant l'entité à laquelle le plan fait référence.Is the ID of the database containing the entity the plan refers to.

Pour des plans ad hoc ou préparés, il s'agit de l'ID de la base de données à partir duquel est exécuté le lot.For ad hoc or prepared plans, it is the database ID from which the batch is executed.
dbid_executedbid_execute Intint Pour les objets système stockés dans le ressources de base de données, l’ID de base de données à partir de laquelle le plan mis en cache est exécuté.For system objects stored in the Resource database, the database ID from which the cached plan is executed. Dans tous les autres cas, il est égal à 0.For all other cases, it is 0.
user_iduser_id Intint Une valeur de -2 indique que le lot soumis ne dépend pas de la résolution implicite des noms et peut être partagé entre différents utilisateurs.Value of -2 indicates that the batch submitted does not depend on implicit name resolution and can be shared among different users. Cette méthode est recommandée.This is the preferred method. Toute autre valeur représente l'ID de l'utilisateur soumettant la requête dans la base de données.Any other value represents the user ID of the user submitting the query in the database.
language_idlanguage_id smallintsmallint ID de la langue de la connexion qui a créé l'objet dans le cache.ID of the language of the connection that created the cache object. Pour plus d’informations, consultez sys.syslanguages ( Transact-SQL ) .For more information, see sys.syslanguages (Transact-SQL).
date_formatdate_format smallintsmallint Format de date de la connexion qui a créé l'objet dans le cacheDate format of the connection that created the cache object. Pour plus d’informations, consultez SET DATEFORMAT ( Transact-SQL ) .For more information, see SET DATEFORMAT (Transact-SQL).
date_firstdate_first tinyinttinyint Valeur date first.Date first value. Pour plus d’informations, consultez SET DATEFIRST ( Transact-SQL ) .For more information, see SET DATEFIRST (Transact-SQL).
statusstatus Intint Bits d'état interne qui font partie de la clé de recherche en cache.Internal status bits that are part of the cache lookup key.
required_cursor_optionsrequired_cursor_options Intint Options de curseur spécifiées par l'utilisateur (type de curseur par exemple).Cursor options specified by the user such as the cursor type.
acceptable_cursor_optionsacceptable_cursor_options Intint Options de curseur dans lesquelles SQL ServerSQL Server peut convertir implicitement afin de prendre en charge l'exécution de l'instruction.Cursor options that SQL ServerSQL Server may implicitly convert to in order to support the execution of the statement. Par exemple, l'utilisateur peut spécifier un curseur dynamique, mais l'optimiseur de requête peut convertir ce type de curseur en curseur statique.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 Nombre de lots en cours d'exécution qui font appel au plan de requête.Number of currently executing batches that are using the query plan.
free_exec_contextfree_exec_context Intint Nombre de contextes d'exécution en cache pour le plan de requête qui ne sont pas actuellement utilisés.Number of cached execution contexts for the query plan that are not being currently used.
hits_exec_contexthits_exec_context Intint Nombre d'obtention et de réutilisation du contexte d'exécution à partir du cache du plan évitant ainsi de recompiler l'instruction SQL.Number of times the execution context was obtained from the plan cache and reused, saving the overhead of recompiling the SQL statement. La valeur est une agrégation de toutes les exécutions de lot jusqu'à présent.The value is an aggregate for all batch executions so far.
misses_exec_contextmisses_exec_context Intint Nombre de fois un contexte d'exécution était introuvable dans le cache de plan entraînant la création d'un nouveau contexte d'exécution pour l'exécution du lot.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 Nombre de contextes d'exécution ayant été supprimés en raison d'une mémoire insuffisante dans le plan en cache.Number of execution contexts that have been removed because of memory pressure on the cached plan.
inuse_cursorsinuse_cursors Intint Nombre de lots en cours d'exécution contenant un ou plusieurs curseurs qui font appel au plan en cache.Number of currently executing batches containing one or more cursors that are using the cached plan.
free_cursorsfree_cursors Intint Nombre de curseurs libres ou inactifs du plan en cache.Number of idle or free cursors for the cached plan.
hits_cursorshits_cursors Intint Nombre d'obtention et de réutilisation d'un curseur inactif à partir du plan en cache.Number of times that an inactive cursor was obtained from the cached plan and reused. La valeur est une agrégation de toutes les exécutions de lot jusqu'à présent.The value is an aggregate for all batch executions so far.
misses_cursorsmisses_cursors Intint Nombre de fois où un curseur inactif était introuvable dans le cache.Number of times that an inactive cursor could not be found in the cache.
removed_cursorsremoved_cursors Intint Nombre de curseurs ayant été supprimés en raison d'une mémoire insuffisante dans le plan en cache.Number of cursors that have been removed because of memory pressure on the cached plan.
sql_handlesql_handle varbinary(64)varbinary(64) Handle SQL du lot.The SQL handle for the batch.
merge_action_typemerge_action_type smallintsmallint Type du plan d'exécution du déclencheur utilisé à la suite d'une instruction MERGE.The type of trigger execution plan used as the result of a MERGE statement.

0 indique un plan de non-déclencheur, un plan de déclencheur qui ne s'exécute pas à la suite d'une instruction MERGE ou un plan de déclencheur qui s'exécute à la suite d'une instruction MERGE qui spécifie uniquement une action 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 indique un plan de déclencheur INSERT qui s'exécute à la suite d'une instruction MERGE.1 indicates an INSERT trigger plan that runs as the result of a MERGE statement.

2 indique un plan de déclencheur UPDATE qui s'exécute à la suite d'une instruction MERGE.2 indicates an UPDATE trigger plan that runs as the result of a MERGE statement.

3 indique un plan de déclencheur DELETE qui s'exécute à la suite d'une instruction MERGE contenant une action INSERT ou UPDATE correspondante.3 indicates a DELETE trigger plan that runs as the result of a MERGE statement containing a corresponding INSERT or UPDATE action.

Pour les déclencheurs imbriqués exécutés par des actions en cascade, cette valeur correspond à l'action de l'instruction MERGE qui a provoqué la cascade.For nested triggers run by cascading actions, this value is the action of the MERGE statement that caused the cascade.

AutorisationsPermissions

Sur SQL ServerSQL Server requiert l’autorisation VIEW SERVER STATE sur le serveur.On SQL ServerSQL Server requires VIEW SERVER STATE permission on the server.

Sur Base de données SQLSQL Database niveaux Premium requiert l’autorisation VIEW DATABASE STATE dans la base de données.On Base de données SQLSQL Database Premium Tiers requires the VIEW DATABASE STATE permission in the database. Sur Base de données SQLSQL Database Standard et les niveaux de base nécessite le Base de données SQLSQL Database compte d’administrateur.On Base de données SQLSQL Database Standard and Basic Tiers requires the Base de données SQLSQL Database admin account.

Notes Remarks

Définir les optionsSet Options

Les copies du même plan compilé peuvent différer uniquement par la valeur dans la set_options colonne.Copies of the same compiled plan might differ only by the value in the set_options column. Cela signifie que des connexions différentes font appel à différents jeux d'options SET pour la même requête.This indicates that different connections are using different sets of SET options for the same query. L'utilisation de différents jeux d'option n'est pas souhaitable généralement car elle est source de complications supplémentaires, d'une réutilisation insuffisante du plan et d'une augmentation du cache du plan en raison de la présence de plusieurs copies dans le 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.

Évaluation des options définiesEvaluating Set Options

Pour convertir la valeur retournée dans set_options dans les options ayant servi à compiler le plan, il faut soustraire les valeurs à partir de la set_options valeur, en commençant par la plus grande valeur possible, jusqu'à ce que vous atteigniez 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. Chaque valeur soustraite correspond à une option utilisée dans le plan de requête.Each value you subtract corresponds to an option that was used in the query plan. Par exemple, si la valeur de set_options est 251, les options que le plan a été compilé avec ANSI_NULL_DFLT_ON (128), QUOTED_IDENTIFIER (64), ANSI_NULLS(32), ANSI_WARNINGS (16), CONCAT_NULL_YIELDS_NULL (8), Plan(2) parallèle et 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).

OptionOption ValeurValue
ANSI_PADDINGANSI_PADDING 11
Plan en parallèleParallel 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

Indique que le plan n'utilise pas une table de travail pour implémenter une opération FOR BROWSE.Indicates that the plan does not use a work table to implement a FOR BROWSE operation.
512512
TriggerOneRowTriggerOneRow

Indique que le plan contient une optimisation de ligne unique pour les tables delta de déclencheur AFTER.Indicates that the plan contains single row optimization for AFTER trigger delta tables.
10241024
ResyncQueryResyncQuery

Indique que la requête a été soumise par des procédures stockées système internes.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

Indique que l'option de base de données PARAMETERIZATION avait pour valeur FORCED lorsque le plan a été compilé.Indicates that the database option PARAMETERIZATION was set to FORCED when the plan was compiled.
131072131072
ROWCOUNTROWCOUNT S’applique à : SQL Server 2012SQL Server 2012 à SQL Server 2017SQL Server 2017Applies To: SQL Server 2012SQL Server 2012 to SQL Server 2017SQL Server 2017

262144262144

CurseursCursors

Les curseurs inactifs sont mis en cache dans un plan compilé pour que la mémoire utilisée pour stocker le curseur soit réutilisée par des utilisateurs simultanés des curseurs.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. Par exemple, supposez qu'un lot déclare et utilise un curseur sans le désallouer.For example, suppose that a batch declares and uses a cursor without deallocating it. Si deux utilisateurs exécutent le même lot, il y aura deux curseurs actifs.If there are two users executing the same batch, there will be two active cursors. Une fois les curseurs désalloués (éventuellement dans des lots différents), la mémoire utilisée pour stocker le curseur est mise en cache et n'est pas libérée.Once the cursors are deallocated (potentially in different batches), the memory used to store the cursor is cached and not released. Cette liste des curseurs inactifs est conservée dans le plan compilé.This list of inactive cursors is kept in the compiled plan. À la prochaine exécution du lot par un utilisateur, la mémoire de curseur en cache est réutilisée et initialisée correctement comme curseur actif.The next time a user executes the batch, the cached cursor memory will be reused and initialized appropriately as an active cursor.

Évaluation des options de curseurEvaluating Cursor Options

Pour convertir la valeur retournée dans required_cursor_options et acceptable_cursor_options dans les options ayant servi à compiler le plan, il faut soustraire les valeurs à partir de la valeur de colonne, en commençant par la plus grande valeur possible, jusqu'à ce que vous atteigniez 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. Chaque valeur soustraite correspond à une option de curseur utilisée dans le plan de requête.Each value you subtract corresponds to a cursor option that was used in the query plan.

OptionOption ValeurValue
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
POUR select_statementFOR select_statement 1638416384

ExemplesExamples

A.A. Retour des attributs pour un plan spécifiqueReturning the attributes for a specific plan

L'exemple suivant retourne tous les attributs de plan pour un plan spécifié.The following example returns all plan attributes for a specified plan. Dans la première requête, la vue de gestion dynamique sys.dm_exec_cached_plans est interrogée pour obtenir le descripteur de plan du plan spécifié.The sys.dm_exec_cached_plans dynamic management view is queried first to obtain the plan handle for the specified plan. Dans la deuxième requête, remplacez <plan_handle> par une valeur de descripteur de plan issue de la première requête.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. Retour des options SET pour les plans compilés et du handle SQL pour les plans en cacheReturning the SET options for compiled plans and the SQL handle for cached plans

L'exemple suivant retourne une valeur représentant les options ayant servi à compiler chaque plan.The following example returns a value representing the options that each plan was compiled with. Il retourne également le handle SQL de tous les plans mis en cache.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  

Voir aussiSee Also

Fonctions et vues de gestion dynamique (Transact-SQL) Dynamic Management Views and Functions (Transact-SQL)
Les fonctions et vues de gestion dynamique ( liées à l’exécution 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)