Поделиться через


SELECT и JOIN из системных представлений для Extended Events

Применимо к:SQL ServerAzure SQL База данныхAzure SQL Управляемый экземплярSQL База данных в Microsoft Fabric

В этой статье объясняется два набора системных представлений, связанных с расширенными событиями. В статье рассматриваются следующие вопросы:

  • Как выполнять JOIN различные системные представления.
  • Как извлечь SELECT определенные виды информации из системных представлений.

Существует два набора системных представлений для расширенных событий:

Представления каталога

  • В этих представлениях хранятся сведения об определении каждого сеанса событий, созданного с помощью CREATE EVENT SESSION (Transact-SQL). Однако в этих представлениях нет никаких данных о том, запускались ли вообще эти сеансы.
    • Например, если обозреватель объектов SSMS не определяет сеансы событий, SELECTing из представления sys.server_event_session_targets возвращает нулевые строки.
  • Большинство примеров написаны для SQL Server и Управляемого экземпляра SQL Azure. Но при незначительных изменениях они будут выполняться в базе данных SQL Azure и SQL базе данных в Fabric, изменяя server на database в имени DMV:
    • sys.server_event_session* — это префикс имени в SQL Server и Управляемом экземпляре SQL Azure.
    • sys.database_event_session* — это префикс имени в Базе данных SQL Azure и базе данных SQL в Fabric.
    • Дополнительную информацию о каждом из них см. в расширенных представлениях каталога событий.

Динамические административные представления (DMV)

  • Хранение сведений о текущей активности запущенных сеансов событий. Однако динамические административные представления содержат минимум сведений об определении сеансов.

    • Даже если все сеансы событий в настоящее время остановлены, представление, содержащее SELECT, все равно вернет строки из представления sys.dm_xe_packages, поскольку различные пакеты загружаются в активную память при запуске сервера.
    • По той же причине sys.dm_xe_objects и sys.dm_xe_object_columns по-прежнему возвращают строки.
  • Префикс имени для динамических административных представлений расширенных событий:

    • sys.dm_xe_* — это префикс имени в SQL Server и Управляемом экземпляре SQL Azure.
    • sys.dm_xe_database_* Как правило, префикс имени в базе данных Azure SQL и базе данных SQL в системе Fabric.

Permissions

Для SELECT системных представлений необходимо следующее разрешение:

  • ДЛЯ SQL Server 2019 (15.x) и предыдущих версий требуется VIEW SERVER STATE разрешение на сервере.
  • ДЛЯ SQL Server 2022 (16.x) и более поздних версий требуется VIEW SERVER PERFORMANCE STATE разрешение на сервере.
  • База данных Azure SQL и база данных SQL в Fabric требуют наличия VIEW DATABASE PERFORMANCE STATE разрешения в базе данных.

Представления каталога

В целях этой страницы создайте сеанс расширенных событий с SSMS или T-SQL. Установите последнюю версию SQL Server Management Studio (SSMS).

Создание сеанса в SQL Server Management Studio (SSMS)

В SSMS, в обозревателе объектов, можно запустить диалоговое окно Создать сеанс, развернув Управление>Расширенные события, а затем щелкните правой кнопкой мыши Сеансы> и выберите Создать сеанс.

В большом диалоговом окне Новый сеанс в его первом разделе Общиебыл выбран параметр Запускать сеанс событий при запуске сервера.

> General, Start the event session at server startup.

Далее в разделе "События мы видим, что lock_deadlock событие было выбрано. Для этого события были выбраны три действия . Это означает, что выбрана кнопка "Настройка ", которая становится серой после выбора.

> Events, Global Fields (Actions).

Далее в разделе"Настройка>" мы видим, что для resource_type задано значение PAGE. Это означает, что данные о событиях не будут отправляться из обработчика событий в целевой объект, если значение resource_type не является чем-либо другим PAGE.

Здесь также показаны дополнительные фильтры предикатов для имени базы данных и счетчика.

Снимок экрана из SSMS с новыми событиями сеанса> , поля предиката фильтрации (действия).

Затем в разделе Хранилище данных показано, что в качестве целевого объекта выбран event_file. Кроме того, здесь видно, что был выбран параметр Включить переключение файлов.

Скриншот из SSMS для нового сеанса хранения данных > eventfile_enablefileroleover.

И, наконец, в разделе Дополнительно показано, что значение параметра Максимальная задержка диспетчера было уменьшено до 4-х секунд.

Снимок экрана из SSMS нового сеанса > Расширенные настройки, максимальная задержка диспетчеризации.

Создание сеанса событий в T-SQL

Независимо от того, как создается определение сеанса событий, из SSMS сеанс можно перенастроить в совершенно соответствующий скрипт Transact-SQL. Вы можете просмотреть предыдущие снимки экрана нового сеанса и сравнить их видимые спецификации с предложениями в следующем созданном скрипте T-SQL CREATE EVENT SESSION .

Чтобы выполнить декомпиляцию сеанса событий, в обозревателе объектов можно щелкнуть правой кнопкой мыши узел сеанса, а затем выбрать Создать скрипт сеанса как>CREATE в >буфер обмена.

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

Представление каталога SELECT JOIN UNION

Следующая инструкция T-SQL SELECT длинная только потому, что объединяет несколько небольших SELECT вместе. Любая из этих небольших инструкций SELECT может выполняться самостоятельно. Небольшие инструкции SELECT демонстрируют варианты присоединения (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]
;

Выходные данные

В следующей таблице показаны выходные данные, полученные при выполнении предыдущего SELECT JOIN UNION. Имена и значения выходных параметров сопоставляют с тем, что отображается в приведенной выше CREATE EVENT SESSION инструкции.

Session-Name Clause-Type Parameter-Name Parameter-Value
event_session_test3 1_EVENT Event-Name lock_deadlock
event_session_test3 2_EVENT_SET collect_database_name 1
event_session_test3 3_EVENT_ACTION sqlserver.client_hostname (Not_Applicable)
event_session_test3 3_EVENT_ACTION sqlserver.collect_system_time (Not_Applicable)
event_session_test3 3_EVENT_ACTION sqlserver.event_sequence (Not_Applicable)
event_session_test3 4_EVENT_PREDICATES ([sqlserver]. [equal_i_sql_unicode_string]([database_name], N'InMemTest2') AND [package0]. [счетчик]<=(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

На этом раздел с представлениями каталога завершен.

Динамические административные представления (DMV)

В этом разделе представлено несколько Transact-SQL SELECT инструкций, каждый из которых служит определенной полезной бизнес-цели. Кроме того, SELECTs демонстрируют, как можно JOIN совместно использовать динамические административные представления для любых новых целей.

Справочная документация по динамическим административным представлениям доступна в динамических административных представлениях расширенных событий

Все объекты, которые можно использовать в области расширенных событий, взяты из пакетов, которые загружены в систему. В этом разделе перечислены все пакеты и даны их описания.

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

Выходные данные

Ниже приведен список пакетов.

Пакет Package-Description
filestream Расширенные события для FILESTREAM и FileTable в SQL Server
package0 Пакет по умолчанию. Содержит все стандартные типы, карты, операторы сравнения, действия и целевые объекты
qds Расширенные события для хранилища запросов
SecAudit События аудита безопасности
sqlclr Расширенные события для SQL CLR
sqlos Расширенные события для операционной системы SQL
SQLSatellite Расширенные события для служб машинного обучения SQL Server
sqlserver Расширенные события для Microsoft SQL Server
sqlsni Расширенные события для Microsoft SQL Server
ucs Расширенные события для стека объединенных коммуникаций
XtpCompile Расширенные события для компиляции XTP
XtpEngine Расширенные события для механизма XTP
XtpRuntime Расширенные события для среды выполнения XTP

Определения приведенных выше сокращений:

  • clr = среда CLR .NET
  • qds = запрос хранилища данных
  • sni = сетевой интерфейс сервера
  • ucs = стек унифицированных коммуникаций
  • xtp = крайняя обработка транзакций

SELECT все доступные элементы, отсортированные по типу

Следующий SELECT возвращает одну строку для каждого объекта.

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

Поля данных, доступные для события

SELECT Ниже возвращаются все поля данных, которые относятся к типу события.

  • Обратите внимание на WHERE элемент предложения: column_type = 'data'
  • Кроме того, вам необходимо изменить значение условия WHERE для 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];

Выходные данные

Следующие строки были возвращены предыдущей функцией SELECT, WHERE o.name = 'lock_deadlock'.

  • Каждая строка представляет необязательный фильтр для sqlserver.lock_deadlock события.
  • Столбец Column-Description опущен из следующего отображения. Его значение часто NULL.
  • Это фактические выходные данные, за исключением часто пропускаемого столбца описания NULL.
  • Эти строки WHERE object_type = 'lock_deadlock'.
Пакет Мероприятие 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 и поля событий

Следующий SELECT включает JOIN в sys.dm_xe_map_values представление.

Цель SELECT - показать множество полей, которые вы можете выбрать для вашей сессии мероприятия. Поля событий можно использовать двумя способами:

  • Чтобы выбрать, какие значения полей будут записываться в цель для каждого события.
  • для фильтрации вхождений событий, которые будут отправляться из целевого объекта или оставаться в нем.
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];

Выходные данные

Далее приведена выборка фактических 100+ строк выходных данных из предыдущего T-SQL SELECT. Строка resource_type, имеющая отношение к фильтрации предиката, используется в примере event_session_test3 в другой части этой статьи.

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

Параметры для целевых объектов

В следующем примере SELECT возвращается каждый параметр для целевого объекта. Каждый параметр помечается, поэтому можно определить, является он обязательным или нет. Значения, назначаемые параметрам, влияют на поведение целевого объекта.

  • Обратите внимание на WHERE элемент предложения: object_type = 'customizable'
  • Кроме того, вам необходимо изменить значение условия WHERE для 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];

Выходные данные

Следующие строки параметров — это небольшое подмножество возвращаемых предыдущим 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
***/

Приведение столбца target_data в XML-файл с помощью функции DMV SELECT

Эта функция DMV SELECT возвращает строки данных из целевого объекта активной сессии событий. Данные приводятся к XML, что делает возвращаемую ячейку удобной для выбора и отображения в SSMS.

  • Если сеанс событий остановлен, он SELECT вернет нулевые строки.
  • Необходимо изменить значение WHERE для предложения 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!>';

Выходные данные в виде единственной строки, включая ячейку XML

Ниже приведена единственная строка, которая выводится из предыдущего SELECT. Столбец XML-Cast содержит строку XML, которую SSMS понимает как XML. Поэтому SSMS понимает, что он должен сделать ячейку выбираемой XML-Cast.

Для данного запуска:

  • Значение s.name = было задано в сеансе событий для checkpoint_begin события.
  • Целевой объект — 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>

Выходные данные: XML-код отображается отформатированным при выборе ячейки

Когда выбрана XML-Cast ячейка, появляется следующее красивое отображение.

<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 из функции для извлечения данных event_file с дискового накопителя

Предположим, что сеанс событий собрал некоторые данные и позднее был остановлен. Если сеанс был определен для использования целевого объекта event_file, вы все равно можете получить данные, вызвав функцию sys.fn_xe_target_read_file.

  • Перед выполнением этой SELECTфункции необходимо изменить путь и имя файла в параметр вызова функции.
    • Не обращайте внимание на дополнительные цифры, которые система SQL будет внедрять в реальные имена XEL-файлов при каждом перезапуске сеанса. Просто укажите обычное корневое имя и расширение.
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;

Выходные данные, строки, возвращенные SELECT FROM (выбор из функции)

Далее приведены строки, возвращаемые предыдущей SELECT FROM функцией. XML-столбец Event-Data-As-XML содержит данные, которые касаются вхождения события.

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>

Выходные данные, одна ячейка XML

Далее приведено содержимое первой ячейки XML из предыдущего возвращенного набора строк.

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