Partager via


Cible d'histogramme

Une cible d'histogramme regroupe les occurrences d'un type d'événement spécifique en fonction de données d'événement. Les regroupements d'événements sont comptabilisés en fonction d'une colonne d'événement ou d'une action spécifiée. Vous pouvez utiliser la cible d'histogramme pour résoudre les problèmes de performance. En identifiant les événements qui se produisent le plus souvent, vous pouvez trouver des « zones réactives » qui indiquent la cause probable d'un problème de performance.

Le tableau suivant décrit les options pouvant être utilisées pour configurer la cible d'histogramme.

Option Valeurs autorisées Description
slots Toute valeur entière. Cette valeur est facultative. Valeur spécifiée par l'utilisateur qui indique le nombre maximal de regroupements à conserver. Lorsque cette valeur est atteinte, les nouveaux événements qui n'appartiennent pas aux groupes existants sont ignorés.

Notez que pour améliorer les performances, le numéro d'emplacement est arrondi à la puissance suivante de 2.
filtering_event_name Tout événement présent dans la session Événements étendus. Cette valeur est facultative. Une valeur spécifiée par l'utilisateur qui permet d'identifier une classe d'événements. Seules les instances de l'événement spécifié sont placées dans un compartiment. Tous les autres événements sont ignorés.

Si vous spécifiez cette valeur, vous devez utiliser le format nom_package.nom_événement, par exemple 'sqlserver.checkpoint_end'. Vous pouvez identifier le nom du package à l'aide de la requête suivante :

SELECT p.name, se.event_name
FROM sys.dm_xe_session_events se
JOIN sys.dm_xe_packages p
ON se_event_package_guid = p.guid
ORDER BY p.name, se.event_name



Si vous ne spécifiez pas la valeur filtering_event_name, source_type doit avoir la valeur 1 (valeur par défaut).
source_type Type d'objet sur lequel le compartiment est basé. Cette valeur est facultative et a la valeur par défaut 1 si elle n'est pas spécifiée. Peut avoir l'une des valeurs suivantes :

0 pour un événement

1 pour une action
source Colonne d'événement ou nom d'action. La colonne d'événement ou le nom d'action utilisé(e) comme source de données.

Lorsque vous spécifiez une colonne d'événement pour la source, vous devez spécifier une colonne à partir de l'événement qui est utilisé pour la valeur filtering_event_name. Vous pouvez identifier les colonnes possibles à l'aide de la requête suivante :

SELECT name FROM sys.dm_xe_object_columns
WHERE object_name = '<eventname>'
AND column_type != 'readonly'

Lorsque vous spécifiez une colonne d'événement pour la source, il n'est pas nécessaire d'inclure le nom du package dans la valeur de la source.

Lorsque vous spécifiez un nom d'action pour la source, vous devez utiliser l'une des actions configurées pour la collection dans la session d'événements pour laquelle cette cible est utilisée. Pour trouver les valeurs possibles pour le nom d'action, vous pouvez interroger la colonne action_name de la vue sys.dm_xe_sesssion_event_actions.

Si vous utilisez un nom d’action comme source de données, vous devez spécifier la valeur de la source en utilisant le format nom_package.nom_action.

L'exemple suivant montre globalement comment la cible d'histogramme collecte les données. Dans cet exemple, vous utilisez la cible d'histogramme pour comptabiliser le nombre d'attentes de chaque type d'attente. Pour ce faire, spécifiez les options suivantes lorsque vous définissez la cible d'histogramme :

  • filtering_event_name = 'wait_info'

  • source = 'wait_type'

  • source_type = 0 (car wait_type est une colonne d'événement)

Dans ce scénario d'exemple, les données suivantes sont enregistrées pour la source wait_type.

Nom de l'événement de filtrage Valeur de la colonne source
wait_info file_io
wait_info file_io
wait_info network
wait_info network
wait_info sleep

Les valeurs de type d'attente doivent être catégorisées dans trois emplacements, avec les valeurs et nombres d'emplacements suivants :

Valeur Nombre d'emplacements
file_io 2
network 2
sleep 1

La cible d'histogramme conserve seulement les données d'événement pour la source spécifiée. Dans certains cas, les données d'événement peuvent être trop volumineuses pour être conservées complètement, auxquels cas les données sont tronquées. Lorsque des données d'événement sont tronquées, le nombre d'octets est enregistré et affiché comme sortie XML.

Ajout de la cible à une session

Pour ajouter la cible d'histogramme à une session Événements étendus lorsque vous créez ou modifiez une session d'événements, vous devez inclure l'une des instructions suivantes, selon le type de cible désiré :

ADD TARGET package0.histogram  

Vous pouvez utiliser l'instruction SET pour définir les différentes options. L’exemple suivant montre l’ajout de la cible d’histogramme, dans laquelle les données de l’événement sqlserver.checkpoint_end sont recueillies.

ADD TARGET package0.histogram  
(SET slots = 32, filtering_event_name = 'sqlserver.checkpoint_end', source_type = 0, source = 'database_id')  

Pour plus d’informations, consultez Trouver les objets comportant le plus de verrouset Surveiller l’activité système à l’aide d’événements étendus.

Vérification de la sortie cible

La cible d'histogramme applique en série les données à une procédure ou un programme appelant au format XML. La sortie cible n'est conforme à aucun schéma.

Pour vérifier la sortie de la cible d’histogramme, vous pouvez utiliser la requête suivante, en remplaçant nom_session par le nom de la session d’événements.

SELECT name, target_name, CAST(xet.target_data AS xml)  
FROM sys.dm_xe_session_targets AS xet  
JOIN sys.dm_xe_sessions AS xe  
   ON (xe.address = xet.event_session_address)  
WHERE xe.name = 'session_name'  

L'exemple suivant illustre le format de sortie de la cible d'histogramme.

<Slots truncated = "0" buckets=[count]>  
    <Slot count=[count] trunc=[truncated bytes]>  
        <value>  
        </value>  
    </Slot>  
</Slots>  

Voir aussi

Cibles des Événements étendus SQL Server
sys.dm_xe_session_targets (Transact-SQL)
CREATE EVENT SESSION (Transact-SQL)
ALTER EVENT SESSION (Transact-SQL)