Partager via


SELECT et JOIN des vues système pour les événements étendus

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de données SQL dans Microsoft Fabric

Cet article explique les deux ensembles de vues système liées aux événements étendus. L’article explique :

  • Guide pratique pour JOIN différentes vues système.
  • Comment extraire certains types d'informations des vues système à SELECT.

Il existe deux ensembles de vues système pour Extended Events :

Affichages catalogue

  • Ces vues stockent des informations sur la définition de chaque session d’événements créée par CREATE EVENT SESSION (Transact-SQL). Ces vues ignorent si une session a démarré.
    • Par exemple, si l’Explorateur d’objets SSMS n’affiche pas que aucune session d’événements n’est définie, effectuer une sélection à partir de la vue sys.server_event_session_targets retournerait zéro ligne.
  • La plupart des exemples sont écrits pour SQL Server et Azure SQL Managed Instance. Toutefois, avec des modifications mineures, elles s’exécuteraient sur Azure SQL Database et sur une base de données SQL dans Fabric en modifiant le nom de la DMV de server à database :
    • sys.server_event_session* est le préfixe de nom sur SQL Server et Azure SQL Managed Instance.
    • sys.database_event_session* est le préfixe de nom sur Azure SQL Database et la base de données SQL dans Fabric.
    • Pour plus d’informations sur chacun d’eux, consultez vues catalogue des événements étendus.

Vues de gestion dynamique (DMVs)

  • Elles stockent des informations sur l’ activité en cours des sessions d’événements en cours d’exécution. Ces DMV en savent peu sur la définition des sessions.

    • Même si toutes les sessions d'événements sont actuellement arrêtées, un SELECT de la vue sys.dm_xe_packages retourne toujours des lignes, car différents packages sont chargés en mémoire active lorsque le serveur démarre.
    • Pour la même raison, sys.dm_xe_objects et sys.dm_xe_object_columns retournent encore des lignes.
  • Le préfixe de nom pour les DMV d’Extended Events est le suivant :

    • sys.dm_xe_* est le préfixe de nom sur SQL Server et Azure SQL Managed Instance.
    • sys.dm_xe_database_* est généralement le préfixe de nom sur Azure SQL Database et la base de données SQL dans Fabric.

Permissions

Pour accéder aux SELECT vues système, l’autorisation suivante est nécessaire :

  • SQL Server 2019 (15.x) et les versions précédentes nécessitent VIEW SERVER STATE une autorisation sur le serveur.
  • SQL Server 2022 (16.x) et versions ultérieures nécessitent VIEW SERVER PERFORMANCE STATE une autorisation sur le serveur.
  • Azure SQL Database et SQL Database dans Fabric nécessitent VIEW DATABASE PERFORMANCE STATE une autorisation dans la base de données.

Affichages catalogue

Pour les besoins de cette page, créez une session Événements étendus avec SSMS ou T-SQL. Installez la dernière version de SQL Server Management Studio (SSMS).

Créer une session dans SQL Server Management Studio (SSMS)

Dans SSMS, dans l’Explorateur d’objets, vous pouvez démarrer la boîte de dialogue Nouvelle session en développantles événements étendus>, puis cliquer avec le bouton droit sur Sessions>Nouvelle session.

Dans la grande boîte de dialogue Nouvelle session , dans la première section intitulée Général, nous constatons que l’option Démarrer la session d’événements au démarrage du serveura été sélectionnée.

Capture d’écran de SSMS de la nouvelle session > générale, démarrez la session d’événements au démarrage du serveur.

Ensuite, dans la section Événements , nous voyons que l’événement lock_deadlock a été choisi. Pour cet événement, nous voyons que trois Actions ont été sélectionnées. Cela signifie que le bouton Configurer a été sélectionné, ce qui devient gris après avoir été sélectionné.

Capture d’écran de SSMS de la nouvelle session d'événements>, champs globaux (actions).

Ensuite, toujours dans la section Events>Configure , nous voyons que resource_type a été défini sur PAGE. Cela signifie que les données d’événement ne seront pas envoyées du moteur d’événements à la cible si la valeur resource_type est autre que PAGE.

Nous constatons la présence de filtres de prédicat supplémentaires pour le nom de base de données et pour un compteur.

Capture d’écran de SSMS des nouveaux événements de session > , filtrez les champs de prédicat (actions).

Ensuite, dans la section Stockage de données, nous constatons qu’event_file a été choisi comme cible. En outre, nous constatons que l’option Activer la substitution de fichier a été sélectionnée.

Capture d’écran de SQL Server Management Studio (SSMS) de la nouvelle session de stockage de données > , eventfile_enablefileroleover.

Pour finir, dans la section Avancé, nous constatons que la valeur de Latence maximale de répartition a été réduite à quatre secondes.

Capture d’écran de SSMS de la nouvelle session > Avancée, latence de répartition maximale.

Créer une session d’événements dans T-SQL

Quelle que soit la façon dont une définition de session d’événements est créée, à partir de SSMS, la session peut être inversée dans un script Transact-SQL parfaitement correspondant. Vous pouvez examiner les captures d’écran de nouvelle session précédentes et comparer leurs spécifications visibles aux clauses du script T-SQL CREATE EVENT SESSION généré suivant.

Pour inverser l’ingénierie d’une session d’événements, dans l’Explorateur d’objets , vous pouvez cliquer avec le bouton droit sur votre nœud de session, puis choisir Session de script comme>CREATE dans ** >Presse-papiers.

CREATE EVENT SESSION [event_session_test3]
    ON SERVER  -- Or, if on Azure SQL Database, ON DATABASE.

    ADD EVENT sqlserver.lock_deadlock
    (
        SET
            collect_database_name = (1)
        ACTION
        (
            package0.collect_system_time,
            package0.event_sequence,
            sqlserver.client_hostname
        )
        WHERE
        (
            [database_name]           = N'InMemTest2'
            AND [package0].[counter] <= (16)
            AND [resource_type]       = (6)
        )
    )

    ADD TARGET package0.event_file
    (
        SET
            filename           = N'c:\temp\\event_session_test3_EF.xel',
            max_file_size      = (20),
            max_rollover_files = (2)
    )

    WITH
    (
        MAX_MEMORY            = 4096 KB,
        EVENT_RETENTION_MODE  = ALLOW_SINGLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY  = 4 SECONDS,
        MAX_EVENT_SIZE        = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY       = OFF,
        STARTUP_STATE         = ON
    );

Vue du catalogue SELECT JOIN UNION

L’instruction T-SQL SELECT suivante est longue uniquement parce qu’elle UNION plusieurs petits SELECT ensemble. Chaque petite instruction SELECT peut être exécutée individuellement. Les petites instructions SELECT montrent comment les différents affichages catalogue système doivent être joints.

SELECT
        s.name        AS [Session-Name],
        '1_EVENT'     AS [Clause-Type],
        'Event-Name'  AS [Parameter-Name],
        e.name        AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_events   AS e

            ON  e.event_session_id = s.event_session_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name         AS [Session-Name],
        '2_EVENT_SET'  AS [Clause-Type],
        f.name         AS [Parameter-Name],
        f.value        AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_events   AS e

            ON  e.event_session_id = s.event_session_id

        JOIN  sys.server_event_session_fields   As f

            ON  f.event_session_id = s.event_session_id
            AND f.object_id        = e.event_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name              AS [Session-Name],
        '3_EVENT_ACTION'    AS [Clause-Type],

        a.package + '.' + a.name
                            AS [Parameter-Name],

        '(Not_Applicable)'  AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_events   AS e

            ON  e.event_session_id = s.event_session_id

        JOIN  sys.server_event_session_actions  As a

            ON  a.event_session_id = s.event_session_id
            AND a.event_id         = e.event_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name                AS [Session-Name],
        '4_EVENT_PREDICATES'  AS [Clause-Type],
        e.predicate           AS [Parameter-Name],
        '(Not_Applicable)'    AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_events   AS e

            ON  e.event_session_id = s.event_session_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name              AS [Session-Name],
        '5_TARGET'          AS [Clause-Type],
        t.name              AS [Parameter-Name],
        '(Not_Applicable)'  AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_targets  AS t

            ON  t.event_session_id = s.event_session_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name          AS [Session-Name],
        '6_TARGET_SET'  AS [Clause-Type],
        f.name          AS [Parameter-Name],
        f.value         AS [Parameter-Value]
    FROM
              sys.server_event_sessions         AS s
        JOIN  sys.server_event_session_targets  AS t

            ON  t.event_session_id = s.event_session_id

        JOIN  sys.server_event_session_fields   As f

            ON  f.event_session_id = s.event_session_id
            AND f.object_id        = t.target_id
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name               AS [Session-Name],
        '7_WITH_MAX_MEMORY'  AS [Clause-Type],
        'max_memory'         AS [Parameter-Name],
        s.max_memory         AS [Parameter-Value]
    FROM
              sys.server_event_sessions  AS s
    WHERE
        s.name = 'event_session_test3'

UNION ALL
SELECT
        s.name                  AS [Session-Name],
        '7_WITH_STARTUP_STATE'  AS [Clause-Type],
        'startup_state'         AS [Parameter-Name],
        s.startup_state         AS [Parameter-Value]
    FROM
              sys.server_event_sessions  AS s
    WHERE
        s.name = 'event_session_test3'

ORDER BY
    [Session-Name],
    [Clause-Type],
    [Parameter-Name]
;

Sortie

Le tableau suivant montre la sortie de l'exécution de l'exemple précédent SELECT JOIN UNION. Les noms et valeurs des paramètres de sortie correspondent à ce qui est visible de manière simple dans l’instruction précédente CREATE EVENT SESSION .

Nom de session Type de clause Nom du paramètre Valeur du paramètre
event_session_test3 1_EVENT Event-Name lock_deadlock
event_session_test3 2_EVENT_SET collect_database_name 1
event_session_test3 3_EVENT_ACTION sqlserver.client_hostname (Not_Applicable)
event_session_test3 3_EVENT_ACTION sqlserver.collect_system_time (Not_Applicable)
event_session_test3 3_EVENT_ACTION sqlserver.event_sequence (Not_Applicable)
event_session_test3 4_EVENT_PREDICATES ([sqlserver].[equal_i_sql_unicode_string]([database_name],N'InMemTest2') AND [package0].[compteur]<=(16)) (Not_Applicable)
event_session_test3 5_TARGET event_file (Not_Applicable)
event_session_test3 6_TARGET_SET nom_fichier c :\temp\event_session_test3_EF.xel
event_session_test3 6_TARGET_SET max_file_size 20
event_session_test3 6_TARGET_SET max_rollover_files 2
event_session_test3 7_WITH_MAX_MEMORY max_memory 4096
event_session_test3 7_WITH_STARTUP_STATE startup_state 1

Cette étape termine la section sur les affichages catalogue.

Vues de gestion dynamique (DMVs)

Cette section fournit plusieurs instructions Transact-SQL SELECT qui servent chacun un objectif métier spécifique. En outre, les instructions SELECT démontrent comment vous pouvez JOIN les DMV de manière conjointe pour toutes nouvelles utilisations envisagées.

La documentation de référence des DMVs est disponible dans les Extended Events Dynamic Management Views.

Tous les objets que vous pouvez utiliser dans le domaine des événements étendus proviennent de packages qui sont chargés dans le système. Cette section répertorie tous les packages et leurs descriptions.

SELECT  --C.1
        p.name         AS [Package],
        p.description  AS [Package-Description]
    FROM
        sys.dm_xe_packages  AS p
    ORDER BY
        p.name;

Sortie

Voici la liste des packages.

Package Description du package
filestream Événements étendus pour FILESTREAM et FileTable SQL Server
package0 Package par défaut. Contient l’ensemble des types, mappages, opérateurs de comparaison, actions et cibles standard
qds Événements étendus pour Magasin des requêtes
SecAudit Événements d’audit de sécurité
sqlclr Événements étendus pour SQL CLR
sqlos Événements étendus pour le système d’exploitation SQL
SQLSatellite Événements étendus pour SQL Server Machine Learning Services
sqlserver Événements étendus pour Microsoft SQL Server
sqlsni Événements étendus pour Microsoft SQL Server
ucs Événements étendus pour la pile de communications unifiées
XtpCompile Événements étendus pour la compilation XTP
XtpEngine Événements étendus pour le moteur XTP
XtpRuntime Événements étendus pour le runtime XTP

Définitions des abréviations précédentes :

  • clr = Common Language Runtime de .NET
  • qds = Magasin de données de requête
  • sni = Interface réseau du serveur
  • ucs = Stack des communications unifiées
  • xtp = Traitement des transactions extrêmes

SELECT tous les éléments disponibles triés par type

L’exemple suivant SELECT retourne une ligne pour chaque objet.

SELECT  --C.3
        o.object_type  AS [Type-of-Item],
        p.name         AS [Package],
        o.name         AS [Item],
        o.description  AS [Item-Description]
    FROM
             sys.dm_xe_objects  AS o
        JOIN sys.dm_xe_packages AS p  ON o.package_guid = p.guid
    WHERE
        o.object_type IN ('action' , 'target' , 'pred_source')
        AND
        (
            (o.capabilities & 1) = 0
            OR
            o.capabilities IS NULL
        )
    ORDER BY
        [Type-of-Item],
        [Package],
        [Item];

Champs de données disponibles pour votre événement

L’exemple suivant SELECT retourne tous les champs de données qui sont particuliers à votre type d’événement.

  • Notez l’élément de WHERE clause : column_type = 'data'.
  • En outre, vous devez modifier la valeur de clause WHERE pour o.name =.
SELECT  -- C.4
        p.name         AS [Package],
        c.object_name  AS [Event],
        c.name         AS [Column-for-Predicate-Data],
        c.description  AS [Column-Description]
    FROM
              sys.dm_xe_object_columns  AS c
        JOIN  sys.dm_xe_objects         AS o

            ON  o.name = c.object_name

        JOIN  sys.dm_xe_packages        AS p

            ON  p.guid = o.package_guid
    WHERE
        c.column_type = 'data'
        AND
        o.object_type = 'event'
        AND
        o.name        = '\<EVENT-NAME-HERE!>'  --'lock_deadlock'
    ORDER BY
        [Package],
        [Event],
        [Column-for-Predicate-Data];

Sortie

Les lignes suivantes ont été retournées par l'opération précédente SELECT, WHERE o.name = 'lock_deadlock'.

  • Chaque ligne représente un filtre facultatif pour l’événement sqlserver.lock_deadlock .
  • La Column-Description colonne est omise de l’affichage suivant. Sa valeur est souvent NULL.
  • Il s'agit d'un résultat réel, sauf pour la colonne Description qui est souvent omise NULL.
  • Ces lignes sont WHERE object_type = 'lock_deadlock'.
Package Événement Colonne pour les données de prédicat
sqlserver lock_deadlock associated_object_id
sqlserver lock_deadlock database_id
sqlserver lock_deadlock database_name
sqlserver lock_deadlock deadlock_id
sqlserver lock_deadlock duration
sqlserver lock_deadlock lockspace_nest_id
sqlserver lock_deadlock lockspace_sub_id
sqlserver lock_deadlock lockspace_workspace_id
sqlserver lock_deadlock mode
sqlserver lock_deadlock object_id
sqlserver lock_deadlock owner_type
sqlserver lock_deadlock resource_0
sqlserver lock_deadlock resource_1
sqlserver lock_deadlock resource_2
sqlserver lock_deadlock resource_description
sqlserver lock_deadlock resource_type
sqlserver lock_deadlock transaction_id

sys.dm_xe_map_values et champs d’événement

Les éléments suivants SELECT incluent l'ajout d'un JOIN à la vue sys.dm_xe_map_values.

L’objectif de SELECT est de montrer les nombreux champs parmi lesquels vous pouvez choisir pour votre session d’événements. Vous pouvez utiliser les champs d’événements de deux manières :

  • Pour choisir les valeurs de champ qui seront écrites dans votre cible pour chaque occurrence d’événement.
  • Pour filtrer les occurrences des événements qui seront envoyées à la cible plutôt que conservées.
SELECT  --C.5
        dp.name         AS [Package],
        do.name         AS [Object],
        do.object_type  AS [Object-Type],
        'o--c'     AS [O--C],
        dc.name         AS [Column],
        dc.type_name    AS [Column-Type-Name],
        dc.column_type  AS [Column-Type],
        dc.column_value AS [Column-Value],
        'c--m'     AS [C--M],
        dm.map_value    AS [Map-Value],
        dm.map_key      AS [Map-Key]
    FROM      sys.dm_xe_objects         AS do
        JOIN  sys.dm_xe_object_columns  AS dc
            ON  dc.object_name = do.name
        JOIN  sys.dm_xe_map_values      AS dm
            ON  dm.name = dc.type_name
        JOIN  sys.dm_xe_packages        AS dp
            ON  dp.guid = do.package_guid
    WHERE
        do.object_type = 'event'
        AND
        do.name        = '\<YOUR-EVENT-NAME-HERE!>'  --'lock_deadlock'
    ORDER BY
        [Package],
        [Object],
        [Column],
        [Map-Value];

Sortie

Ensuite, voici un échantillon des 100+ lignes de sortie réelles de la SELECT T-SQL précédente. La ligne pour resource_type est pertinente au filtrage de prédicat utilisé dans l'exemple event_session_test3 ailleurs dans cet article.

/***  5 sampled rows from the actual rows returned.
    NOTE:  'resource_type' under 'Column'.

Package     Object          Object-Type   O--C   Column          Column-Type-Name     Column-Type   Column-Value   C--M   Map-Value        Map-Key
-------     ------          -----------   ----   ------          ----------------     -----------   ------------   ----   ---------        -------
sqlserver   lock_deadlock   event         o--c   CHANNEL         etw_channel          readonly      2              c--m   Operational      4
sqlserver   lock_deadlock   event         o--c   KEYWORD         keyword_map          readonly      16             c--m   access_methods   1024
sqlserver   lock_deadlock   event         o--c   mode            lock_mode            data          NULL           c--m   IX               8
sqlserver   lock_deadlock   event         o--c   owner_type      lock_owner_type      data          NULL           c--m   Cursor           2
sqlserver   lock_deadlock   event         o--c   resource_type   lock_resource_type   data          NULL           c--m   PAGE             6

Therefore, on your CREATE EVENT SESSION statement, in its ADD EVENT WHERE clause,
you could put:
    WHERE( ... resource_type = 6 ...)  -- Meaning:  6 = PAGE.
***/

Paramètres des cibles

La commande suivante SELECT retourne chaque paramètre de votre cible. Chaque paramètre est balisé pour indiquer s’il est obligatoire. Les valeurs que vous assignez aux paramètres affectent le comportement de la cible.

  • Notez l’élément de WHERE clause : object_type = 'customizable'.
  • En outre, vous devez modifier la valeur de clause WHERE pour o.name = .
SELECT  --C.6
        p.name        AS [Package],
        o.name        AS [Target],
        c.name        AS [Parameter],
        c.type_name   AS [Parameter-Type],

        CASE c.capabilities_desc
            WHEN 'mandatory' THEN 'YES_Mandatory'
            ELSE 'Not_mandatory'
        END  AS [IsMandatoryYN],

        c.description AS [Parameter-Description]
    FROM
              sys.dm_xe_objects   AS o
        JOIN  sys.dm_xe_packages  AS p

            ON  o.package_guid = p.guid

        LEFT OUTER JOIN  sys.dm_xe_object_columns  AS c

            ON  o.name        = c.object_name
            AND c.column_type = 'customizable'  -- !
    WHERE
        o.object_type = 'target'
        AND
        o.name     LIKE '%'    -- Or '\<YOUR-TARGET-NAME-HERE!>'.
    ORDER BY
        [Package],
        [Target],
        [IsMandatoryYN]  DESC,
        [Parameter];

Sortie

Les lignes de paramètres suivantes sont un petit sous-ensemble de ceux retournés par le précédent SELECT.

/***  Actual output, all rows, where target name = 'event_file'.
Package    Target       Parameter            Parameter-Type       IsMandatoryYN   Parameter-Description
-------    ------       ---------            --------------       -------------   ---------------------
package0   event_file   filename             unicode_string_ptr   YES_Mandatory   Specifies the location and file name of the log
package0   event_file   increment            uint64               Not_mandatory   Size in MB to grow the file
package0   event_file   lazy_create_blob     boolean              Not_mandatory   Create blob upon publishing of first event buffer, not before.
package0   event_file   max_file_size        uint64               Not_mandatory   Maximum file size in MB
package0   event_file   max_rollover_files   uint32               Not_mandatory   Maximum number of files to retain
package0   event_file   metadatafile         unicode_string_ptr   Not_mandatory   Not used
***/

Conversion de la colonne target_data du DMV SELECT en XML

Cela DMV SELECT retourne des lignes de données à partir de la cible de votre session d’événements active. Les données sont converties en XML, ce qui rend sa cellule retournée sélectionnable pour faciliter l’affichage dans SSMS.

  • Si votre session d’événements est arrêtée, cela SELECT ne renvoie aucune ligne.
  • Vous devez modifier la valeur de clause WHERE pour s.name = .
SELECT  --C.7
        s.name,
        t.target_name,
        CAST(t.target_data AS XML)  AS [XML-Cast]
    FROM
              sys.dm_xe_session_targets  AS t
        JOIN  sys.dm_xe_sessions         AS s

            ON s.address = t.event_session_address
    WHERE
        s.name = '\<Your-Session-Name-Here!>';

Sortie : une seule ligne, y compris sa cellule XML

Voici la seule ligne qui est sortie de la précédente SELECT. La colonne XML-Cast contient une chaîne de code XML que SSMS comprend est XML. Par conséquent, SSMS comprend qu’il doit rendre la XML-Cast cellule sélectionnable.

Pour cette séquence :

  • La valeur s.name = a été définie pour une session d'événement liée à l’événement checkpoint_begin.
  • La cible était un ring_buffer.
name                              target_name   XML-Cast
----                              -----------   --------
checkpoint_session_ring_buffer2   ring_buffer   <RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="2" eventCount="2" droppedCount="0" memoryUsed="104"><event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:23.508Z"><data name="database_id"><type name="uint32" package="package0" /><value>5</value></data></event><event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:26.975Z"><data name="database_id"><type name="uint32" package="package0" /><value>5</value></data></event></RingBufferTarget>

Sortie, XML affiché lisible quand une cellule est sélectionnée

Lorsque la cellule XML-Cast est sélectionnée, l’affichage suivant s’affiche.

<RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="2" eventCount="2" droppedCount="0" memoryUsed="104">
  <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:23.508Z">
    <data name="database_id">
      <type name="uint32" package="package0" />
      <value>5</value>
    </data>
  </event>
  <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:26.975Z">
    <data name="database_id">
      <type name="uint32" package="package0" />
      <value>5</value>
    </data>
  </event>
</RingBufferTarget>

SELECT dans une fonction pour extraire les données d'event_file depuis un lecteur de disque

Supposez que votre session d’événements a collecté des données puis a été arrêtée. Si votre session a été définie pour utiliser la cible event_file, vous pouvez toujours récupérer les données en appelant la fonction sys.fn_xe_target_read_file.

  • Vous devez modifier votre chemin et nom de fichier dans le paramètre de l’appel de fonction, avant d’exécuter SELECT.
    • Ne faites pas attention aux chiffres supplémentaires incorporés par le système SQL dans vos noms de fichiers .XEL chaque fois que vous redémarrez votre session. Affectez simplement le nom racine et l’extension ordinaires.
SELECT  --C.8
        f.module_guid,
        f.package_guid,
        f.object_name,
        f.file_name,
        f.file_offset,
        CAST(f.event_data AS XML)  AS [Event-Data-As-XML]
    FROM
        sys.fn_xe_file_target_read_file(

            '\<YOUR-PATH-FILE-NAME-ROOT-HERE!>*.xel',
            --'c:\temp\\Checkpoint_Begins_ES*.xel',  -- Example.

            NULL, NULL, NULL
        )  AS f;

Sortie : lignes retournées par l’instruction SELECT

Voici les lignes retournées par la fonction précédente SELECT FROM . La Event-Data-As-XML colonne XML contient les données qui concernent spécifiquement l’occurrence d’événement.

module_guid                            package_guid                           object_name        file_name                                                           file_offset   Event-Data-As-XML
-----------                            ------------                           -----------        ---------                                                           -----------   -----------------
D5149520-6282-11DE-8A39-0800200C9A66   03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2   checkpoint_begin   c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel   5120          <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:14.023Z"><data name="database_id"><value>5</value></data><action name="session_id" package="sqlserver"><value>60</value></action><action name="database_id" package="sqlserver"><value>5</value></action></event>
D5149520-6282-11DE-8A39-0800200C9A66   03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2   checkpoint_end     c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel   5120          <event name="checkpoint_end" package="sqlserver" timestamp="2016-07-09T03:30:14.025Z"><data name="database_id"><value>5</value></data></event>
D5149520-6282-11DE-8A39-0800200C9A66   03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2   checkpoint_begin   c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel   5632          <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:17.704Z"><data name="database_id"><value>5</value></data><action name="session_id" package="sqlserver"><value>60</value></action><action name="database_id" package="sqlserver"><value>5</value></action></event>
D5149520-6282-11DE-8A39-0800200C9A66   03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2   checkpoint_end     c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel   5632          <event name="checkpoint_end" package="sqlserver" timestamp="2016-07-09T03:30:17.709Z"><data name="database_id"><value>5</value></data></event>

Sortie : une cellule XML

Voici le contenu de la première cellule XML, tirée de l’ensemble de lignes retourné précédent.

<event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:14.023Z">
  <data name="database_id">
    <value>5</value>
  </data>
  <action name="session_id" package="sqlserver">
    <value>60</value>
  </action>
  <action name="database_id" package="sqlserver">
    <value>5</value>
  </action>
</event>