Freigeben über


SELECTs und JOINs aus Systemansichten für erweiterte Ereignisse

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-Datenbank in Microsoft Fabric

In diesem Artikel werden die beiden Systemansichten erläutert, die sich auf erweiterte Ereignisse beziehen. Dieser Artikel beschreibt:

  • Wie man verschiedene JOIN Systemansichten verwendet.
  • Wie man SELECT bestimmte Arten von Informationen aus den Systemansichten.

Es gibt zwei Sammlungen von Systemsichten für erweiterte Ereignisse:

Katalogansichten

  • Diese Ansichten speichern Informationen zur Definition jeder Ereignissitzung, die von CREATE EVENT SESSION (Transact-SQL) erstellt wird. Diese Sichten wissen jedoch nicht, ob eine Sitzung jemals ausgeführt wurde.
    • Wenn beispielsweise im SSMS-Objekt-Explorer keine Ereignissitzungen definiert sind, würde SELECTing aus der Ansicht sys.server_event_session_targets null Zeilen zurückgeben.
  • Die meisten Beispiele werden für SQL Server und azure SQL Managed Instance geschrieben. Mit geringfügigen Bearbeitungen würden sie jedoch in der Azure SQL-Datenbank und der SQL-Datenbank in Fabric ausgeführt, indem sie den server-DMV-Namen in database Folgendes ändern:
    • sys.server_event_session* ist das Namenspräfix für SQL Server und azure SQL Managed Instance.
    • sys.database_event_session* ist das Namenspräfix in der Azure SQL-Datenbank und der SQL-Datenbank in Fabric.
    • Weitere Informationen finden Sie unter "Erweiterte Ereigniskatalogansichten".

Dynamische Verwaltungssichten (DMVs)

  • Speichern Informationen über die aktuelle Aktivität beim Ausführen von Ereignissitzungen. Aber diese DMVs wissen nur wenig über die Definition der Sitzungen.

    • Auch wenn alle Ereignissitzungen zurzeit beendet werden, gibt eine SELECT von der Ansicht sys.dm_xe_packages immer noch Zeilen zurück, da verschiedene Pakete nach einem Serverstart in den aktiven Arbeitsspeicher geladen bleiben.
    • Aus demselben Grund sys.dm_xe_objects und sys.dm_xe_object_columns immer noch Zeilen zurückgeben.
  • Namenspräfix für erweiterte Ereignisse DMVs ist:

    • sys.dm_xe_* ist das Namenspräfix für SQL Server und azure SQL Managed Instance.
    • sys.dm_xe_database_* ist üblicherweise das Namenspräfix bei Azure SQL-Datenbank und SQL-Datenbank in Fabric.

Erlaubnisse

Für den Zugriff von SELECT auf die Systemansichten ist die folgende Berechtigung erforderlich:

  • SQL Server 2019 (15.x) und frühere Versionen erfordern VIEW SERVER STATE berechtigungen auf dem Server.
  • SQL Server 2022 (16.x) und höhere Versionen erfordern VIEW SERVER PERFORMANCE STATE berechtigungen auf dem Server.
  • Azure SQL-Datenbank und SQL-Datenbank in Fabric erfordern VIEW DATABASE PERFORMANCE STATE Berechtigung in der Datenbank.

Katalogansichten

Erstellen Sie für diese Seite eine Erweiterte Ereignissitzung mit SSMS oder mit T-SQL. Installieren Sie die neueste Version von SQL Server Management Studio (SSMS).

Erstellen einer Sitzung in SQL Server Management Studio (SSMS)

In SSMS können Sie im Objekt-Explorer das Dialogfeld Neue Sitzung starten, indem Sie Verwaltung erweitern, dann > und anschließend mit der rechten Maustaste auf Sitzungen klicken, um Neue Sitzung zu öffnen.

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.

Screenshot von SSMS der neuen Sitzung >

Als Nächstes im Abschnitt "Ereignisse " wird angezeigt, dass das lock_deadlock Ereignis ausgewählt wurde. Drei Actions (Aktionen) wurden für dieses Ereignis ausgewählt. Dies bedeutet, dass die Schaltfläche " Konfigurieren " ausgewählt wurde, die nach der Auswahl grau wird.

Screenshot von SSMS der Ereignisse der neuen Sitzung, Globale Felder (Aktionen) >

Als Nächstes wird im Abschnitt "Ereignisse>Konfigurieren" angezeigt, dass resource_type auf PAGE gesetzt wurde. Dies bedeutet, dass Ereignisdaten nicht vom Ereignismodul an das Ziel gesendet werden, wenn der resource_type Wert etwas anderes ist als PAGE.

Es werden zusätzliche Prädikatfilter für die Datenbank und für einen Leistungsindikator angezeigt.

> Events, Filter Predicate Fields (Actions).

Im Abschnitt Data Storage (Datenspeicher) sehen Sie, dass event_file als Ziel ausgewählt wurde. Darüber hinaus sehen Sie, dass die Option Enable file rollover (Dateirollover aktivieren) ausgewählt wurde.

Screenshot von SSMS des neuen Sitzungsdatenspeichers > 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.

Screenshot von SSMS der erweiterten neuen Sitzung > , maximale Verteilerlatenz.

Erstellen einer Ereignissitzung in T-SQL

Unabhängig davon, wie eine Ereignissitzungsdefinition erstellt wird, kann die Sitzung von SSMS in ein perfekt passendes Transact-SQL Skript umgewandelt werden. Sie können die vorherigen Screenshots der neuen Sitzung untersuchen und ihre sichtbaren Spezifikationen mit den Klauseln im folgenden generierten T-SQL-Skript CREATE EVENT SESSION vergleichen.

Zum Reverse Engineering einer Ereignissitzung können Sie im Objekt-Explorer mit der rechten Maustaste auf den Sitzungsknoten klicken und dann Skriptsitzung als>CREATE ** >Zwischenablage auswählen.

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

Katalogansicht SELECT JOIN UNION

Die folgende T-SQL-Anweisung SELECT ist nur lang, weil sie mehrere kleine SELECTs mit UNION zusammenführt. Jede der kleinen SELECT-Anweisungen kann einzeln ausgeführt werden. Die kleinen SELECT-Anweisungen zeigen an, wie die verschiedenen Katalogsichten des Systems durch JOIN verknüpft werden müssen.

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

Die folgende Tabelle zeigt das Ergebnis der vorherigen Ausführung SELECT JOIN UNION. Die Namen und Werte des Ausgabeparameters entsprechen dem, was in der vorherigen CREATE EVENT SESSION Anweisung deutlich sichtbar ist.

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

Dadurch ist der Abschnitt über Katalogsichten abgeschlossen.

Dynamische Verwaltungssichten (DMVs)

Dieser Abschnitt enthält mehrere Transact-SQL SELECT Aussagen, die jeweils einem bestimmten nützlichen Geschäftszweck dienen. Darüber hinaus zeigen die SELECTs, wie Sie die DMVs für alle neuen Anwendungsfälle zusammenführen können JOIN.

Referenzdokumentation der DMVs ist bei Extended Events Dynamic Management Views verfügbar

Alle Objekte, die Sie im Bereich erweitere Ereignisse verwenden können, stammen von Paketen, die in Ihr System geladen werden. In diesem Abschnitt werden alle Pakete und deren Beschreibungen aufgeführt.

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

Output

Hier ist die Liste der Pakete.

Paket Paketbeschreibung
filestream Erweiterte Ereignisse für FILESTREAM und FileTable in SQL Server
package0 Standardpaket: Es enthält alle Standardtypen, Zuordnungen, Vergleichsoperatoren, Aktionen und Ziele.
qds Erweiterte Ereignisse für Abfragespeicher
SecAudit Sicherheitsüberwachungsereignisse
sqlclr Erweiterte Ereignisse für SQL CLR
sqlos Erweiterte Ereignisse für SQL-Betriebssystem
SQLSatellite Erweiterte Ereignisse für SQL Server Machine Learning Services
sqlserver Erweiterte Ereignisse für Microsoft SQL Server
sqlsni Erweiterte Ereignisse für Microsoft SQL Server
ucs Erweiterte Ereignisse für Unified Communications-Stapel
XtpCompile Erweiterte Ereignisse für die XTP-Kompilierung
XtpEngine Erweiterte Ereignisse für die XTP-Engine
XtpRuntime Erweiterte Ereignisse für die XTP-Runtime

Definitionen der vorhergehenden Abkürzungen:

  • clr = Gemeinsame Sprachlaufzeit von .NET
  • qds = Abfragedatenspeicher
  • sni = Servernetzwerkschnittstelle
  • ucs = Einheitlicher Kommunikations-Stack
  • xtp = Extreme Transaktionsverarbeitung

Wählen Sie alle verfügbaren Elemente nach Typ sortiert aus.

Im Folgenden SELECT wird eine Zeile für jedes Objekt zurückgegeben.

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

Für Ihr Ereignis verfügbare Datenfelder

Das folgende SELECT gibt alle Datenfelder zurück, die speziell für Ihren Ereignistyp sind.

  • Beachten Sie das WHERE Klauselelement: column_type = 'data'.
  • Außerdem müssen Sie den Wert der Klausel WHERE für o.name = bearbeiten.
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

Die folgenden Zeilen wurden von der vorherigen SELECTWHERE o.name = 'lock_deadlock'Zeile zurückgegeben:

  • Jede Zeile stellt einen optionalen Filter für das sqlserver.lock_deadlock Ereignis dar.
  • Die Column-Description Spalte wird aus der folgenden Anzeige weggelassen. Der Wert ist häufig NULL.
  • Dies ist die tatsächliche Ausgabe, mit Ausnahme der ausgelassenen Beschreibungsspalte, die häufig NULList.
  • Diese Zeilen sind WHERE object_type = 'lock_deadlock'.
Paket Ereignis 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 und Ereignisfelder

Im Folgenden SELECT finden Sie eine JOIN der sys.dm_xe_map_values Ansicht.

Der Zweck der SELECT-Anzeige besteht darin, die zahlreichen Felder anzuzeigen, aus denen Sie für Ihre Ereignissitzung auswählen können. Die Ereignisfelder können auf zwei Arten verwendet werden:

  • Um auszuwählen, welche Feldwerte bei jedem Ereignisvorkommen in Ihr Ziel geschrieben werden.
  • Zum Filtern, welche Ereignisvorkommen zu Ihrem Ziel gesendet werden, bzw. davon abgehalten werden.
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

Als Nächstes wird eine Stichprobe der über 100 tatsächlichen Zeilen der Ausgabe aus dem vorherigen T-SQL-Objekt SELECT gezeigt. In der Zeile für resource_type wird auf die Prädikatfilterung relevant Bezug genommen, die im event_session_test3 Beispiel an anderer Stelle in diesem Artikel verwendet wird.

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

Parameter für Ziele

Im Folgenden gibt SELECT alle Parameter für Ihr Zielobjekt zurück. Jeder Parameter ist markiert, um anzuzeigen, ob er verbindlich ist, oder nicht. Die Werte, die Sie Parametern zuweisen, beeinflussen das Verhalten des Ziels.

  • Beachten Sie das WHERE Klauselelement: object_type = 'customizable'.
  • Außerdem müssen Sie den Wert der Klausel WHERE für o.name = bearbeiten.
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

Die folgenden Parameterzeilen sind eine kleine Teilmenge der Parameter, die vom vorherigen SELECT zurückgegeben werden.

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

DMV SELECT konvertiert die Spalte target_data in XML

Diese DMV SELECT gibt Datenzeilen aus dem Ziel Ihrer aktiven Ereignissitzung zurück. Die Daten werden in XML umgewandelt, wodurch die zurückgegebene Zelle für die einfache Anzeige in SSMS ausgewählt werden kann.

  • Wenn Ihre Ereignissitzung gestoppt wird, wird diese SELECT null Zeilen zurückgeben.
  • Sie sollten den Wert der WHERE-Klausel für s.name = bearbeiten.
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-Zelle

Dies ist die einzige Zeile, die aus dem vorhergehenden SELECT ausgegeben wird. Die Spalte XML-Cast enthält eine XML-Zeichenfolge, die SSMS als XML erkennt. Daher versteht SSMS, dass sie die XML-Cast Zelle auswählbar machen sollte.

Für diese Ausführung:

  • Der s.name = Wert wurde in einer Ereignissitzung für das checkpoint_begin-Ereignis festgelegt.
  • Das Ziel war 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>

Ausgabe, XML wird ansprechend angezeigt, wenn die Zelle ausgewählt ist

Wenn die XML-Cast Zelle ausgewählt ist, wird die folgende hübsche Anzeige angezeigt.

<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 aus einer Funktion zum Abrufen von event_file Daten vom Laufwerk

Angenommen, Ihre Ereignissitzungen haben Daten erfasst und wurden später beendet. Wenn Ihre Sitzung für die Verwendung des event_file-Ziels definiert wurde, können Sie die Daten trotzdem abrufen, indem Sie die Funktion sys.fn_xe_target_read_fileaufrufen.

  • Sie müssen den Pfad und Dateinamen in den Parameter des Funktionsaufrufs einfügen, bevor Sie diesen SELECTausführen.
    • 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. Geben Sie einfach den normalen Stammnamen und die Erweiterung an.
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;

Ausgabe der Zeilen, wenn die SELECT FROM-Anweisung auf eine Funktion angewendet wird

Als Nächstes werden die Zeilen zurückgegeben, die von der vorhergehenden SELECT FROM Funktion zurückgegeben werden. Die Event-Data-As-XML XML-Spalte enthält die Daten, die sich speziell auf den Ereignisauftritt beziehen.

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>

Ausgabe einer XML-Zelle

Hier wird der Inhalt der ersten XML-Zelle aus dem vorherigen zurückgegebenen Rowset gezeigt.

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