SELECT- und JOIN-Anweisungen von Systemsichten für erweiterte Ereignisse in SQL ServerSELECTs and JOINs From System Views for Extended Events in SQL Server

DIESES THEMA GILT FÜR:jaSQL Server (ab 2014)jaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2014)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Dieser Artikel beschreibt die zwei Gruppen von Systemsichten, die mit erweiterten Ereignissen in Microsoft SQL Server und im Azure SQL Database-Clouddienst zusammenhängen.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. Dieser Artikel beschreibt:The article illustrates:

  • wie mithilfe der JOIN-Anweisung verschiedene Systemsichten zusammengefügt werden.How to JOIN various system views.
  • wie eine SELECT-Anweisung für bestimmte Informationen der Systemsichten durchgeführt wird.How to SELECT particular kinds of information from the system views.
  • wie die gleiche Ereignissitzungsinformation von verschiedenen technologischen Standpunkten aus dargestellt wird, was Ihr Verständnis von jeder Perspektive vertieft.How the same event session information is represented from various technological perspectives, which reinforces your understanding of each perspective.

Die meisten Beispiele werden für SQL Server geschrieben.Most of the examples are written for SQL Server. Mit kleineren Änderungen könnten sie auf der SQL-Datenbank ausgeführt werden.But with minor edits they would run on SQL Database.

A.A. Grundlegende InformationenFoundational information

Es gibt zwei Sammlungen von Systemsichten für erweiterte Ereignisse:There are two sets of system views for extended events:

Katalogsichten:Catalog views:

  • Diese Sichten speichern Informationen über die Definition jeder Ereignissitzung, die durch CREATE EVENT SESSIONoder durch eine Entsprechung der SSMS-Benutzeroberfläche erstellt wird.These views store information about the definition of each event session that is created by CREATE EVENT SESSION, or by an SSMS UI equivalent. Diese Sichten wissen jedoch nicht, ob eine Sitzung jemals ausgeführt wurde.But these views know nothing about whether any sessions have ever started running.

    • Wenn z.B. der Objekt-Explorer von SSMS (SQL Server Management Studio) anzeigt, dass keine Ereignissitzungen definiert sind, würde das Ausführen einer SELECT-Anweisung in der Sicht sys.server_event_session_targets null (0) Zeilen zurückgeben.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.
  • Das Namenspräfix ist:Name prefix is:

    • Das Namenspräfix auf SQL Server ist sys.server_event_session\.sys.server_event_session** is the name prefix on SQL Server.
    • Das Namenspräfix in der SQL-Datenbank ist sys.database_event_session\.sys.database_event_session** is the name prefix on SQL Database.

Dynamische Verwaltungssichten (Dynamic management views; DMVs):Dynamic management views (DMVs):

  • Speichern Informationen über die aktuelle Aktivität beim Ausführen von Ereignissitzungen.Store information about the current activity of running event sessions. Aber diese DMVs wissen nur wenig über die Definition der Sitzungen.But these DMVs know little about the definition of the sessions.

    • Auch wenn derzeit alle Eventsitzungen beendet werden, würde aus der Ansicht sys.dm_xe_packages SELECT weiterhin Zeilen zurückgegeben, da verschiedene Pakete beim Serverstart in den aktiven Arbeitsspeicher geladen werden.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.
    • Aus demselben Grund würden sys.dm_xe_objects sys.dm_xe_object_columns would also still return rows.For the same reason, sys.dm_xe_objects sys.dm_xe_object_columns would also still return rows.
  • Namenspräfix für erweiterte Ereignisse DMVs ist:Name prefix for extended events DMVs is:

    • Das Namenspräfix auf SQL Server ist sys.dm_xe_\.sys.dm_xe_** is the name prefix on SQL Server.
    • Das Namenspräfix in der SQL-Datenbank ist in der Regel sys.dm_xe_database_\.sys.dm_xe_database_** is generally the name prefix on SQL Database.

Berechtigungen:Permissions:

Die folgende Berichtigung ist notwendig, um SELECT für Systemsichten ausführen zu können:To SELECT from the system views, the following permission is necessary:

  • VIEW SERVER STATE – wenn es um Microsoft SQL Server handelt.VIEW SERVER STATE - if on Microsoft SQL Server.
  • VIEW DATABASE STATE – wenn es sich um eine Azure SQL-Datenbank handelt.VIEW DATABASE STATE - if on Azure SQL Database.

B.B. KatalogsichtenCatalog views

Dieser Abschnitt stimmt mit drei verschiedenen technologischen Perspektiven auf der gleichen definierten Ereignissitzung überein und bezieht sich auf sie.This section matches and correlates three different technological perspectives on the same defined event session. Die Sitzung wurde definiert und kann im Objekt-Explorer von SQL Server Management Studio (SSMS.exe) angezeigt werden. Diese Sitzung wird derzeit jedoch nicht ausgeführt.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.

Es wird empfohlen, jeden Monat das neueste Update von SSMS zu installieren, um unerwartete Fehler zu vermeiden.Every month it is wise to install the latest update of SSMS, to avoid unexpected failures.

Die Referenzdokumentation zu den Katalogsichten für erweiterte Ereignisse finden Sie unter Katalogsichten für erweiterte Ereignisse (Transact-SQL).Reference documentation about the catalog views for extended events is at Extended Events Catalog Views (Transact-SQL).

 

Die Reihenfolge in diesem Abschnitt B:The sequence in this section B:

  • B.1 Die Perspektive der SSMS-BenutzeroberflächeB.1 SSMS UI perspective

    • Erstellen Sie mithilfe der SSMS-Benutzeroberfläche die Definition der Ereignissitzung.Create the definition of the event session, by using the SSMS UI. Screenshots zeigen eine Schritt-für-Schritt-Anleitung an.Step-by-step screenshots are shown.
  • B.2 Die Perspektive von Transact-SQLB.2 Transact-SQL perspective

    • Verwenden Sie das SSMS-Kontextmenü, um die definierte Ereignissitzung in die entsprechende Anweisung CREATE EVENT SESSION von Transact-SQL zurückzuentwickeln.Use the SSMS context menu to reverse engineer the defined event session into the equivalent Transact-SQL CREATE EVENT SESSION statement. T-SQL zeigt eine perfekte Übereinstimmung zu der Auswahl der SSMS-Screenshots.The T-SQL shows a perfect match to the SSMS screenshots choices.
  • B.3 Die Perspektive SELECT JOIN UNION der KatalogsichtB.3 Catalog view SELECT JOIN UNION perspective

    • Geben Sie eine SELECT-Anweisung von T-SQL aus den Systemkatalogsichten für unsere Ereignissitzung aus.Issue a T-SQL SELECT statement from the system catalog views for our event session. Die Ergebnisse stimmen mit den Spezifikationen der CREATE EVENT SESSION -Abfrage überein.The results match the CREATE EVENT SESSION statement specifications.

 

B.1 Die Perspektive der SSMS-BenutzeroberflächeB.1 SSMS UI perspective

Im Objekt-Explorervon SSMS können Sie das Dialogfeld Neue Sitzung ausführen, indem Sie Management > Extended Eventserweitern und anschließend mit der rechten Maustaste auf Sitzungen > Neue Sitzungklicken.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.

Im großen Dialogfeld New Session (Neue Sitzung) wird im ersten Abschnitt namens General (Allgemein) angezeigt, dass die Option Start the event session at server startup (Ereignissitzung beim Serverstart starten) ausgewählt wurde.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.

Neue Sitzung > Allgemein, Ereignissitzung beim Serverstart starten.

Als nächstes sehen wir, dass im Abschnitt Events (Ereignisse), das Ereignis lock_deadlock ausgewählt wurde.Next on the Events section, we see the lock_deadlock event was chosen. Drei Actions (Aktionen) wurden für dieses Ereignis ausgewählt.For that event, we see that three Actions have been selected. Dies bedeutet, dass die Schaltfläche Configure (Konfigurieren) geklickt wurde, die nach dem Auswählen ausgegraut wird.This means the Configure button was clicked, which becomes gray after being clicked.

Neue Sitzung > Ereignisse, Globale Felder (Aktionen)

Wir sind immer noch im Abschnitt Events > Configure (Ereignisse > Konfigurieren) und sehen als nächstes, dass resource_type auf PAGE festgelegt wurde.Next, still on the Events > Configure section, we see that resource_type has been set to PAGE. Dies bedeutet, dass Ereignisdaten nicht vom Ereignismodul zum Ziel gesendet wird, wenn der Wert resource_type nicht PAGEist.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.

Es werden zusätzliche Prädikatfilter für die Datenbank und für einen Leistungsindikator angezeigt.We see additional predicate filters for the database name and for a counter.

Neue Sitzung > Ereignisse, Prädikatfelder filtern (Aktionen)

Im Abschnitt Data Storage (Datenspeicher) sehen Sie, dass event_file als Ziel ausgewählt wurde.Next on the Data Storage section, we see the event_file has been chosen as a target. Darüber hinaus sehen Sie, dass die Option Enable file rollover (Dateirollover aktivieren) ausgewählt wurde.Further, we see that the Enable file roleover option has been selected.

Neue Sitzung > Datenspeicher, eventfile_enablefileroleover

Schließlich können Sie im Abschnitt Advanced (Erweitert) erkennen, dass der Wert Maximum dispatch latency (Maximale Verteilungslatenzzeit) auf 4 Sekunden reduziert wurde.Finally, on the Advanced section, we see that the Maximum dispatch latency value was reduced down to 4 seconds.

Neue Sitzung > Erweitert, Maximale Verteilungslatenzzeit

Dadurch ist die Perspektive der SSMS-Benutzeroberfläche mit der Definition der Ereignissitzung abgeschlossen.This completes the SSMS UI perspective on an event session definition.

B.2 Die Perspektive von Transact-SQLB.2 Transact-SQL perspective

Unabhängig davon, wie eine Definition für die Ereignissitzung erstellt wurde, kann die Sitzung der SSMS-Benutzeroberfläche in perfekter Übereinstimmung mit dem Transact-SQL-Skript zurückentwickelt werden.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. Sie können die vorhergehenden Screenshots von „New Session“ (Neue Sitzung) überprüfen und anschließend deren sichtbare Spezifikationen mit den Klauseln des folgenden generierten CREATE EVENT SESSION -Skript von T-SQL vergleichen.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.

Sie können mit der rechten Maustaste im Objekt-Explorer auf den Sitzungsknoten klicken und anschließend Script Session as > CREATE to > Clipboard(Skript für Sitzung als > CREATE to > Zwischenablage) auswählen, um eine Ereignissitzung zurückzuentwickeln.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.

Das folgende T-SQL-Skript wurde durch Zurückentwickeln mit SSMS erstellt.The following T-SQL script was created by reverse engineering with SSMS. Anschließend wurde das Skript manuell durch strategische Bearbeitung der Leerzeichen verschönert.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
    );

Dadurch ist die T-SQL-Perspektive abgeschlossen.This completes the T-SQL perspective.

B.3 Die Perspektive SELECT JOIN UNION der KatalogsichtB.3 Catalog view SELECT JOIN UNION perspective

Machen Sie sich keine Sorgen!Do not be afraid! Die folgende SELECT-Anweisung von T-SQL ist nur so lang, da durch die UNION-Klausel mehrere kleine SELECT-Anweisungen vereinigt wurden.The following T-SQL SELECT statement is long only because it UNIONs several small SELECTs together. Jede der kleinen SELECT-Anweisungen kann einzeln ausgeführt werden.Any of the small SELECTs can be run on its own. Die kleinen SELECT-Anweisungen zeigen an, wie die verschiedenen Katalogsichten des Systems durch JOIN verknüpft werden müssen.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]
;

AusgabeOutput

Als nächstes wird die tatsächliche Ausgabe nach dem Ausführen von SELECT JOIN UNION angezeigt.Next is the actual output from running the preceding SELECT JOIN UNION. Der Ausgabeparameter benennt und bewertet die Zuordnung von dem, was schlicht in der vorherigen CREATE EVENT SESSION-Anweisung zu sehen ist.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

Dadurch ist der Abschnitt über Katalogsichten abgeschlossen.This completes the the section on catalog views.

C.C. Dynamische Verwaltungssichten (DMVs)Dynamic management views (DMVs)

Wir wenden uns jetzt den DMVs zu.We now shift to DMVs. Dieser Abschnitt enthält mehrere Transact-SQL-SELECT-Anweisungen, die jeweils für bestimmte, nützliche Unternehmenszwecke gedacht sind.This section provides several Transact-SQL SELECT statements which each serve a specific useful business purpose. Des Weiteren zeigt die SELECT-Anweisung, wie sie mit JOIN die DMVs für jede beliebige Verwendung verknüpfen können.Further, the SELECTs demonstrate how you can JOIN the DMVs together for any new uses you want.

Die Referenzdokumentation für die DMVs finden Sie unter Dynamische Verwaltungssichten für erweiterte Ereignisse.Reference documentation of the DMVs is available at Extended Events Dynamic Management Views

Wenn nicht anders angegeben sind alle tatsächlichen Ausgabezeilen der folgenden SELECT-Anweisungen in diesem Artikel von SQL Server 2016.In this article, any actual output rows from the following SELECTs are from SQL Server 2016, unless otherwise specified.

Hier ist die Liste der SELECT-Anweisungen in dieser DMV aus dem Abschnitt C:Here is list of the SELECTs in this DMV section C:

C.1 Liste aller PaketeC.1 List of all packages

Alle Objekte, die Sie im Bereich erweitere Ereignisse verwenden können, stammen von Paketen, die in Ihr System geladen werden.All the objects you can use in area of extended events come from packages which are loaded into the system. In diesem Abschnitt werden alle Pakete und deren Beschreibungen aufgeführt.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;

AusgabeOutput

Hier ist die Liste der Pakete.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
***/

Definitionen der vorhergehenden Abkürzungen:Definitions of the preceding initialisms:

  • clr = Common Language Runtime von .NETclr = Common Language Runtime of .NET
  • qds = Query Data Store (Abfragedatenspeicher)qds = Query Data Store
  • sni = Server Network Interface (Server-Netzwerkschnittstelle)sni = Server Network Interface
  • ucs = Unified Communications Stack (Unified Communications-Stapel)ucs = Unified Communications Stack
  • xtp = Extreme Transaction Processingxtp = extreme transaction processing

C.2 Anzahl jedes ObjekttypsC.2 Count of every object type

Dieser Abschnitt beschreibt die Objekttypen, die in Ereignispaketen enthalten sind.This section tells us about the type of objects that event packages contain. Eine vollständige Liste aller Objekttypen, die in sys.dm_xe_objects zusammen mit der Anzahl der Objekte für jeden Typ angezeigt werden.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;

AusgabeOutput

Hier ist die Anzahl der Objekte pro Objekttyp.Here is the count of objects per object type. Es gibt ungefähr 1915 Objekte.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 Auswählen aller verfügbaren Elemente nach Typ mit der SELECT-AnweisungC.3 SELECT all available items sorted by type

Die folgende SELECT-Anweisung gibt in etwa 1915 Zeilen zurück, eine für jedes Objekt.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];

AusgabeOutput

Als nächstes könnten für Sie das willkürliche Sampling der Objekte, die von der vorhergehenden SELECT-Anweisung zurückgegeben wurde, interessant sein.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 Verfügbare Datenfelder für Ihr EreignisC.4 Data fields available for your event

Die folgende SELECT-Anweisung gibt alle Datenfelder zurück, die speziell für Ihren Ereignistyp gelten.The following SELECT returns all the data fields that are particular to your event type.

  • Beachten Sie das Klauselelement WHERE: column_type = 'data'.Note the WHERE clause item: column_type = 'data'.
  • Darüber hinaus müssen Sie den Wert der Klausel WHERE für o.name =bearbeiten.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];

AusgabeOutput

Die folgenden Zeilen wurden von der vorhergehenden SELECT-Anweisung zurückgegeben, wobei WHERE o.name = 'lock_deadlock':The following rows were returned by the preceding SELECT, WHERE o.name = 'lock_deadlock':

  • Jede Zeile stellt einen optionalen Filter für das Ereignis sqlserver.lock_deadlock dar.Each row represents an optional filter for the sqlserver.lock_deadlock event.
  • Die Spalte [Column-Description] (Spaltenbeschreibung) wird im folgenden Screenshot ausgelassen.The [Column-Description] column is omitted from the following display. Der Wert ist häufig 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 und EreignisfelderC.5 sys.dm_xe_map_values and event fields

Die folgende SELECT-Anweisung erhält die JOIN-Klausel mit der schwierigen Sicht sys.dm_xe_map_values.The following SELECT includes a JOIN to the tricky view named sys.dm_xe_map_values.

Der Zweck der SELECT-Anweisung ist es, die zahlreichen Felder anzuzeigen, aus denen Sie für Ihre Ereignissitzung wählen können.The purpose of the SELECT display the numerous fields that you can choose from for your event session. Die Ereignisfelder können auf zwei Arten verwendet werden:The event fields can be used in two ways:

  • Zum Auswählen, welche Feldwerte in Ihr Ziel für jedes Ereignisvorkommen geschrieben werden.To choose which field values will be written to your target for each event occurrence..
  • Zum Filtern, welche Ereignisvorkommen zu Ihrem Ziel gesendet werden, bzw. davon abgehalten werden.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];

AusgabeOutput

Anschließend wird eine Stichprobe der tatsächlichen 153 Spalten der Ausgabe der vorhergehenden SELECT-Anweisung von T-SQL durchgeführt.Next is a sampling of the actual 153 rows of output from the preceding T-SQL SELECT. Die Zeile für resource_type ist relevant für das im Beispiel event_session_test3 durchführte Prädikatfiltern, das an anderer Stelle in diesem Artikel vorgestellt wird.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 Parameter für ZieleC.6 Parameters for targets

Die folgende SELECT-Anweisung gibt jeden Parameter für Ihr Ziel zurück.The following SELECT returns every parameter for your target. Jeder Parameter ist markiert, um anzuzeigen, ob er verbindlich ist, oder nicht.Each parameter is tagged to indicate whether it is mandatory. Die Werte, die Sie Parametern zuweisen, beeinflussen das Verhalten des Ziels.The values you assign to parameters affect the behavior of the target.

  • Beachten Sie das Klauselelement WHERE: object_type = 'customizable'.Note the WHERE clause item: object_type = 'customizable'.
  • Darüber hinaus müssen Sie den Wert der Klausel WHERE für o.name =bearbeiten.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];

AusgabeOutput

Die folgenden Zeilen der Parameter sind eine Teilmenge von denen, die in SQL Server 2016 von der vorhergehenden SELECT-Anweisung zurückgegeben wurden.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 Typumwandlung der target_data-Spalte nach XML durch DMV SELECTC.7 DMV SELECT casting target_data column to XML

Diese DMV SELECT-Anweisung gibt Datenzeilen des Ziels Ihrer aktiven Ereignissitzung zurück.This DMV SELECT returns data rows from the target of your active event session. Die Daten werden in XML umgewandelt. Dadurch kann die zurückgegebene Zelle zum einfachen Anzeigen in SSMS geklickt werden.The data is cast to XML, which makes its returned cell clickable for easy display in SSMS.

  • Wenn die Ereignissitzung beendet wird, gibt SELECT null Zeilen zurück.If your event session is stopped, this SELECT will return zero rows.
  • Sie müssen den Wert der WHERE-Klausel für s.name =bearbeiten.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!>';

Ausgabe der einzelnen Zeile einschließlich der XML-ZelleOutput, the only row, including its XML cell

Hier ist die einzige Zeile, die von der vorhergehenden SELECT-Anweisung ausgegeben wurde.Here is the only row that is output from the preceding SELECT. Die Spalte XML-Cast (XML-Umwandlung) enthält eine XML-Zeichenfolge, die von SSMS auch als XML verstanden wird.The column XML-Cast contains a string of XML that SSMS understands is XML. Daher erkennt SSMS, dass die Zelle der XML-Umwandlung klickbar gemacht werden sollte.Therefore SSMS understands it should make the XML-Cast cell clickable.

Für diese Ausführung:For this run:

  • Der Wert s.name = wurde auf eine Ereignissitzung für das Ereignis checkpoint_begin festgelegt.The s.name = value was set to an event session for the checkpoint_begin event.
  • Das Ziel war 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>

Beim Klicken in die Zelle erfolgt die Ausgabe in strukturiertem XML.Output, XML displayed pretty when cell is clicked

Wenn die Zelle „XML-Cast“ (XML-Umwandlung) ausgewählt wird, erscheint folgende Anzeige.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 Auswählen aus einer Funktion zum Abrufen von event_file-Daten vom Laufwerk durch SELECTC.8 SELECT from a function to retrieve event_file data from disk drive

Angenommen, Ihre Ereignissitzungen haben Daten erfasst und wurden später beendet.Suppose your event session gathered some data and later was stopped. Wenn Ihre Sitzung definiert wurde, das Ziel „event_file“ zu benutzen, können Sie die Daten immer noch abrufen, indem Sie die Funktion sys.fn_xe_target_read_fileaufrufen.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.

  • Sie müssen den Pfad und Dateinamen im Parameter des Funktionsaufrufs anpassen, bevor Sie diese SELECT-Anweisung ausführen.You must edit your path and file name into the parameter of the function call, before you run this SELECT.
    • Achten Sie nicht auf die zusätzlichen Ziffern, die SQL-System jedes Mal, wenn Sie die Sitzung neu starten, in Ihre tatsächlichen. XEL-Dateinamen einbettet.Pay no attention to the extra digits that SQL system embeds into your actual .XEL file names each time you restart your session. Geben Sie einfach den normalen Stammnamen und die Erweiterung an.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;

Ausgabe der Zeilen, wenn die SELECT FROM-Anweisung auf eine Funktion angewendet wirdOutput, rows returned by SELECT FROM the function

Die Zeilen, die von der vorhergehenden SELECT FROM-Anweisung zurückgegeben werden, wenn diese auf eine Funktion angewendet wirdNext are the rows returned by the preceding SELECT FROM the function. Die XML-Spalte ganz rechts enthält die Daten, die insbesondere mit dem Ereignisvorkommen zusammenhängen.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>

Ausgabe einer XML-ZelleOutput, one XML cell

Hier wird der Inhalt der ersten XML-Zelle aus dem vorherigen zurückgegebenen Rowset gezeigt.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>