Udostępnij za pomocą


SELECTs i JOINs z widoków systemowych dla zdarzeń rozszerzonych

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

W tym artykule opisano dwa zestawy widoków systemowych odnoszących się do zdarzeń rozszerzonych. W tym artykule przedstawiono następujące elementy:

  • Jak korzystać z JOIN różnych widoków systemowych.
  • Jak uzyskać określone informacje z widoków systemowych.

Istnieją dwa zestawy widoków systemowych dla zdarzeń rozszerzonych:

Widoki wykazu

  • Te widoki przechowują informacje o definicji każdej sesji zdarzeń utworzonej przez operację CREATE EVENT SESSION (Transact-SQL). Ale te widoki nie wiedzą nic o tym, czy żadne sesje kiedykolwiek uruchomiono.
    • Jeśli na przykład w Eksploratorze obiektów programu SSMS nie zdefiniowano żadnych sesji zdarzeń, funkcja SELECTing z widoku sys.server_event_session_targets zwróci zero wierszy.
  • Większość przykładów jest napisana dla programów SQL Server i Azure SQL Managed Instance. Jednak po drobnych edycjach będą uruchamiane na platformie Azure SQL Database oraz SQL Database w Fabric, przez zmianę server w nazwie DMV na database:
    • sys.server_event_session* to prefiks nazwy w programie SQL Server i usłudze Azure SQL Managed Instance.
    • sys.database_event_session* to prefiks nazwy w usłudze Azure SQL Database oraz SQL Database w Fabric.
    • Aby uzyskać więcej informacji na temat każdego z nich, zobacz Rozszerzone widoki wykazu zdarzeń.

Dynamiczne widoki zarządzania (DMV)

  • Przechowuj informacje o bieżącej aktywności uruchomionych sesji zdarzeń. Dynamiczne widoki zarządzania (DMVs) niewiele wiedzą o definicji sesji.

    • Nawet jeśli wszystkie sesje zdarzeń są obecnie zatrzymane, widok SELECT nadal zwraca wiersze, ponieważ sys.dm_xe_packages różne pakiety są ładowane do aktywnej pamięci na początku serwera.
    • Z tego samego powodu sys.dm_xe_objects i sys.dm_xe_object_columns nadal zwracają wiersze.
  • Prefiks nazwy dla DMV Zdarzeń Rozszerzonych to:

    • sys.dm_xe_* to prefiks nazwy w programie SQL Server i usłudze Azure SQL Managed Instance.
    • sys.dm_xe_database_* to zazwyczaj prefiks nazwy w usłudze Azure SQL Database i SQL Database w Fabric.

Permissions

Do SELECT widoków systemowych niezbędne jest następujące uprawnienie:

  • Program SQL Server 2019 (15.x) i poprzednie wersje wymagają VIEW SERVER STATE uprawnień na serwerze.
  • Program SQL Server 2022 (16.x) i nowsze wersje wymagają VIEW SERVER PERFORMANCE STATE uprawnień na serwerze.
  • Usługa Azure SQL Database i baza danych SQL w usłudze Fabric wymagają VIEW DATABASE PERFORMANCE STATE uprawnień do bazy danych.

Widoki wykazu

Na potrzeby tej strony utwórz sesję zdarzeń rozszerzonych za pomocą programu SSMS lub języka T-SQL. Zainstaluj najnowszą wersję programu SQL Server Management Studio (SSMS).

Tworzenie sesji w programie SQL Server Management Studio (SSMS)

W programie SSMS w eksploratorze obiektów można otworzyć okno dialogowe Nowa sesja, rozwijając zarządzanie>rozszerzone zdarzenia, a następnie klikając prawym przyciskiem myszy Sesje>Nowa sesja.

W dużym oknie dialogowym Nowa sesja w pierwszej sekcji z etykietą Ogólne zobaczymy, że opcja została wybrana do uruchomienia sesji zdarzeń podczas uruchamiania serwera.

Zrzut ekranu z programu SSMS z nowej sesji, sekcja Ogólne > Rozpocznij sesję zdarzeń podczas uruchamiania serwera.

Następnie w sekcji Zdarzenia zobaczymy, że lock_deadlock zdarzenie zostało wybrane. W przypadku tego zdarzenia widzimy, że wybrano trzy działania. Oznacza to, że przycisk Konfiguruj został wybrany, który po wybraniu staje się szary.

Zrzut ekranu z programu SSMS przedstawiający zdarzenia nowej sesji, pola globalne (akcje).

Następnie, w sekcji Zdarzenia>Konfigurowanie, widzimy, że resource_type został ustawiony na PAGE. Oznacza to, że dane zdarzenia nie zostaną wysłane z silnika zdarzeń do obiektu docelowego, jeśli wartość resource_type jest inna niż PAGE.

Widzimy dodatkowe filtry predykatu dla nazwy bazy danych i licznika.

Zrzut ekranu z programu SSMS zdarzeń nowej sesji > , filtruj pola predykatu (akcje).

Następnie w sekcji Magazyn danych zobaczymy, że event_file został wybrany jako element docelowy. Ponadto widzimy, że wybrano opcję Włącz przełączanie plików.

Zrzut ekranu z programu SSMS nowej sesji magazynu danych > eventfile_enablefileroleover.

Na koniec w sekcji Zaawansowane widzimy, że wartość maksymalnego opóźnienia wysyłania została zmniejszona do 4 sekund.

Zrzut ekranu programu SSMS przedstawiający zaawansowane i maksymalne opóźnienie wysyłania nowej sesji > .

Tworzenie sesji zdarzeń w języku T-SQL

Niezależnie od sposobu tworzenia definicji sesji zdarzeń, w SSMS można odtworzyć ją jako skrypt Transact-SQL, który dokładnie odpowiada oryginałowi. Można sprawdzić wcześniejsze zrzuty ekranu New Session i porównać ich widoczne specyfikacje z klauzulami w poniższym wygenerowanym skrypcie języka T-SQL CREATE EVENT SESSION.

Aby odtworzyć sesję zdarzeń, w Eksploratorze obiektów możesz kliknąć prawym przyciskiem myszy węzeł sesji, a następnie wybrać opcję Skryptuj sesję jako>CREATE do >Schowka.

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

Widok katalogu SELECT JOIN UNION

Następująca instrukcja języka T-SQL SELECT jest długa tylko dlatego, że łączy kilka małych zapytań SELECT za pomocą UNION. Każdy z małych SELEKtów można uruchomić samodzielnie. Małe zapytania SELECT pokazują, jak różne widoki katalogowe systemu powinny być połączone za pomocą JOIN.

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

Wynik

W poniższej tabeli przedstawiono dane wyjściowe z uruchamiania poprzedniego SELECT JOIN UNION. Nazwy parametrów wyjściowych i wartości są mapowane na to, co jest wyraźnie widoczne we wcześniejszej komendzie CREATE EVENT SESSION.

Nazwa sesji Typ Klauzuli Nazwa Parametru Parametr-Wartość
event_session_test3 1_EVENT Event-Name blokada_zakleszczenie
event_session_test3 2_EVENT_SET collect_database_name 1
event_session_test3 3_AKCJA_ZDARZENIE sqlserver.client_hostname (Not_Applicable)
event_session_test3 3_AKCJA_ZDARZENIE sqlserver.collect_system_time (Not_Applicable)
event_session_test3 3_AKCJA_ZDARZENIE sqlserver.event_sequence (Not_Applicable)
event_session_test3 4_EVENT_PREDICATES ([sqlserver].[equal_i_sql_unicode_string]([database_name],N'InMemTest2')AND[package0].[licznik]<=(16)) (Not_Applicable)
event_session_test3 5_TARGET plik_zdarzeń (Not_Applicable)
event_session_test3 6_TARGET_SET filename c:\temp\event_session_test3_EF.xel
event_session_test3 6_TARGET_SET maksymalny_rozmiar_pliku 20
event_session_test3 6_TARGET_SET max_rollover_files 2
event_session_test3 7_WITH_MAX_MEMORY maksymalna_pamięć 4096
event_session_test3 7_WITH_STARTUP_STATE stan początkowy 1

To kończy sekcję o widokach katalogu.

Dynamiczne widoki zarządzania (DMV)

Ta sekcja zawiera kilka instrukcji SELECT Transact-SQL, które służą konkretnemu przydatnemu celowi biznesowemu. Ponadto zestawy SELECT pokazują, jak można JOIN połączyć DMVs dla dowolnych nowych zastosowań.

Dokumentacja referencyjna dynamicznych widoków zarządzania jest dostępna w temacie Dynamiczne widoki zarządzania zdarzeniami rozszerzonymi

Wszystkie obiekty, których można używać w obszarze zdarzeń rozszerzonych, pochodzą z pakietów, które są ładowane do systemu. W tej sekcji wymieniono wszystkie pakiety i ich opisy.

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

Wynik

Oto lista pakietów.

Package Opis Pakietu
filestream Zdarzenia rozszerzone dla programu SQL Server FILESTREAM i FileTable
package0 Pakiet domyślny. Zawiera wszystkie: typy standardowe, mapy, operatory porównawcze, akcje i cele
qds Zdarzenia rozszerzone dla Query Store
SecAudit Zdarzenia inspekcji zabezpieczeń
sqlclr Zdarzenia rozszerzone dla SQL CLR
sqlos Zdarzenia rozszerzone dla systemu operacyjnego SQL
SQLSatellite Zdarzenia rozszerzone dla usług SQL Server Machine Learning Services
sqlserver Zdarzenia rozszerzone dla programu Microsoft SQL Server
sqlsni Zdarzenia rozszerzone dla programu Microsoft SQL Server
ucs Zdarzenia rozszerzone dla usługi Unified Communications Stack
XtpCompile Zdarzenia rozszerzone dla kompilacji XTP
XtpEngine Zdarzenia rozszerzone dla silnika XTP
XtpRuntime Zdarzenia rozszerzone dla środowiska uruchomieniowego XTP

Definicje poprzednich inicjalizacji:

  • clr = Wspólne środowisko uruchomieniowe platformy .NET
  • qds = Sklep zapytań danych
  • sni = Interfejs sieciowy serwera
  • ucs = Ujednolicony stos komunikacji
  • xtp = Ekstremalne przetwarzanie transakcji

WYBIERZ wszystkie dostępne elementy posortowane według typu

Poniższe SELECT polecenie zwraca jeden wiersz dla każdego obiektu.

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

Pola danych dostępne dla zdarzenia

Poniższe SELECT polecenie zwraca wszystkie pola danych, które są określone dla typu zdarzenia.

  • Zanotuj element klauzuli WHERE : column_type = 'data'.
  • Ponadto należy edytować wartość klauzuli WHERE dla 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];

Wynik

Następujące wiersze zostały zwrócone przez poprzednie SELECT: WHERE o.name = 'lock_deadlock'

  • Każdy wiersz reprezentuje opcjonalny filtr zdarzenia sqlserver.lock_deadlock .
  • Kolumna Column-Description zostanie pominięta z poniższego ekranu. Jego wartość to często NULL.
  • To rzeczywiste dane wyjściowe, z wyjątkiem pominiętej kolumny Opis, która jest często NULL.
  • Te wiersze to WHERE object_type = 'lock_deadlock'.
Package Event Kolumna dla danych predykatów
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 i pola zdarzeń

Poniższy SELECT zawiera JOIN do widoku sys.dm_xe_map_values.

Celem wyświetlania SELECT jest pokazanie licznych pól, które można wybrać dla sesji zdarzeń. Pola zdarzeń można używać na dwa sposoby:

  • Aby wybrać, które wartości pól zostaną zapisane w obiekcie docelowym dla każdego wystąpienia zdarzenia.
  • Aby odfiltrować, które wystąpienia zdarzenia będą wysyłane lub zatrzymane przed dotarciem do miejsca docelowego.
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];

Wynik

Następnie znajduje się przykład ponad 100 rzeczywistych wierszy danych wyjściowych z poprzedniego zapytania T-SQL SELECT. Wiersz dla resource_type jest odpowiedni dla filtrowania predykatu używanego w przykładzie event_session_test3 w innym miejscu tego artykułu.

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

Parametry dla obiektów docelowych

Poniższe SELECT polecenie zwraca każdy parametr dla elementu docelowego. Każdy parametr jest oznakowany, aby wskazać, czy jest obowiązkowy. Wartości przypisywane do parametrów mają wpływ na zachowanie obiektu docelowego.

  • Zanotuj element klauzuli WHERE : object_type = 'customizable'.
  • Ponadto należy edytować wartość klauzuli WHERE dla 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];

Wynik

Następujące wiersze parametrów stanowią mały podzbiór tych zwróconych przez poprzedzający SELECT.

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

DmV SELECT rzutowanie kolumny target_data do XML

To DMV SELECT zwraca wiersze danych z obiektu docelowego twojej aktywnej sesji zdarzeń. Dane są rzutowane do kodu XML, co sprawia, że zwracana komórka jest wybierana w celu łatwego wyświetlania w programie SSMS.

  • Jeśli sesja wydarzenia zostanie zatrzymana, zwróci to zero wierszy SELECT.
  • Należy edytować wartość klauzuli WHERE dla 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!>';

Dane wyjściowe, jedyny wiersz, który zawiera komórkę XML

Oto jedyny wiersz, który jest wynikiem działania poprzedniego SELECT. Kolumna XML-Cast zawiera ciąg XML, który program SSMS interpretuje jako XML. W związku z tym program SSMS rozumie, że powinien umożliwić wybór komórki XML-Cast.

W tym przebiegu:

  • Wartość s.name = została ustawiona na sesję zdarzeń dla checkpoint_begin zdarzenia.
  • Celem był obiekt typu 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>

Rezultat, xml ładnie sformatowane po wybraniu komórki

Po wybraniu komórki XML-Cast zostanie wyświetlona następująca ładna ilustracja.

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

WYBIERANIE z funkcji w celu pobrania event_file danych z dysku

Załóżmy, że sesja zdarzeń zebrała pewne dane, a później została zatrzymana. Jeśli sesja została zdefiniowana w celu użycia obiektu docelowego event_file, nadal można pobrać dane, wywołując funkcję sys.fn_xe_target_read_file.

  • Przed uruchomieniem tego SELECT należy edytować ścieżkę i nazwę pliku w parametrze funkcji.
    • Nie należy zwracać uwagi na dodatkowe cyfry, które system SQL osadza w rzeczywistych nazwach plików .XEL przy każdym ponownym uruchomieniu sesji. Wystarczy podać normalną nazwę katalogu głównego i rozszerzenie.
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;

Dane wyjściowe, wiersze zwracane przez funkcję SELECT z funkcji

Poniżej przedstawiono wiersze zwracane przez poprzednią SELECT FROM funkcję. Kolumna Event-Data-As-XML XML zawiera dane dotyczące wystąpienia zdarzenia.

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>

Dane wyjściowe, jedna komórka XML

Oto zawartość pierwszej komórki XML z poprzedniego zwróconego zestawu wierszy.

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