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 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 session d’événements et une interface utilisateur 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 en utilisant l’interface utilisateur de 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 montre comment créer une session d’événements étendus à l’aide de É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 :

    Notes

    Pour plus d’informations sur les mots clés et les 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 pour 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 où le texte Transact-SQL est capturé pour l’événement sqlserver.file_read_completed, où l’ID de fichier est égal à 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  
    

    Notes

    Pour plus d’informations sur les différents types de cible, 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 des événements, la durée pendant laquelle les événements sont mis en mémoire tampon 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). N’oubliez pas que les valeurs par défaut sont affectées si ces options ne sont pas spécifiées.

  7. Démarrez la session.

    Notes

    Pour plus d’informations sur la consultation des résultats de session, reportez-vous à la rubrique correspondant au 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 :

  • Données d’événement pour les lectures de fichiers terminées, y compris le texte Transact-SQL associé pour les lectures de fichiers où l’ID de fichier est égal à 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

CREATE EVENT SESSION (Transact-SQL)
Cibles des Événements étendus SQL Server
Packages d’événements étendus SQL Server