sys.dm_exec_plan_attributes (Transact-SQL)
Retourne une ligne par attribut de plan pour le plan spécifié par le handle de plan. 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.
[!REMARQUE]
Certaines des informations retournées par cette fonction mappent à la vue de compatibilité descendante sys.syscacheobjects.
Syntaxe
sys.dm_exec_plan_attributes ( plan_handle )
Arguments
- plan_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. plan_handle est de type varbinary(64). Le descripteur de plan peut être obtenu dans la vue de gestion dynamique sys.dm_exec_cached_plans.
Table retournée
Nom de la colonne |
Type de données |
Description |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
attribut |
varchar(128) |
Nom de l'attribut associé à ce plan. Un des types suivants :
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
value |
sql_variant |
Valeur de l'attribut associé à ce plan. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
is_cache_key |
bit |
Indique si l'attribut est utilisé comme une partie de la clé de recherche en cache pour le plan. |
Autorisations
Nécessite l'autorisation VIEW SERVER STATE sur le serveur.
Notes
Définir les options
Des copies du même plan compilé peuvent différer uniquement au niveau de la valeur dans la colonne set_options. Cela signifie que des connexions différentes font appel à différents jeux d'options SET pour la même requête. 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.
Évaluation des options définies
Pour traduire la valeur retournée dans set_options dans les options ayant servi à compiler le plan, il faut soustraire les valeurs de la valeur set_options, en commençant par la valeur la plus grande, pour arriver à 0. Chaque valeur soustraite correspond à une option utilisée dans le plan de requête. Par exemple, si la valeur dans set_options est 251, les options utilisées pour compiler le plan sont les suivantes : ANSI_NULL_DFLT_ON (128), QUOTED_IDENTIFIER (64), ANSI_NULLS(32), ANSI_WARNINGS (16), CONCAT_NULL_YIELDS_NULL (8), Parallel Plan(2) et ANSI_PADDING (1).
Option |
Valeur |
---|---|
ANSI_PADDING |
1 |
Plan en parallèle |
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 Indique que le plan n'utilise pas une table de travail pour implémenter une opération FOR BROWSE. |
512 |
TriggerOneRow Indique que le plan contient une optimisation de ligne unique pour les tables delta de déclencheur AFTER. |
1024 |
ResyncQuery Indique que la requête a été soumise par des procédures stockées système internes. |
2048 |
ARITH_ABORT |
4096 |
NUMERIC_ROUNDABORT |
8192 |
DATEFIRST |
16384 |
DATEFORMAT |
32768 |
LanguageID |
65536 |
UPON Indique que l'option de base de données PARAMETERIZATION avait pour valeur FORCED lorsque le plan a été compilé. |
131072 |
Curseurs
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. Par exemple, supposez qu'un lot déclare et utilise un curseur sans le désallouer. Si deux utilisateurs exécutent le même lot, il y aura deux curseurs actifs. 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. Cette liste des curseurs inactifs est conservée dans le plan compilé. À 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.
Évaluation des options de curseur
Pour traduire 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 de la valeur de colonne, en commençant par la valeur la plus grande, pour arriver à 0. Chaque valeur soustraite correspond à une option de curseur utilisée dans le plan de requête.
Option |
Valeur |
---|---|
Aucune |
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 |
Exemples
A.Retour des attributs pour un plan spécifique
L'exemple suivant retourne tous les attributs de plan pour un plan spécifié. 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é. Dans la deuxième requête, remplacez <plan_handle> par une valeur de descripteur de plan issue de la première requête.
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.Retour des options SET pour les plans compilés et du handle SQL pour les plans en cache
L'exemple suivant retourne une valeur représentant les options ayant servi à compiler chaque plan. Il retourne également le handle SQL de tous les plans mis en cache.
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 aussi
Référence
Fonctions et vues de gestion dynamique (Transact-SQL)
Fonctions et vues de gestion dynamique relatives à l'exécution (Transact-SQL)