Condividi tramite


SELECT e JOIN dalle viste di sistema per gli eventi estesi

Si applica a:SQL ServerAzure SQL DatabaseAzure SQL Istanza gestitaDatabase SQL in Microsoft Fabric

Questo articolo illustra i due set di viste di sistema correlate agli eventi estesi. L'articolo illustra:

  • Come visualizzare JOIN diverse visualizzazioni di sistema.
  • Come ottenere SELECT tipi particolari di informazioni dalle visualizzazioni di sistema.

Per gli Eventi estesi sono disponibili due set di viste di sistema:

Viste del catalogo

  • Queste viste archiviano informazioni sulla definizione di ogni sessione evento creata da CREATE EVENT SESSION (Transact-SQL). Queste viste, però, non hanno informazioni su eventuali sessioni in esecuzione.
    • Ad esempio, se l'Object Explorer di SSMS non mostra alcuna sessione evento definita, una SELECT dalla vista sys.server_event_session_targets restituirebbe zero righe.
  • La maggior parte degli esempi è scritta per SQL Server e Istanza gestita di SQL di Azure. Con alcune modifiche minori, potrebbero essere eseguite nel database SQL di Azure e nel database SQL in Fabric modificando server in database nel nome DMV.
    • sys.server_event_session* è il prefisso del nome in SQL Server e Istanza gestita di SQL di Azure.
    • sys.database_event_session* è il prefisso del nome nel database SQL di Azure e nel database SQL in Fabric.
    • Per ulteriori informazioni su ciascuna, vedere Viste del catalogo degli eventi estesi.

DMV (Dynamic Management View)

  • Archiviano informazioni relative all' attività corrente di sessioni evento in esecuzione. Queste DMV, tuttavia, hanno poche informazioni sulla definizione delle sessioni.

    • Anche se tutte le sessioni eventi sono attualmente arrestate, un oggetto SELECT dalla visualizzazione sys.dm_xe_packages restituisce ancora righe perché diversi pacchetti vengono caricati nella memoria attiva all'avvio del server.
    • Per lo stesso motivo sys.dm_xe_objects e sys.dm_xe_object_columns restituiscono comunque righe.
  • Il prefisso nome per DMV di Eventi estesi è:

    • sys.dm_xe_* è il prefisso del nome in SQL Server e Istanza gestita di SQL di Azure.
    • sys.dm_xe_database_* è in genere il prefisso del nome nel database SQL di Azure e nel database SQL in Fabric.

Permissions

Per accedere alle viste di sistema, è necessaria l'autorizzazione seguente:

  • SQL Server 2019 (15.x) e le versioni precedenti richiedono VIEW SERVER STATE l'autorizzazione per il server.
  • SQL Server 2022 (16.x) e versioni successive richiedono VIEW SERVER PERFORMANCE STATE l'autorizzazione per il server.
  • Il database SQL di Azure e il database SQL in Fabric richiedono VIEW DATABASE PERFORMANCE STATE l'autorizzazione nel database.

Viste del catalogo

Ai fini di questa pagina, creare una sessione eventi estesi con SSMS o con T-SQL. Installare la versione più recente di SQL Server Management Studio (SSMS).

Creare una sessione in SQL Server Management Studio (SSMS)

In SSMS, in Esplora oggetti, è possibile avviare la finestra di dialogo Nuova sessione espandendoEventi estesi di >, quindi fare clic con il pulsante destro del mouse su Sessioni>nuova sessione.

Nella finestra di dialogo Nuova sessione , nella prima sezione, Generale, è selezionata l'opzione Avviare la sessione eventi all'avvio del server.

Screenshot di SSMS della nuova sessione Generale, Avvia la sessione di eventi all'avvio del server.>

Nella sezione Eventi si vedrà che l'evento lock_deadlock è stato scelto. Per questo evento sono state selezionate tre Azioni . Ciò significa che è stato selezionato il pulsante Configura , che diventa grigio dopo essere stato selezionato.

Screenshot della nuova sessione di eventi in SSMS>, campi globali (azioni).

Successivamente, nella sezione Configurazione eventi> si noterà che resource_type è stato impostato su .PAGE Ciò significa che i dati dell'evento non verranno inviati dal motore di eventi alla destinazione se il valore resource_type è diverso da PAGE.

È anche possibile vedere altri predicati di filtri per il nome del database e per un contatore.

Screenshot di SSMS degli eventi di nuova sessione > , filtro campi predicati (azioni).

Quindi, nella sezione Archiviazione dati è possibile vedere che event_file è stato scelto come destinazione. È anche possibile vedere che è stata selezionata l'opzione Consenti rollover dei file.

> Data Storage, eventfile_enablefileroleover.

Infine, nella sezione Avanzate è possibile vedere che il valore Latenza di recapito massima è stato ridotto a 4 secondi.

Screenshot di SSMS della nuova sessione con latenza di invio massima avanzata>.

Creare una sessione eventi in T-SQL

Indipendentemente dalla modalità di creazione di una definizione di sessione eventi, la sessione da SSMS può essere convertita per essere uno script di Transact-SQL perfettamente corrispondente. È possibile esaminare gli screenshot della nuova sessione precedenti e confrontare le specifiche visibili con le clausole nello script T-SQL CREATE EVENT SESSION generato seguente.

Per invertire la progettazione di una sessione eventi, in Esplora oggetti è possibile fare clic con il pulsante destro del mouse sul nodo della sessione e quindi scegliere Script Session as to** Clipboard (>CREATE>** Appunti).

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
    );

Vista Catalogo SELECT JOIN UNION

L'istruzione T-SQL SELECT seguente è lunga solo perché unisce diverse piccole istruzioni SELECT con UNION. Ognuna delle istruzioni SELECT più brevi può essere eseguita separatamente. Le istruzioni SELECT più brevi illustrano come devono essere unite tramite JOIN le diverse viste del catalogo di sistema.

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]
;

Output

Nella tabella seguente viene mostrato l'output dell'esecuzione del SELECT JOIN UNION precedente. I nomi e i valori dei parametri di output corrispondono a ciò che è chiaramente visibile nell'istruzione precedente CREATE EVENT SESSION.

Session-Name Clause-Type Parameter-Name Parameter-Value
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].[contatore]<=(16)) (Not_Applicable)
event_session_test3 5_TARGET event_file (Not_Applicable)
event_session_test3 6_TARGET_SET filename 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

E questo è tutto per quanto riguarda la sezione sulle viste del catalogo.

DMV (Dynamic Management View)

In questa sezione vengono fornite diverse istruzioni Transact-SQL SELECT che offrono uno scopo aziendale specifico. Inoltre, i SELEC dimostrano come è possibile JOIN usare insieme le DMV per qualsiasi nuovo uso desiderato.

La documentazione di riferimento delle DMV è disponibile in Viste a gestione dinamica degli eventi estesi

Tutti gli oggetti che è possibile usare nell'area degli eventi estesi provengono da pacchetti caricati nel sistema. In questa sezione sono elencati tutti i pacchetti e le relative descrizioni.

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

Output

Ecco l'elenco dei pacchetti.

Pacchetto Package-Description
filestream Eventi estesi per FILESTREAM e FileTable di SQL Server
package0 Pacchetto predefinito. Contiene tutti i tipi, le mappe, gli operatori di confronto, le azioni e le destinazioni standard
qds Eventi estesi per Query Store
SecAudit Eventi del controllo di sicurezza
sqlclr Eventi estesi per SQL CLR
sqlos Eventi estesi per il sistema operativo SQL
SQLSatellite Eventi estesi per Servizi di Machine Learning per SQL Server
sqlserver Eventi estesi per Microsoft SQL Server
sqlsni Eventi estesi per Microsoft SQL Server
ucs Eventi estesi per lo stack delle comunicazioni unificate
XtpCompile Eventi estesi per la compilazione XTP
XtpEngine Eventi estesi per il motore XTP
XtpRuntime Eventi estesi per il runtime XTP

Definizioni degli acronimi riportati qui sopra:

  • clr = Common Language Runtime (Runtime del linguaggio comune) di .NET
  • qds = Archivio dati delle query
  • sni = Interfaccia di rete server
  • ucs = Stack di comunicazioni unificate
  • xtp = Elaborazione transazionale estrema

SELECT tutti gli elementi disponibili ordinati per tipo

Di seguito SELECT viene restituita una riga per ogni oggetto .

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];

Campi dati disponibili per l'evento

Di seguito SELECT vengono restituiti tutti i campi dati specifici per il tipo di evento.

  • Si noti l'elemento della clausola WHERE: column_type = 'data'.
  • Inoltre, è necessario modificare il valore della WHERE clausola per 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];

Output

Le righe seguenti sono state restituite dai precedenti SELECT, WHERE o.name = 'lock_deadlock'.

  • Ogni riga rappresenta un filtro facoltativo per l'evento sqlserver.lock_deadlock .
  • La Column-Description colonna viene omessa dalla visualizzazione seguente. Il valore è spesso NULL.
  • Si tratta di un output effettivo, ad eccezione della colonna Description omessa, che è spesso NULL.
  • Queste righe sono WHERE object_type = 'lock_deadlock'.
Pacchetto Event Column-for-Predicate-Data
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 e i campi evento

Di seguito SELECT include un collegamento JOIN alla vista sys.dm_xe_map_values.

Lo scopo della visualizzazione SELECT è mostrare i numerosi campi tra cui è possibile scegliere per la sessione di eventi. I campi evento possono essere usati in due modi:

  • Per scegliere quali valori dei campi verranno scritti nella destinazione per ogni occorrenza dell'evento.
  • Per filtrare le occorrenze dell'evento da inviare e quelle da non inviare alla destinazione.
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];

Output

Di seguito è riportato un campionamento delle effettive 100+ righe di output dell'oggetto T-SQL SELECT precedente. La riga per resource_type è rilevante per il filtro del predicato usato nell'esempio event_session_test3 altrove in questo articolo.

/***  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.
***/

Parametri per le destinazioni

Di seguito SELECT riporta ogni parametro per il tuo obiettivo. Ogni parametro è contrassegnato come obbligatorio o meno. I valori assegnati ai parametri influiscono sul comportamento della destinazione.

  • Si noti l'elemento della clausola WHERE: object_type = 'customizable'.
  • Inoltre, è necessario modificare il valore della WHERE clausola per 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];

Output

Le righe di parametri seguenti sono un piccolo subset di quelli restituiti dall'oggetto precedente 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
***/

CAST DMV SELECT target_data colonna in XML

In questo modo DMV SELECT vengono restituite righe di dati dalla destinazione della sessione eventi attiva. Il cast dei dati viene eseguito su XML, che rende la cella restituita selezionabile per semplificare la visualizzazione in SSMS.

  • Se la sessione eventi viene arrestata, saranno restituite zero righe.
  • È necessario modificare il valore della WHERE clausola per 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!>';

Output: l'unica riga, inclusa la cella XML

Ecco l'unica riga restituita dall'oggetto precedente SELECT. La colonna XML-Cast contiene una stringa xml che SSMS riconosce è XML. Di conseguenza, SSMS riconosce che deve rendere selezionabile la XML-Cast cella.

Per questa esecuzione:

  • Il valore s.name = è stato impostato su una sessione eventi per l'evento checkpoint_begin.
  • La destinazione era 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>

Output, XML formattato in modo ordinato quando la cella viene selezionata

Quando viene selezionata la cella XML-Cast, viene visualizzata la visualizzazione seguente.

<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 da una funzione per recuperare i dati event_file dall'unità disco

Si supponga che la sessione evento abbia raccolto alcuni dati e in seguito sia stata arrestata. Se la sessione è stata definita per usare la destinazione event_file, è comunque possibile recuperare i dati chiamando la funzione sys.fn_xe_target_read_file.

  • Prima di eseguire SELECTquesta operazione, è necessario modificare il percorso e il nome del file nel parametro della chiamata di funzione.
    • Non è necessario prestare attenzione alle cifre aggiuntive che il sistema SQL incorpora nei nomi file con estensione XEL effettivi ogni volta che si riavvia la sessione. È sufficiente specificare il nome radice e l'estensione normali.
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;

Output: righe restituite dalla funzione SELECT FROM

Di seguito sono riportate le righe restituite dalla funzione precedente SELECT FROM . La Event-Data-As-XML colonna XML contiene i dati specifici relativi all'occorrenza dell'evento.

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>

Output: una cella di XML

Di seguito è riportato il contenuto della prima cella di XML, dal set di righe restituito in precedenza.

<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>