Partager via


Créer une session d'événements étendus à l'aide de l'éditeur de requête

Vous pouvez créer une session d'événements étendus à l'aide de l'éditeur de requête, ou vous pouvez créer une session dans l'Explorateur d'objets. Dans l'Explorateur d'objets, les événements étendus fournissent deux interfaces utilisateur que vous pouvez utiliser pour créer, modifier et afficher des données de session d'événements : un assistant qui vous guide tout au long du processus de création de la session d'événements et une interface utilisateur de nouvelle session qui fournit des options de configuration plus avancées. Vous pouvez créer des sessions d'événements étendus pour diagnostiquer le suivi SQL Server, qui vous permet de résoudre des problèmes tels que :

  • Rechercher les requêtes les plus onéreuses

  • Rechercher les causes premières d'une contention de verrouillage

  • Rechercher une requête qui bloque d'autres requêtes

  • Remédier à l'utilisation excessive du processeur due à la recompilation de requêtes

  • Résoudre les problèmes de blocages

Pour plus d'informations sur la création d'une session d'événements étendus à l'aide de l'Assistant Nouvelle session, consultez Créer une session d'événements étendus à l'aide de l'Assistant (Explorateur d'objets). Pour plus d'informations sur la création d'une session d'événements étendus à l'aide de l'interface utilisateur Nouvelle session, consultez Créer une session Événements étendus à l'aide de la boîte de dialogue Nouvelle session.

Autorisations

Pour créer une session d'événements étendus, vous devez disposer de l'autorisation ALTER ANY EVENT SESSION.

Création d'une session d'événements étendus à l'aide de l'éditeur de requête

Pour créer une session d'événements étendus

  1. La procédure suivante indique comment créer une session d'événements étendus en utilisant l'Éditeur de requête dans SQL Server Management Studio.

    Déterminez quels événements vous souhaitez utiliser dans la session. Pour consulter tous les événements qui sont disponibles, avec le mot clé et le canal, utilisez la requête suivante :

    [!REMARQUE]

    Pour plus d'informations sur les mots clés et canaux, consultez Packages d'événements étendus SQL Server.

    SELECT p.name, c.event, k.keyword, c.channel, c.description FROM
       (
       SELECT event_package = o.package_guid, o.description, 
       event=c.object_name, channel = v.map_value
       FROM sys.dm_xe_objects o
       LEFT JOIN sys.dm_xe_object_columns c ON o.name = c.object_name
       INNER JOIN sys.dm_xe_map_values v ON c.type_name = v.name 
       AND c.column_value = cast(v.map_key AS nvarchar)
       WHERE object_type = 'event' AND (c.name = 'CHANNEL' or c.name IS NULL)
       ) c LEFT JOIN 
       (
       SELECT event_package = c.object_package_guid, event = c.object_name, 
       keyword = v.map_value
       FROM sys.dm_xe_object_columns c INNER JOIN sys.dm_xe_map_values v 
       ON c.type_name = v.name AND c.column_value = v.map_key 
       AND c.type_package_guid = v.object_package_guid
       INNER JOIN sys.dm_xe_objects o ON o.name = c.object_name 
       AND o.package_guid = c.object_package_guid
       WHERE object_type = 'event' AND c.name = 'KEYWORD' 
       ) k
       ON
       k.event_package = c.event_package AND (k.event=c.event or k.event IS NULL)
       INNER JOIN sys.dm_xe_packages p ON p.guid = c.event_package
    ORDER BY keyword desc, channel, event
    
  2. Dans une nouvelle fenêtre de requête, ajoutez les instructions suivantes afin de créer une session d'événements, en remplaçant session_name par le nom de session à utiliser :

    Important

    Les étapes 2 à 6 de cette procédure décrivent chaque section de la définition de session d'événements. Vous devez ajouter toutes les instructions dans une seule fenêtre de requête avant l'exécution. Pour obtenir un exemple complet, consultez la section Exemple de cette rubrique.

    CREATE EVENT SESSION session_name 
    ON SERVER
    
  3. Ajoutez les événements à surveiller, au format package_name. event_name. Pour chaque événement, ajoutez une ligne semblable à la suivante :

    ADD EVENT package_name.event_name
    

    Par exemple :

    ADD EVENT sqlserver.file_read_completed,
    ADD EVENT sqlserver.file_write_completed
    
  4. (Facultatif) Après avoir ajouté un événement, vous pouvez ajouter des actions à entreprendre. Vous pouvez également ajouter des prédicats. Les prédicats sont utilisés pour établir des critères pour la consommation des informations d'événements par la cible. Les actions sont ajoutées à l'aide d'une clause ACTION, et les prédicats sont ajoutés à l'aide d'une clause WHERE. Par exemple, pour ajouter une action et un prédicat à l'emplacement où le texte Transact-SQL est capturé pour l'événement sqlserver.file_read_completed, où l'ID de fichier correspond à 1, vous devez inclure l'instruction suivante :

    ADD EVENT sqlserver.file_read_completed
       (ACTION (sqlserver.sql_text)
       WHERE file_id = 1),
    
    • Pour afficher les actions disponibles, utilisez la requête suivante :

      SELECT p.name AS 'package_name', xo.name AS 'action_name', xo.description, xo.object_type
      FROM sys.dm_xe_objects AS xo
      JOIN sys.dm_xe_packages AS p
         ON xo.package_guid = p.guid
      WHERE xo.object_type = 'action'
      AND (xo.capabilities & 1 = 0 
      OR xo.capabilities IS NULL)
      ORDER BY p.name, xo.name
      
    • Pour afficher les prédicats disponibles pour un événement, utilisez la requête suivante, en remplaçant event_name par le nom de l'événement pour lequel vous souhaitez ajouter un prédicat :

      SELECT *
      FROM sys.dm_xe_object_columns
      WHERE object_name = 'event_name'
      AND column_type = 'data'
      

      Par exemple :

      SELECT * 
      FROM sys.dm_xe_object_columns 
      WHERE object_name = 'file_read_completed'
      AND column_type = 'data'
      

      Sachez que vous pouvez également ajouter des sources de prédicat globales. Une source de prédicat globale peut être utilisée dans toute expression de prédicat. Pour afficher les sources de prédicat globales disponibles, utilisez la requête suivante :

      SELECT p.name AS package_name, xo.name AS predicate_name
         , xo.description, xo.object_type
      FROM sys.dm_xe_objects AS xo
      JOIN sys.dm_xe_packages AS p
         ON xo.package_guid = p.guid
      WHERE xo.object_type = 'pred_source'
      ORDER BY p.name, xo.name
      

      Par exemple, vous pouvez utiliser l'expression de prédicat suivante pour spécifier que les données doivent uniquement être collectées pour un événement les cinq premières fois qu'un événement se produit.

      WHERE package0.counter <= 5
      
  5. Ajoutez la cible souhaitée, où les données d'événement seront traitées et consommées. Utilisez le format suivant :

    ADD TARGET package_name.target_name
    

    L'exemple suivant ajoute la cible de fichier asynchrone :

    ADD TARGET package0.asynchronous_file_target
       (SET filename = 'c:\temp\xelog.xel', metadatafile = 'c:\temp\xelog.xem')
    

    Pour consulter la liste de cibles disponibles, utilisez la requête suivante :

    SELECT p.name AS 'package_name', xo.name AS 'target_name'
       , xo.description, xo.object_type 
    FROM sys.dm_xe_objects AS xo
    JOIN sys.dm_xe_packages AS p
       ON xo.package_guid = p.guid
    WHERE xo.object_type = 'target'
    AND (xo.capabilities & 1 = 0
    OR xo.capabilities IS NULL)
    ORDER BY p.name, xo.name
    

    [!REMARQUE]

    Pour plus d'informations sur les différents types de cibles, consultez Cibles des Événements étendus SQL Server.

  6. Examinez et ajoutez toutes options de configuration supplémentaires. Par exemple, vous pouvez configurer des options telles que le mode de rétention d'événement, le mode de mise en mémoire tampon des longs événements, ou si la session d'événements doit démarrer automatiquement au démarrage de SQL Server. Les options sont décrites dans la rubrique ALTER EVENT SESSION (Transact-SQL). Sachez que les valeurs par défaut sont affectées si ces options ne sont pas spécifiées.

  7. Démarrez la session.

    [!REMARQUE]

    Pour plus d'informations sur la consultation des résultats de session, consultez la rubrique correspondante pour le type de cible que vous avez utilisé dans le nœud Cibles des Événements étendus SQL Server de la documentation en ligne.

L'exemple suivant crée une session d'événements étendus nommée IOActivity qui capture les informations suivantes :

  • des données d'événement pour les lectures de fichier achevées, notamment le texte Transact-SQL associé pour les lectures de fichier où l'ID de fichier correspond à 1 ;

  • des données d'événement pour les écritures de fichier achevées ;

  • des données d'événement relatives à l'écriture des données du cache du journal dans le fichier journal physique ;

La session envoie la sortie à une cible de fichier.

CREATE EVENT SESSION IOActivity
ON SERVER

ADD EVENT sqlserver.file_read_completed
   (
   ACTION (sqlserver.sql_text)
   WHERE file_id = 1),
ADD EVENT sqlserver.file_write_completed,
ADD EVENT sqlserver.databases_log_flush

ADD TARGET package0.asynchronous_file_target 
   (SET filename = 'c:\temp\xelog.xel', metadatafile = 'c:\temp\xelog.xem')

Voir aussi

Référence

CREATE EVENT SESSION (Transact-SQL)

Concepts

Cibles des Événements étendus SQL Server

Packages d'événements étendus SQL Server