Cibles des Événements étendus SQL Server
Les cibles des Événements étendus SQL Server sont des consommateurs d'événements. Les cibles peuvent écrire dans un fichier, agréger des données d'événement ou démarrer une tâche associée à un événement. Les cibles peuvent traiter des données de façon synchrone ou asynchrone.
La conception des Événements étendus garantit que les cibles sont assurées de recevoir des événements une seule fois par session.
Les Événements étendus fournissent les cibles suivantes que vous pouvez utiliser pour une session Événements étendus :
Création de compartiments d'événements
À utiliser pour comptabiliser le nombre d'occurrences d'un événement donné, en fonction d'une colonne d'événement ou d'une action définie.
Appariement d'événements
De nombreux événements surviennent sous forme de paires, tels que les acquisitions et les libérations de verrous. Permet de savoir si un événement jumelé n'entre pas dans le cadre d'une correspondance.
Suivi d'événements pour Windows (ETW)
Permet de mettre en corrélation les événements SQL Server avec les données d'événement du système d'exploitation Windows ou des applications.
Fichier d'événements
Permet d'enregistrer sur le disque les résultats d'une session d'événements stockés en mémoire tampon.
Compteur d'événements synchrone
Permet de comptabiliser tous les événements qui surviennent au cours d'une session Événements étendus. Permet d'obtenir des informations sur les caractéristiques de charge de travail sans ajouter la surcharge de la collecte d'événements complète.
Mémoire tampon en anneau
Permet de conserver les événements en mémoire selon le principe FIFO (premier entré/premier sorti) ou au cas par cas.
Les cibles peuvent être des fichiers ou des segments de mémoire.
La cible de fichier et les cibles ETW sont considérées comme des cibles de fichiers.
Les événements compartimentés, les événements jumelés, le compteur d'événements synchrones et les cibles de mémoire tampon en anneau sont des cibles stockées en mémoire. Les données sont enregistrées dans la mémoire tampon de la session (la colonne données_cibles dans la vue de gestion dynamique sys.dm_xe_session_targets).
Notez bien que lorsque vous interrompez une session faisant intervenir une cible en mémoire, les informations stockées en mémoire tampon au cours de cette session ne sont pas conservées. Si vous souhaitez accéder aux données d'un événement après avoir interrompu une session, vous devez configurer la session pour pouvoir utiliser un fichier cible (recommandé) ou enregistrer les données avant de mettre fin à la session.
Suivez les instructions ci-après pour sélectionner la cible que vous comptez utiliser.
Cible |
Utilisation recommandée |
---|---|
Cible de fichier d'événements ou ETW |
Utilisez une cible de fichier lorsqu'au moins une des conditions suivantes est vraie :
|
Cible de mémoire tampon en anneau |
Utilisez une cible de mémoire tampon en anneau lorsqu'au moins une des conditions suivantes est vraie :
|
Création d'une cible d'événements compartimentés, d'une cible d'événements jumelés ou d'une cible de compteur d'événements synchrones |
Utilisez une cible en mémoire lorsqu'au moins une des conditions suivantes est vraie :
|
Cible de création de compartiments d'événements
Une cible de création de compartiments d'événements regroupe les occurrences d'un type d'événement spécifique en fonction de données d'événement. Un « compartiment » est un regroupement d'événements comptés en fonction d'une colonne d'événement ou d'une action. Vous pouvez utiliser la cible de création de compartiments d'événements 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 de création de compartiments d'événements.
Option |
Valeurs autorisées |
Description |
---|---|---|
slots |
Toute valeur entière. Cette valeur est facultative. |
Une valeur spécifiée par l'utilisateur qui indique le nombre maximal de compartiments à conserver. Lorsque cette valeur est atteinte, les nouveaux événements qui n'appartiennent pas aux compartiments existants sont ignorés. |
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 :
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 :
|
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 :
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 de création de compartiments d'événements collecte les données. Dans cet exemple, vous utilisez la cible de création de compartiments d'événements pour compter le nombre d'attentes de chaque type d'attente. Pour ce faire, spécifiez les options suivantes lorsque vous définissez la cible de création de compartiments d'événements :
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 |
réseau |
wait_info |
réseau |
wait_info |
veille |
Les valeurs de type d'attente sont catégorisées en compartiments, avec les valeurs et nombres d'emplacements suivants :
Valeur |
Nombre d'emplacements |
---|---|
file_io |
2 |
réseau |
2 |
veille |
1 |
Pour plus d'informations sur la syntaxe de la cible de création de compartiments d'événements, consultez Procédure : surveiller l'activité système à l'aide d'événements étendus.
La cible de création de compartiments 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.
La cible de création de compartiments applique en série les données à un programme ou une procédure d'appel dans le format XML.
Notes
La sortie de création de compartiments n'est conforme à aucun schéma.
L'exemple suivant illustre le format de sortie de la cible de création de compartiments.
<Slots truncated = "0" buckets=[count]>
<Slot count=[count] trunc=[truncated bytes]>
<value>
</value>
</Slot>
</Slots>
Cible d'appariement d'événements
La cible d'appariement d'événements correspond à deux événements qui utilisent une ou plusieurs colonnes de données qui sont présentes dans chaque événement. De nombreux événements se présentent sous forme de paires, tels que les acquisitions et les libérations de verrous. Une fois qu'une séquence d'événement a été couplée, les deux événements sont ignorés. Ignorer des jeux correspondants permet de détecter facilement les acquisitions de verrous qui n'ont pas été libérées.
Grâce aux filtres au niveau des événements, la cible d'appariement peut être utilisée pour capturer uniquement les événements qui ne correspondent pas aux critères prédéfinis.
Lorsque vous utilisez la cible d'appariement d'événements, vous êtes autorisé à choisir deux événements à associer, ainsi qu'une séquence de colonnes sur lesquelles s'effectuera la correspondance. Toutes les colonnes dans cette séquence doivent être du même type.
Le tableau suivant décrit les options disponibles pour configurer l'appariement d'événements.
Option |
Valeurs autorisées |
Description |
---|---|---|
begin_event |
Tout nom d'événement qui est présent dans la session active. |
Le nom d'événement qui spécifie l'événement de début dans une séquence couplée. |
end_event |
Tout nom d'événement présent dans la session active. |
Le nom d'événement qui spécifie l'événement de fin dans une séquence couplée. |
begin_matching_columns |
Une liste ordonnée de noms de colonnes séparés par des virgules. |
Les colonnes sur lesquelles effectuer la correspondance. |
end_matching_columns |
Une liste ordonnée de noms de colonnes séparés par des virgules. |
Les colonnes sur lesquelles effectuer la correspondance. |
begin_matching_actions |
Liste ordonnée d'actions séparées par des virgules. |
Actions sur lesquelles effectuer la correspondance. |
end_matching_actions |
Liste ordonnée d'actions séparées par des virgules. |
Actions sur lesquelles effectuer la correspondance. |
respond_to_memory_pressure |
Une des valeurs suivantes :
|
La réponse cible aux événements de mémoire. Si la valeur spécifiée est 1 et que la mémoire du serveur est insuffisante, les informations non couplées qui sont conservées sont supprimées. |
Toutes les données associées à un événement sont capturées et stockées pour un appariement futur. De plus, les données ajoutées par les actions sont également collectées. Les données d'événement collectées sont stockées en mémoire et, comme telles, ont une limite finie. Cette limite est basée sur la capacité et l'activité du système. Plutôt que prendre la quantité maximale de mémoire à utiliser comme paramètre, la quantité de mémoire utilisée sera basée sur les ressources système disponibles. Lorsque celles-ci ne sont pas disponibles, les événements non couplés qui ont été conservés seront supprimés. Si un événement n'a pas été couplé et est supprimé, l'événement correspondant apparaîtra comme un événement non couplé.
La cible d'appariement applique en série des événements non couplés à un format XML. Ce format n'est conforme à aucun schéma. Le format contient uniquement deux types d'éléments. L'élément <unpaired> est la racine, suivi par un élément <event> pour chaque événement non couplé qui fait actuellement l'objet d'un suivi. L'élément <event> contient un attribut qui contient le nom de l'événement non couplé.
L'exemple suivant illustre le format de sortie de la cible d'appariement.
<unpaired truncated = "0" matchedCount = "[matched count]" memoryPressureDroppedCount = " [lost count]">
<event name = "[event name]" package = "[package]" id= "[event ID value]" version = "[event version]">
<data name = "[column name]">
<type name = "[column type]" package = "[type package]" />
<value>[column value]</value>
<text value>[text value]</text>>
</data>
</event>
</unpaired>
Cible du suivi d'événements pour Windows
Avant d'utiliser le suivi d'événements pour Windows (ETW) comme cible, il est recommandé de posséder une connaissance pratique du Suivi d'événements pour Windows. Le suivi ETW est utilisé conjointement avec les Événements étendus ou en tant que consommateur d'événements des Événements étendus. Les liens externes suivants fournissent un point de départ pour obtenir des informations générales sur le suivi ETW :
Les événements étendus prennent en charge la version Windows XP et Windows Server 2003 d'ETW. La cible du suivi ETW est une cible singleton, bien qu'elle puisse être ajoutée à plusieurs sessions. Si un événement est déclenché sur plusieurs sessions, l'événement sera propagé uniquement à la cible ETW une fois par occurrence de l'événement. Le moteur des Événements étendus est limité à une seule instance par processus.
Important
Pour pouvoir utiliser la cible du suivi ETW, le compte de démarrage du service SQL Server doit être membre du groupe Utilisateurs du journal de performances.
La configuration des événements présents dans une session ETW est contrôlée par le processus qui héberge le moteur des Événements étendus. Le moteur contrôle quels événements déclencher et quelles conditions doivent être respectées pour qu'un événement se déclenche.
Après avoir créé une liaison à une session Événements étendus, ce qui joint la cible ETW pour la première fois pendant la durée de vie d'un processus, la cible ETW ouvre une session ETW unique sur le fournisseur SQL Server. Si une session ETW existe déjà, la cible ETW obtient une référence à la session existante. Cette session ETW est partagée sur toutes les instances de SQL Server sur un ordinateur donné. Cette session ETW reçoit tous les événements à partir des sessions qui possèdent la cible ETW.
Comme ETW a besoin de fournisseurs pour pouvoir consommer des événements et les transmettre en aval au suivi ETW, tous les packages des Événements étendus sont activés sur la session. Lorsqu'un événement est déclenché, la cible ETW envoie l'événement à la session sur laquelle le fournisseur pour l'événement est activé.
La cible ETW prend en charge la publication synchrone d'événements sur le thread qui déclenche l'événement. Cependant, la cible ETW ne prend pas en charge la publication asynchrone d'événements.
La cible ETW ne prend pas en charge le contrôle à partir de contrôleurs ETW externes tels que logman.exe. Pour produire des traces ETW, une session d'événements doit être créée avec la cible ETW. Pour plus d'informations, consultez CREATE EVENT SESSION (Transact-SQL).
Notes
L'activation de la cible ETW crée une session ETW nommée XE_DEFAULT_ETW_SESSION. Si une session XE_DEFAULT_ETW_SESSION existe déjà, elle est utilisée sans modifier la moindre propriété de la session existante. La session XE_DEFAULT_ETW_SESSION est partagée entre toutes les instances de SQL Server. Après avoir démarré XE_DEFAULT_ETW_SESSION, vous devez l'arrêter à l'aide d'un contrôleur ETW, tel que l'outil Logman. Par exemple, vous pouvez exécuter la commande suivante à l'invite de commandes : logman stop XE_DEFAULT_ETW_SESSION -ets.
Le tableau suivant décrit les options disponibles pour configurer la cible ETW.
Option |
Valeurs autorisées |
Description |
---|---|---|
default_xe_session_name |
Toute chaîne incluant jusqu'à 256 caractères. Cette valeur est facultative. |
Nom de la session Événements étendus. Par défaut, il s'agit de XESESSION0_4B7A5EC6-37EF-4d4c-81EC-13C547B9AC46. |
default_etw_session_logfile_path |
Toute chaîne incluant jusqu'à 256 caractères. Cette valeur est facultative. |
Chemin d'accès au fichier journal pour la session Événements étendus. Par défaut, il s'agit de %TEMP%\ XEEtw.etl. |
default_etw_session_logfile_size_mb |
Entier quelconque non signé. Cette valeur est facultative. |
Taille du fichier journal, en mégaoctets (Mo), de la session Événements étendus. La valeur par défaut est 20 Mo. |
default_etw_session_buffer_size_kb |
Entier quelconque non signé. Cette valeur est facultative. |
Taille des tampons en mémoire, en kilo-octets (Ko), pour la session Événements étendus. La valeur par défaut est 128 Ko. |
retries |
Entier quelconque non signé. |
Nombre de nouvelles tentatives de publication de l'événement dans le sous-système ETW avant la suppression de l'événement. La valeur par défaut est 0. |
La configuration des paramètres précédents est facultative. La cible ETW utilise les valeurs par défaut de ces paramètres.
La cible ETW est chargée des opérations suivantes :
Création de la session ETW par défaut.
Enregistrement de tous les packages des Événements étendus auprès d'ETW. Cela garantit que les événements ne seront pas supprimés par ETW.
Gestion de l'envoi du flux d'événements à ETW. La cible ETW crée un événement ETW avec les données des Événements étendus et l'envoie à la session ETW appropriée. Si l'événement est plus grand que la taille de la mémoire tampon ou si les données ne peuvent pas s'ajuster dans un événement ETW, le suivi ETW fractionne l'événement en fragments.
Conservation des packages des Événements étendus activés à tout instant.
Les emplacements de fichier par défaut suivants sont utilisés par ETW :
Le fichier de sortie ETW se trouve dans %TEMP%\XEEtw.etl.
Important
Le chemin d'accès ne peut pas être modifié une fois la première session démarrée.
Les fichiers MOF (Managed Object Format) se trouvent dans le dossier <votre dossier d'installation>\Microsoft SQL Server\Shared. Pour plus d'informations, consultez Format d'objet managé sur MSDN (en anglais).
Cible de fichier d'événements
La cible de fichier d'événements est une cible asynchrone qui écrit des mémoires tampon complètes sur disque. La cible de fichier crée deux types de fichiers, journal et métadonnées. Le fichier de métadonnées décrit le contenu des événements présents dans le fichier journal de sortie cible. Cela permet une analyse correcte de tous les événements dans le fichier journal, ainsi que l'analyse des données d'action associées à un événement.
Pour utiliser cette cible, vous devez spécifier les noms des emplacements du fichier journal et du fichier de métadonnées. Les autres options de configuration, telles que la taille de fichier et les caractéristiques de croissance, sont facultatives.
Le tableau ci-dessous décrit les options disponibles pour configurer la cible de fichier d'événements.
Option |
Valeurs autorisées |
Description |
---|---|---|
filename |
Toute chaîne incluant jusqu'à 260 caractères. Cette valeur est requise. |
Emplacement et nom du fichier. Vous pouvez utiliser toute extension de nom de fichier. |
max_file_size |
Entier quelconque de 64 bits. Cette valeur est facultative. |
Taille maximale du fichier, en mégaoctets (Mo). Si l'option max_file_size n'est pas spécifiée, la taille du fichier augmente jusqu'à ce que le disque soit saturé. La taille de fichier par défaut est 1 Go. max_file_size doit être supérieure à la taille actuelle des tampons de session. Si ce n'est pas le cas, la cible de fichier ne pourra pas s'initialiser, et indiquera que max_file_size n'est pas valide. Pour afficher la taille actuelle des tampons, interrogez la colonne buffer_size dans la vue de gestion dynamique sys.dm_xe_sessions. Si la taille de fichier par défaut est plus petite que la taille de la mémoire tampon de session, nous vous recommandons d'affecter à max_file_size la valeur spécifiée dans la colonne max_memory dans l'affichage catalogue sys.server_event_sessions. Lorsque max_file_size a une taille plus grande que la taille des tampons de session, cette valeur peut être arrondie au multiple le plus proche de la taille de la mémoire tampon de session. Cela peut créer un fichier cible qui est plus petit que la valeur spécifiée de max_file_size. Par exemple, si la taille de la mémoire tampon est de 100 Mo et que max_file_size a la valeur 150 Mo, la taille de fichier résultante est arrondie à 100 Mo parce qu'une deuxième mémoire tampon ne tiendrait pas dans l'espace de 50 Mo restant. Si la taille de fichier par défaut est plus petite que la taille de la mémoire tampon de session, nous vous recommandons d'affecter à max_file_size la valeur figurant dans la colonne max_memory dans l'affichage catalogue sys.server_event_sessions. |
max_rollover_files |
Entier quelconque de 32 bits. Cette valeur est facultative. |
Nombre maximal de fichiers à conserver dans le système de fichiers. |
increment |
Entier quelconque de 32 bits. Cette valeur est facultative. |
Croissance incrémentielle, en mégaoctets (Mo), pour le fichier. Si cette option n'est pas spécifiée, la valeur par défaut pour l'incrément est égale à deux fois la taille de la mémoire tampon de session. |
metadatafile |
Toute chaîne incluant jusqu'à 260 caractères. Cette valeur est requise. |
Emplacement et nom des métadonnées pour le fichier. |
La première fois qu'une cible de fichier est créée, le nom de fichier que vous spécifiez est ajouté avec 0 et une valeur d'entier long. La valeur entière est calculée en tant que nombre de millisecondes écoulées entre le 1er janvier 1600 et la date et l'heure de création du fichier. Les fichiers de substitution suivants utilisent également ce format. En examinant la valeur de l'entier long, vous pouvez déterminer le fichier le plus actuel. L'exemple suivant illustre comment les fichiers sont nommés dans un scénario où vous spécifiez l'option de nom de fichier comme C:\OutputFiles\MyOutput.xel :
premier fichier créé - C:\OutputFiles\MyOutput_0_128500310259380000.xel
premier fichier de substitution - C:\OutputFiles\MyOutput_0_128505831770890000.xel
deuxième fichier de substitution - C:\OutputFiles\MyOutput_0_132410772966237000.xel
Cible de compteur d'événements synchrone
La cible de compteur d'événements synchrone compte tous les événements qui se déclenchent au cours d'une session Événements étendus. Elle vous permet d'obtenir des informations sur les caractéristiques de charge de travail sans ajouter la surcharge de la collecte d'événements complète. Cette cible n'a aucun paramètre personnalisable.
L'exemple suivant illustre la sortie de la cible de compteur d'événements synchrone.
<CounterTarget truncated = "0">
<Packages>
<Package name = "[package name]">
<Event name = "[event name]" count = "[number]" />
</Package>
</Packages>
</CounterTarget>
Cible de mémoire tampon en anneau
La cible de mémoire tampon en anneau maintient brièvement les données d'événements en mémoire. Cette cible peut gérer des événements dans deux modes différents.
Le premier mode est le mode FIFO strict (premier entré, premier sorti), où l'événement le plus ancien est supprimé lorsque toute la mémoire allouée à la cible est utilisée. Dans ce mode (par défaut), l'option occurrence_number a la valeur 0.
Le deuxième mode est le mode FIFO par événement, où un nombre spécifié d'événements de chaque type est conservé. Dans ce mode, les événements les plus anciens de chaque type sont supprimés lorsque toute la mémoire allouée à la cible est utilisée. Vous pouvez configurer l'option occurrence_number pour spécifier le nombre d'événements de chaque type à conserver.
Le tableau suivant décrit les options disponibles pour configurer la cible de mémoire tampon en anneau.
Option |
Valeurs autorisées |
Description |
---|---|---|
default_memory |
Entier quelconque de 32 bits. Cette valeur est facultative. |
Quantité de mémoire maximale, en kilo-octet (Ko), à utiliser. Les événements existants sont supprimés lorsque cette valeur est atteinte. |
occurrence_number |
Une des valeurs suivantes :
Cette valeur est facultative. |
Le mode FIFO à utiliser, s'il est défini a une valeur supérieur à 0, le nombre d'événements préférés de chaque type à conserver dans la mémoire tampon. |
L'exemple suivant illustre la sortie de la cible de mémoire tampon en anneau.
<RingBufferTarget eventsPerSec="" processingTime="" totalEventsProcessed="" eventCount="" droppedCount="" memoryUsed="">
<event name="" package="" id="" version="" timestamp="">
<data name="">
<type name="" package="" />
<value></value>
<text></text>
</data>
<action name="" package="">
<type name="" package="" />
<value></value>
<text></text>
</action>
</event>
</RingBufferTarget>