Partager via


sys.dm_exec_plan_attributes

Mis à jour : 12 décembre 2006

Retourne une ligne par attribut de plan pour le plan spécifié par le descripteur 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.

ms189472.note(fr-fr,SQL.90).gifRemarque :
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 univoque un plan de requête pour un lot exécuté et dont le plan réside dans la mémoire cache de 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.

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. Pour plus d'informations, consultez Recommandations pour le paramétrage des requêtes.

É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 Value

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 déclencheurs AFTER et INSTEAD OF. Cela signifie que si une seule ligne est affectée dans les tables inserted ou deleted, cette option est définie. S'applique aux déclencheurs Transact-SQL et aux déclencheurs CLR qui fournissent un accès aux données in-process.

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 Value

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

Autorisations

Nécessite l'autorisation VIEW SERVER STATE sur le serveur.

Table renvoyée

Nom de la colonne

Type de données

Description

attribute

varchar(128)

Nom de l'attribut associé à ce plan. Il peut s'agir :

Attribute

Type de données

Description

set_optionsintIndique les valeurs d'option ayant servi à compiler le plan.

objectidintUne des clés principales servant à rechercher un objet dans le cache. ID d'objet stocké dans sys.objects pour des objets de base de données (procédures, vues, déclencheurs, etc.). Pour des plans de type « Adhoc » ou « Prepared », il s'agit d'un hachage interne du texte du lot.

dbidintID de la base de données où réside l'entité à laquelle est destinée le plan. 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.

dbid_executeintPour des objets système stockés dans la base de données Resource, ID de base de données à partir duquel est exécuté le plan en cache. Pour tous les autres cas, la valeur est zéro.

user_idintID du schéma contenant l'objet. 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. Cette méthode est recommandée.

language_idsmallintID de la langue de la connexion qui a créé l'objet dans le cache. Pour plus d'informations, consultez sys.syslanguages (Transact-SQL).

date_formatsmallintFormat de date de la connexion qui a créé l'objet dans le cache Pour plus d'informations, consultez SET DATEFORMAT (Transact-SQL).

date_firsttinyintValeur date first. Pour plus d'informations, consultez SET DATEFIRST (Transact-SQL).

étatintBits d'état interne qui font partie de la clé de recherche en cache.

required_cursor_optionsintOptions de curseur spécifiées par l'utilisateur (type de curseur par exemple).

acceptable_cursor_optionsintOptions de curseur dans lesquelles SQL Server peut convertir implicitement afin de prendre en charge l'exécution de l'instruction. 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. Pour plus d'informations, consultez Utilisation des conversions implicites de curseurs.

inuse_exec_contextintNombre de lots en cours d'exécution qui font appel au plan de requête. Pour plus d'informations sur les contextes d'exécution et les plans de requête, consultez Mise en mémoire cache et réutilisation du plan d'exécution.

free_exec_contextintNombre de contextes d'exécution en cache pour le plan de requête qui ne sont pas actuellement utilisés.

hits_exec_contextintNombre d'obtention et de réutilisation du contexte d'exécution à partir du cache du plan évitant ainsi de recompiler l'instruction SQL. La valeur est une agrégation de toutes les exécutions de lot jusqu'à présent.

misses_exec_contextintNombre 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.

removed_exec_contextintNombre de contextes d'exécution ayant été supprimés en raison d'une mémoire insuffisante dans le plan en cache.

inuse_cursorsintNombre de lots en cours d'exécution contenant un ou plusieurs curseurs qui font appel au plan en cache.

free_cursorsintNombre de curseurs libres ou inactifs du plan en cache.

hits_cursorsintNombre d'obtention et de réutilisation d'un curseur inactif à partir du plan en cache. La valeur est une agrégation de toutes les exécutions de lot jusqu'à présent.

misses_cursorsintNombre de fois où un curseur inactif était introuvable dans le cache.

removed_cursorsintNombre de curseurs ayant été supprimés en raison d'une mémoire insuffisante dans le plan en cache.

sql_handlevarbinary(64)Handle SQL du lot.

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.

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. De plus, le texte SQL et le handle SQL sont retournés.

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

Voir aussi

Référence

Fonctions et vues de gestion dynamique
Fonctions et vues de gestion dynamique liées à l'exécution
sys.dm_exec_cached_plans
sys.databases (Transact-SQL)
sys.objects (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

12 décembre 2006

Nouveau contenu :
  • Énumération des attributs retournés dans la colonne Attribute.
  • Ajout des sections Notes et Exemples.