Istruzioni SELECT e JOIN da viste di sistema per eventi estesi in SQL ServerSELECTs and JOINs From System Views for Extended Events in SQL Server

In questo argomento si applica a: SìSQL ServerSìDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

In questo articolo vengono spiegati i due set di viste di sistema correlate agli eventi estesi in Microsoft SQL Server e nel servizio cloud del database SQL di Azure.This article explains the two sets of system views that relate to extended events in Microsoft SQL Server, and in the Azure SQL Database cloud service. L'articolo illustra:The article illustrates:

  • Come unire diverse viste di sistema con l'istruzione JOIN.How to JOIN various system views.
  • Come selezionare tipi particolari di informazioni di viste di sistema con l'istruzione SELECT.How to SELECT particular kinds of information from the system views.
  • In che modo le stesse informazioni di una sessione evento vengono rappresentate dal punto di vista di tecnologie diverse. Ciò consente di approfondire la comprensione di ciascun punto di vista.How the same event session information is represented from various technological perspectives, which reinforces your understanding of each perspective.

La maggior parte degli esempi è scritta per SQL ServerMost of the examples are written for SQL Server. ma con qualche semplice modifica può funzionare anche nel database SQL di Azure.But with minor edits they would run on SQL Database.

A.A. Informazioni di baseFoundational information

Per gli eventi estesi sono disponibili due set di viste di sistema:There are two sets of system views for extended events:

Viste del catalogo:Catalog views:

  • In queste viste sono archiviate informazioni sulla definizione di ogni sessione evento creata da CREATE EVENT SESSIONo da un comando equivalente dell'interfaccia utente di SSMS.These views store information about the definition of each event session that is created by CREATE EVENT SESSION, or by an SSMS UI equivalent. Queste viste, però, non hanno informazioni su eventuali sessioni in esecuzione.But these views know nothing about whether any sessions have ever started running.

    • Ad esempio, se Esplora oggetti di SSMS indica che non sono definite sessioni evento, un'istruzione SELECT sulla vista sys.server_event_session_targets restituirebbe zero righe.For example, if the SSMS Object Explorer shows no event sessions are defined, SELECTing from the view sys.server_event_session_targets would return zero rows.
  • Prefissi nomi:Name prefix is:

    • *sys.server_event_session** è il prefisso nome per SQL Server.*sys.server_event_session** is the name prefix on SQL Server.
    • *sys.database_event_session** è il prefisso nome per il database SQL.*sys.database_event_session** is the name prefix on SQL Database.

Viste a gestione dinamica (DMV, Dynamic Management View):Dynamic management views (DMVs):

  • Archiviano informazioni relative all' attività corrente di sessioni evento in esecuzione.Store information about the current activity of running event sessions. Queste DMV, tuttavia, hanno poche informazioni sulla definizione delle sessioni.But these DMVs know little about the definition of the sessions.

    • Anche se tutte le sessioni evento sono arrestate, un'istruzione SELECT dalla vista sys.dm_xe_packages restituirebbe comunque un certo numero di righe, perché all'avvio del server nella memoria attiva vengono caricati diversi pacchetti.Even if all event sessions are currently stopped, a SELECT from the view sys.dm_xe_packages would still return rows because various packages are loaded into active memory a server start.
    • Per lo stesso motivo anche sys.dm_xe_objects sys.dm_xe_object_columns restituirebbe un certo numero di righe.For the same reason, sys.dm_xe_objects sys.dm_xe_object_columns would also still return rows.
  • Prefisso nome per DMV di eventi estesi:Name prefix for extended events DMVs is:

    • *sys.dm_xe_** è il prefisso nome per SQL Server.*sys.dm_xe_** is the name prefix on SQL Server.
    • *sys.dm_xe_database_** è in genere il prefisso nome per il database SQL.*sys.dm_xe_database_** is generally the name prefix on SQL Database.

Autorizzazioni:Permissions:

Per eseguire istruzioni SELECT dalle viste di sistema, è necessaria l'autorizzazione seguente:To SELECT from the system views, the following permission is necessary:

  • VIEW SERVER STATE nel caso di Microsoft SQL Server.VIEW SERVER STATE - if on Microsoft SQL Server.
  • VIEW DATABASE STATE nel caso del database SQL di Azure.VIEW DATABASE STATE - if on Azure SQL Database.

B.B. Vista del catalogoCatalog views

In questa sezione vengono abbinati e messi in correlazione i punti di vista di tre tecnologie diverse nella stessa sessione evento.This section matches and correlates three different technological perspectives on the same defined event session. La sessione è definita e visibile in Esplora oggetti di SQL Server Management Studio (SSMS.exe) ma non è in esecuzione.The session has been defined and is visible in the Object Explorer of SQL Server Management Studio (SSMS.exe), but the session is not currently running.

Ogni mese è consigliabile installare l'aggiornamento più recente di SSMS, per evitare errori imprevisti.Every month it is wise to install the latest update of SSMS, to avoid unexpected failures.

La documentazione di riferimento sulle viste del catalogo per gli eventi estesi è in Viste del catalogo degli eventi estesi (Transact-SQL).Reference documentation about the catalog views for extended events is at Extended Events Catalog Views (Transact-SQL).

 

Sequenza della sezione B:The sequence in this section B:

  • B.1 Punto di vista dell'interfaccia utente di SSMSB.1 SSMS UI perspective

    • Creare la definizione della sessione evento tramite l'interfaccia utente di SSMS.Create the definition of the event session, by using the SSMS UI. Sono riportati screenshot dettagliati.Step-by-step screenshots are shown.
  • B. 2 Punto di vista di Transact-SQLB.2 Transact-SQL perspective

    • Usare il menu di scelta rapida di SSMS per decompilare la sessione evento definita nell'istruzione Transact-SQL equivalente CREATE EVENT SESSION .Use the SSMS context menu to reverse engineer the defined event session into the equivalent Transact-SQL CREATE EVENT SESSION statement. Il codice T-SQL illustra una corrispondenza esatta con le scelte visualizzate negli screenshot di SSMS.The T-SQL shows a perfect match to the SSMS screenshots choices.
  • B.3 Punto di vista di SELECT JOIN UNION della vista del catalogoB.3 Catalog view SELECT JOIN UNION perspective

    • Eseguire un'istruzione T-SQL SELECT dalle viste del catalogo di sistema per la sessione evento.Issue a T-SQL SELECT statement from the system catalog views for our event session. I risultati corrispondono alle specifiche dell'istruzione CREATE EVENT SESSION .The results match the CREATE EVENT SESSION statement specifications.

 

B.1 Punto di vista dell'interfaccia utente di SSMSB.1 SSMS UI perspective

In Esplora oggettidi SSMS è possibile avviare la finestra di dialogo Nuova sessione . A tale scopo espandere Gestione > Eventi estesie quindi fare clic con il pulsante destro del mouse su Sessioni > Nuova sessione.In SSMS, in its Object Explorer, you can start the New Session dialog by expanding Management > Extended Events, and then right-clicking Sessions > New Session.

Nella finestra di dialogo Nuova sessione , nella prima sezione, Generale, è selezionata l'opzione Avviare la sessione eventi all'avvio del server.In the large New Session dialog, in its first section labeled General, we see the option has been selected to Start the event session at server startup.

Nuova sessione > Generale, Avviare la sessione eventi all'avvio del server.

Quindi, nella sezione Eventi è stato scelto l'evento lock_deadlock .Next on the Events section, we see the lock_deadlock event was chosen. Per questo evento sono state selezionate tre Azioni .For that event, we see that three Actions have been selected. Ciò significa che il pulsante Configura è stato selezionato. Il pulsante, infatti, ora è disabilitato.This means the Configure button was clicked, which becomes gray after being clicked.

Nuova sessione > Eventi, Campi globali (azioni)

Quindi, sempre nella sezione Eventi > Configura , è possibile vedere che resource_type è stato impostato su PAGE.Next, still on the Events > Configure section, we see that resource_type has been set to PAGE. Ciò significa che i dati eventi non verranno inviati dal motore degli eventi alla destinazione se il valore resource_type è diverso da PAGE.This means that event data will not be sent from the event engine to the target if the resource_type value is anything other than PAGE.

È anche possibile vedere altri predicati di filtri per il nome del database e per un contatore.We see additional predicate filters for the database name and for a counter.

Nuova sessione > Eventi, campi dei predicati dei filtri (Azioni)

Quindi, nella sezione Archiviazione dati è possibile vedere che event_file è stato scelto come destinazione.Next on the Data Storage section, we see the event_file has been chosen as a target. È anche possibile vedere che è stata selezionata l'opzione Consenti rollover dei file .Further, we see that the Enable file roleover option has been selected.

Nuova sessione > Archiviazione dati, eventfile_enablefileroleover

Infine, nella sezione Avanzate è possibile vedere che il valore Latenza di recapito massima è stato ridotto a 4 secondi.Finally, on the Advanced section, we see that the Maximum dispatch latency value was reduced down to 4 seconds.

Nuova sessione > Avanzate, Latenza di recapito massima

E questo è tutto per quanto riguarda il punto di vista dell'interfaccia di SSMS sulla definizione di sessioni eventi.This completes the SSMS UI perspective on an event session definition.

B. 2 Punto di vista di Transact-SQLB.2 Transact-SQL perspective

Indipendentemente dalla modalità di creazione della definizione di una sessione evento, dall'interfaccia utente di SSMS la sessione può essere decompilata in uno script Transact-SQL perfettamente corrispondente.Regardless of how an event session definition is created, from the SSMS UI the session can be reversed engineered into a perfectly matching Transact-SQL script. È possibile esaminare gli screenshot precedenti della finestra di dialogo Nuova sessione e confrontare le specifiche visibili con le clausole dello script T-SQL CREATE EVENT SESSION generato riportato di seguito.You can examine the preceding New Session screenshots and compare their visible specifications to the clauses in the following generated T-SQL CREATE EVENT SESSION script.

Per decompilare una sessione evento, in Esplora oggetti è possibile fare clic con il pulsante destro del mouse sul nodo della sessione e quindi scegliere Crea script per sessione > CREATE to (Crea in) > Appunti.To reverse engineer an event session, in the Object Explorer you can right-click your session node, and then choose Script Session as > CREATE to > Clipboard.

Lo script T-SQL seguente è stato creato tramite decompilazione con SSMS.The following T-SQL script was created by reverse engineering with SSMS. Quindi lo script è stato abbellito manualmente manipolando in modo strategico solo gli spazi.Then the script was manually prettified by strategic manipulation of white space only.

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:\Junk\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
    );

E questo è tutto per quanto riguarda il punto di vista di T-SQL.This completes the T-SQL perspective.

B.3 Punto di vista di SELECT JOIN UNION della vista del catalogoB.3 Catalog view SELECT JOIN UNION perspective

Niente paura,Do not be afraid! l'istruzione T-SQL SELECT è lunga solo perché contiene diverse istruzioni UNION che uniscono diverse istruzioni SELECT più brevi.The following T-SQL SELECT statement is long only because it UNIONs several small SELECTs together. Ognuna delle istruzioni SELECT più brevi può essere eseguita separatamente.Any of the small SELECTs can be run on its own. Le istruzioni SELECT più brevi illustrano come devono essere unite tramite JOIN le diverse viste del catalogo di sistema.The small SELECTs show how the various system cataloging views should be JOINed together.

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

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

OutputOutput

Di seguito è riportato l'output effettivo dell'esecuzione dell'istruzione SELECT JOIN UNION precedente.Next is the actual output from running the preceding SELECT JOIN UNION. I nomi dei parametri di output e i valori corrispondono a ciò che è chiaramente visibile nell'istruzione CREATE EVENT SESSION precedente.The output parameter names and values map to what is plainly visible in the preceding CREATE EVENT SESSION statement.

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].[counter]<=(16))   (Not_Applicable)
event_session_test3   5_TARGET               event_file                      (Not_Applicable)
event_session_test3   6_TARGET_SET           filename                        C:\Junk\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.This completes the the section on catalog views.

C.C. Viste a gestione dinamica (DMV)Dynamic management views (DMVs)

Si passerà ora a parlare delle DMV.We now shift to DMVs. In questa sezione vengono illustrate diverse istruzioni SELECT Transact-SQL, ognuna con uno scopo utile per le attività aziendali.This section provides several Transact-SQL SELECT statements which each serve a specific useful business purpose. Le istruzioni SELECT illustrano anche come unire le DMV con JOIN per eventuali altri usi voluti.Further, the SELECTs demonstrate how you can JOIN the DMVs together for any new uses you want.

La documentazione di riferimento per le DMV è disponibile in Viste a gestione dinamica degli eventi estesiReference documentation of the DMVs is available at Extended Events Dynamic Management Views

Se non diversamente specificato, in questo articolo le righe di output effettivo delle istruzioni SELECT che seguono sono generate da SQL Server 2016.In this article, any actual output rows from the following SELECTs are from SQL Server 2016, unless otherwise specified.

Ecco l'elenco delle istruzioni SELECT presenti in questa sezione C, dedicata alle DMV:Here is list of the SELECTs in this DMV section C:

C.1 Elenco di tutti i pacchettiC.1 List of all packages

Tutti gli oggetti che è possibile usare nell'area degli eventi estesi provengono da pacchetti caricati nel sistema.All the objects you can use in area of extended events come from packages which are loaded into the system. In questa sezione sono elencati tutti i pacchetti e le relative descrizioni.This section lists all the packages and their descriptions.

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

OutputOutput

Ecco l'elenco dei pacchetti.Here is the list of packages.

/***  (The unique p.guid values are not shown.)
Package        Package-Description
-------        -------------------
filestream     Extended events for SQL Server FILESTREAM and FileTable
package0       Default package. Contains all standard types, maps, compare operators, actions and targets
qds            Extended events for Query Store
SecAudit       Security Audit Events
sqlclr         Extended events for SQL CLR
sqlos          Extended events for SQL Operating System
SQLSatellite   Extended events for SQL Satellite
sqlserver      Extended events for Microsoft SQL Server
sqlserver      Extended events for Microsoft SQL Server
sqlserver      Extended events for Microsoft SQL Server
sqlsni         Extended events for Microsoft SQL Server
ucs            Extended events for Unified Communications Stack
XtpCompile     Extended events for the XTP Compile
XtpEngine      Extended events for the XTP Engine
XtpRuntime     Extended events for the XTP Runtime
***/

Definizioni degli acronimi riportati qui sopra:Definitions of the preceding initialisms:

  • clr = Common Language Runtime (.NET)clr = Common Language Runtime of .NET
  • qds = Query Data Store (archivio dati query)qds = Query Data Store
  • sni = Server Network Interface (interfaccia di rete del server)sni = Server Network Interface
  • ucs = Unified Communications Stack (stack delle comunicazioni unificate)ucs = Unified Communications Stack
  • xtp = Extreme Transaction Processingxtp = extreme transaction processing

C.2 Numero dei tipi di oggettoC.2 Count of every object type

In questa sezione è illustrato il tipo degli oggetti contenuti nei pacchetti eventi.This section tells us about the type of objects that event packages contain. È visualizzato l'elenco completo di tutti i tipi di oggetto presenti in sys.dm_xe_objects, nonché il numero per ciascun tipo.A complete list is displayed of all object types that are in sys.dm_xe_objects, along with the count for each type.

SELECT  --C.2
        Count(*)  AS [Count-of-Type],
        o.object_type
    FROM
        sys.dm_xe_objects  AS o
    GROUP BY
        o.object_type
    ORDER BY
        1  DESC;

OutputOutput

Di seguito è riportato il numero di oggetti per ogni tipo di oggetto.Here is the count of objects per object type. Sono presenti circa 1915 oggetti.There are about 1915 objects.

/***  Actual output, sum is about 1915:

Count-of-Type   object_type
-------------   -----------
1303            event
351             map
84              message
77              pred_compare
53              action
46              pred_source
28              type
17              target
***/

C.3 Istruzione SELECT per selezionare tutti gli elementi disponibili ordinati per tipoC.3 SELECT all available items sorted by type

L'istruzione SELECT seguente restituisce circa 1915 righe, una per ogni oggetto.The following SELECT returns about 1915 rows, one for each object.

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

OutputOutput

Per risvegliare l'interesse, di seguito è riportato un campione arbitrario degli oggetti restituiti dall'istruzione SELECT precedente.To whet your appetite, next is an arbitrary sampling of the objects returned by the preceding SELECT.

/***
Type-of-Item   Package        Item                          Item-Description
------------   -------        ----                          ----------------
action         package0       callstack                     Collect the current call stack
action         package0       debug_break                   Break the process in the default debugger
action         sqlos          task_time                     Collect current task execution time
action         sqlserver      sql_text                      Collect SQL text
event          qds            query_store_aprc_regression   Fired when Query Store detects regression in query plan performance
event          SQLSatellite   connection_accept             Occurs when a new connection is accepted. This event serves to log all connection attempts.
event          XtpCompile     cgen                          Occurs at start of C code generation.
map            qds            aprc_state                    Query Store Automatic Plan Regression Correction state
message        package0       histogram_event_required      A value is required for the parameter 'filtering_event_name' when source type is 0.
pred_compare   package0       equal_ansi_string             Equality operator between two ANSI string values
pred_compare   sqlserver      equal_i_sql_ansi_string       Equality operator between two SQL ANSI string values
pred_source    sqlos          task_execution_time           Get current task execution time
pred_source    sqlserver      client_app_name               Get the current client application name
target         package0       etw_classic_sync_target       Event Tracing for Windows (ETW) Synchronous Target
target         package0       event_counter                 Use the event_counter target to count the number of occurrences of each event in the event session.
target         package0       event_file                    Use the event_file target to save the event data to an XEL file, which can be archived and used for later analysis and review. You can merge multiple XEL files to view the combined data from separate event sessions.
target         package0       histogram                     Use the histogram target to aggregate event data based on a specific event data field or action associated with the event. The histogram allows you to analyze distribution of the event data over the period of the event session.
target         package0       pair_matching                 Pairing target
target         package0       ring_buffer                   Asynchronous ring buffer target.
type           package0       xml                           Well formed XML fragment
***/

C.4 Campi di dati disponibili per l'eventoC.4 Data fields available for your event

L'istruzione SELECT seguente restituisce tutti i campi dati specifici di un particolare tipo di evento.The following SELECT returns all the data fields that are particular to your event type.

  • Si noti l'elemento della clausola WHERE: column_type = 'data'.Note the WHERE clause item: column_type = 'data'.
  • È anche necessario modificare il valore della clausola WHERE in o.name =.Also, you would need to edit the WHERE clause value for 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];

OutputOutput

Le righe seguenti sono state restituite dall'istruzione SELECT, WHERE precedente o.name = 'lock_deadlock':The following rows were returned by the preceding SELECT, WHERE o.name = 'lock_deadlock':

  • Ogni riga rappresenta un filtro facoltativo per l'evento sqlserver.lock_deadlock .Each row represents an optional filter for the sqlserver.lock_deadlock event.
  • La colonna [Column-Description] è stata omessa dalla visualizzazione seguente.The [Column-Description] column is omitted from the following display. Il valore di questa colonna corrisponde spesso a NULL.Its value is often NULL.
/***
Actual output, except for the omitted Description column which is often NULL.
These rows are where object_type = 'lock_deadlock'.

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

C.5 sys.dm_xe_map_values e campi eventoC.5 sys.dm_xe_map_values and event fields

L'istruzione SELECT seguente inserisce una clausola JOIN in una vista complessa, sys.dm_xe_map_values.The following SELECT includes a JOIN to the tricky view named sys.dm_xe_map_values.

Lo scopo dell'istruzione SELECT è di visualizzare i numerosi campi che è possibile scegliere per la sessione evento.The purpose of the SELECT display the numerous fields that you can choose from for your event session. I campi evento possono essere usati in due modi:The event fields can be used in two ways:

  • Per scegliere i valori dei campi da scrivere nella destinazione per ogni occorrenza dell'evento.To choose which field values will be written to your target for each event occurrence..
  • Per filtrare le occorrenze dell'evento da inviare e quelle da non inviare alla destinazione.To filter which event occurrences will be sent to versus kept from your target.
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];

OutputOutput

Di seguito è riportato un campione delle 153 righe effettive di output dell'istruzione SELECT T-SQL precedente.Next is a sampling of the actual 153 rows of output from the preceding T-SQL SELECT. La riga per resource_type è pertinente al filtro predicato usato nell'esempio event_session_test3 in un altro punto di questo articolo.The row for resource_type is relevant to the predicate filtering used in the event_session_test3 example elsewhere in this article.

/***  5 sampled rows from the actual 153 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.
***/

C.6 Parametri per le destinazioniC.6 Parameters for targets

L'istruzione SELECT seguente restituisce ogni parametro per la destinazione.The following SELECT returns every parameter for your target. Ogni parametro è contrassegnato come obbligatorio o meno.Each parameter is tagged to indicate whether it is mandatory. I valori assegnati ai parametri influiscono sul comportamento della destinazione.The values you assign to parameters affect the behavior of the target.

  • Si noti l'elemento della clausola WHERE: object_type = 'customizable'.Note the WHERE clause item: object_type = 'customizable'.
  • È anche necessario modificare il valore della clausola WHERE in o.name =.Also, you would need to edit the WHERE clause value for 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];

OutputOutput

Le righe di parametri seguenti rappresentano un subset di quelle restituite dall'istruzione SELECT precedente in SQL Server 2016.The following rows of parameters are a subset of those returned by the preceding SELECT, in SQL Server 2016.

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

C.7 Istruzione SELECT di DMV con cast della colonna target_data in XMLC.7 DMV SELECT casting target_data column to XML

Questa istruzione SELECT di DMV restituisce righe di dati provenienti dalla destinazione della sessione evento attiva.This DMV SELECT returns data rows from the target of your active event session. Viene eseguito il cast dei dati in XML. In questo modo è possibile fare clic sulla cella restituita per visualizzarla in modo semplice in SSMS.The data is cast to XML, which makes its returned cell clickable for easy display in SSMS.

  • Se la sessione evento viene arrestata, l'istruzione SELECT restituirà zero righe.If your event session is stopped, this SELECT will return zero rows.
  • È necessario modificare il valore della clausola WHERE in s.name =.You would need to edit the WHERE clause value for 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 XMLOutput, the only row, including its XML cell

Di seguito è riportata l'unica riga di output dell'istruzione SELECT precedente.Here is the only row that is output from the preceding SELECT. La colonna XML-Cast contiene una stringa XML riconosciuta come tale da SSMS.The column XML-Cast contains a string of XML that SSMS understands is XML. SSMS quindi comprende che la cella XML-Cast deve essere resa selezionabile.Therefore SSMS understands it should make the XML-Cast cell clickable.

Per questa esecuzione:For this run:

  • Il valore s.name = è stato impostato su una sessione per l'evento checkpoint_begin .The s.name = value was set to an event session for the checkpoint_begin event.
  • La destinazione era un ring_buffer.The target was a 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: codice XML abbellito quando si fa clic sulla cellaOutput, XML displayed pretty when cell is clicked

Quando si fa clic sulla cella XML-Cast, compare la visualizzazione abbellita seguente.When the XML-Cast cell is clicked, the following pretty display appears.

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

C.8 Istruzione SELECT da una funzione che recupera dati event_file dall'unità discoC.8 SELECT from a function to retrieve event_file data from disk drive

Si supponga che la sessione evento abbia raccolto alcuni dati e in seguito sia stata arrestata.Suppose your event session gathered some data and later was stopped. Se la definizione della sessione prevede l'uso della destinazione event_file, è comunque possibile recuperare i dati chiamando la funzione sys.fn_xe_target_read_file.If your session was defined to use the event_file target, you could still retrieve the data by calling the function sys.fn_xe_target_read_file.

  • Prima di eseguire questa istruzione SELECT è necessario modificare il percorso e il nome file nel parametro della chiamata della funzione.You must edit your path and file name into the parameter of the function call, before you run this SELECT.
    • 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.Pay no attention to the extra digits that SQL system embeds into your actual .XEL file names each time you restart your session. È sufficiente specificare il nome radice e l'estensione normali.Just give the normal root name and extension.
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:\Junk\Checkpoint_Begins_ES*.xel',  -- Example.

            NULL, NULL, NULL
        )  AS f;

Output: righe restituite dalla funzione SELECT FROMOutput, rows returned by SELECT FROM the function

Di seguito sono riportate le righe restituite dalla funzione SELECT FROM precedente.Next are the rows returned by the preceding SELECT FROM the function. La colonna con il codice XML, all'estrema destra, contiene i dati specifici dell'occorrenza dell'evento.The far right XML column contains the data that is specifically about the event occurrence.

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:\Junk\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:\Junk\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:\Junk\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:\Junk\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 XMLOutput, one XML cell

Di seguito è riportato il contenuto della prima cella di XML, dal set di righe restituito in precedenza.Here is the contents of the first XML cell, from the preceding returned rowset.

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