Partilhar via


SELECTs e JOINs de exibições do sistema para eventos estendidos

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Este artigo explica os dois conjuntos de visões do sistema relacionados a Eventos Estendidos. O artigo ilustra:

  • Como JOIN várias visualizações do sistema.
  • Como tipos SELECT específicos de informações a partir das visualizações do sistema.

Há dois conjuntos de exibições do sistema para Eventos Estendidos:

Visualizações do catálogo

  • Essas exibições armazenam informações sobre a definição de cada sessão de evento criada por CREATE EVENT SESSION (Transact-SQL). Mas essas visões não sabem nada sobre se alguma sessão já começou a ser executada.
    • Por exemplo, se o Pesquisador de Objetos do SSMS mostrar que nenhuma sessão de evento está definida, a seleção da visualização sys.server_event_session_targets retornará zero linhas.
  • A maioria dos exemplos é escrita para o SQL Server e a Instância Gerenciada SQL do Azure. Mas com pequenas edições, eles seriam executados no Banco de Dados SQL do Azure e no Banco de Dados SQL no Fabric alterando o server no nome do DMV para database:
    • sys.server_event_session* é o prefixo do nome no SQL Server e na Instância Gerenciada SQL do Azure.
    • sys.database_event_session* é o prefixo de nome no Banco de Dados SQL do Azure e no Banco de Dados SQL na Malha.
    • Para obter mais informações sobre cada um deles, consulte Exibições estendidas do catálogo de eventos.

Visualizações de gerenciamento dinâmico (DMVs)

  • Armazene informações sobre a atividade atual de execução de sessões de eventos. Mas esses DMVs sabem pouco sobre a definição das sessões.

    • Mesmo que todas as sessões de eventos estejam atualmente paradas, uma visualização SELECT de sys.dm_xe_packages ainda retornará linhas porque vários pacotes são carregados na memória ativa no arranque de um servidor.
    • Pelo mesmo motivo, sys.dm_xe_objects e sys.dm_xe_object_columns ainda devolvem linhas.
  • O prefixo do nome para DMVs de Eventos Estendidos é:

    • sys.dm_xe_* é o prefixo do nome no SQL Server e na Instância Gerenciada SQL do Azure.
    • sys.dm_xe_database_* geralmente é o prefixo do nome nas bases de dados SQL do Azure e no Fabric.

Permissions

Para SELECT nas visualizações do sistema, a seguinte permissão é necessária:

  • O SQL Server 2019 (15.x) e versões anteriores exigem VIEW SERVER STATE permissão no servidor.
  • O SQL Server 2022 (16.x) e versões posteriores exigem VIEW SERVER PERFORMANCE STATE permissão no servidor.
  • O Banco de Dados SQL do Azure e o Banco de Dados SQL no Fabric exigem VIEW DATABASE PERFORMANCE STATE permissão no banco de dados.

Visualizações do catálogo

Para os fins desta página, crie uma sessão de Eventos Estendidos com o SSMS ou com o T-SQL. Instale a versão mais recente do SQL Server Management Studio (SSMS).

Criar sessão no SQL Server Management Studio (SSMS)

No SSMS, em seu Pesquisador de Objetos, você pode iniciar a caixa de diálogo Nova Sessão expandindo Gerenciamento>Eventos Estendidos e depois clicando com o botão direito do mouse em Sessões>Nova Sessão.

Na grande caixa de diálogo Nova sessão, na sua primeira seção intitulada Geral, vemos que a opção foi selecionada para Iniciar a sessão de evento na inicialização do servidor.

Captura de tela do SSMS da Nova Sessão > Geral, Iniciar a sessão de evento na inicialização do servidor.

Em seguida, na seção Eventos , vemos que o lock_deadlock evento foi escolhido. Para esse evento, verificamos que foram selecionadas três Ações . Isso significa que o botão Configurar foi selecionado, que fica cinza depois de ser selecionado.

Captura de ecrã do SSMS dos Eventos da Nova Sessão > Campos Globais - Ações.

Em seguida, ainda na seção Configurar Eventos>, vemos que resource_type foi definido como .PAGE Isso significa que os dados do evento não serão enviados do mecanismo de eventos para o destino se o valor resource_type for diferente de PAGE.

Vemos filtros de predicados adicionais para o nome do banco de dados e para um contador.

Captura de ecrã do SSMS dos Novos Eventos de Sessão > , Filtrar Campos de Predicados (Ações).

Em seguida, na seção Armazenamento de dados , vemos o event_file foi escolhido como destino. Além disso, vemos que a opção Ativar rotação de ficheiros foi selecionada.

Captura de ecrã do SSMS da Nova Sessão de Armazenamento de Dados>, eventfile_enablefileroleover.

Finalmente, na seção Avançado , vemos que o valor de latência máxima de despacho foi reduzido para 4 segundos.

Captura de ecrã do SSMS da Nova Sessão > Avançada, latência máxima de despacho.

Criar sessão de evento em T-SQL

Independentemente de como uma definição de sessão de evento é criada, a partir do SSMS a sessão pode ser revertida em um script Transact-SQL perfeitamente correspondente. Você pode examinar as capturas de tela de Nova Sessão anteriores e comparar suas especificações visíveis com as cláusulas no seguinte script T-SQL CREATE EVENT SESSION gerado.

Para fazer engenharia reversa de uma sessão de evento, no Pesquisador de Objetos , você pode clicar com o botão direito do mouse no nó da sessão e escolher Sessão de Script como>CREATE para** >Área de Transferência.

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

Visualização do catálogo SELECT JOIN UNION

A instrução T-SQL SELECT a seguir é longa apenas porque une várias pequenas instruções SELECT. Qualquer um dos pequenos SELECTs pode ser executado por conta própria. Os pequenos comandos SELECT mostram como as várias vistas de catálogo do sistema devem ser unidas.

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

Resultado

A tabela a seguir mostra a saída da execução do SELECT JOIN UNION anterior. Os nomes e valores dos parâmetros de saída correspondem ao que é facilmente visível na instrução anterior CREATE EVENT SESSION.

Nome-da-Sessão Tipo de Cláusula Nome do Parâmetro Parâmetro-Valor
event_session_test3 1_EVENT Nome do Evento bloqueio_impasse
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 [pacote0].[contador]<=(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 tamanho_máximo_do_ficheiro 20
event_session_test3 6_TARGET_SET máximo_ficheiros_de_rotação 2
event_session_test3 7_WITH_MAX_MEMORY memória_máxima 4096
event_session_test3 7_WITH_STARTUP_STATE estado_inicial 1

Isso completa a seção sobre visualizações de catálogo.

Visualizações de gerenciamento dinâmico (DMVs)

Esta seção fornece várias declarações Transact-SQL SELECT que servem a um propósito comercial útil específico. Além disso, os SELECTs demonstram como podes JOIN os DMVs juntos para quaisquer novos usos que desejares.

A documentação de referência dos DMVs está disponível em Extended Events Dynamic Management Views

Todos os objetos que você pode usar na área de eventos estendidos vêm de pacotes que são carregados no sistema. Esta seção lista todos os pacotes e suas descrições.

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

Resultado

Aqui está a lista de pacotes.

Package Descrição do Pacote
filestream Eventos estendidos para SQL Server FILESTREAM e FileTable
package0 Pacote padrão. Contém todos os tipos padrão, mapas, operadores de comparação, ações e alvos
qds Eventos estendidos para o Repositório de Consultas
SecAudit Eventos de auditoria de segurança
sqlclr Eventos estendidos para SQL CLR
sqlos Eventos estendidos para o sistema operacional SQL
SQLSatellite Eventos estendidos para os Serviços de Aprendizado de Máquina do SQL Server
sqlserver Eventos estendidos para o Microsoft SQL Server
sqlsni Eventos estendidos para o Microsoft SQL Server
ucs Eventos estendidos para Unified Communications Stack
XtpCompile Eventos estendidos para a compilação XTP
XtpEngine Eventos avançados para o mecanismo XTP
XtpRuntime Eventos estendidos para o XTP Runtime

Definições das iniciais anteriores:

  • clr = Ambiente de Execução Comum do .NET
  • qds = Armazenamento de dados de consulta
  • sni = Interface de rede do servidor
  • ucs = Pilha de comunicações unificadas
  • xtp = Processamento extremo de transações

SELECIONAR todos os itens disponíveis classificados por tipo

O seguinte SELECT retorna uma linha para cada objeto.

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

Campos de dados disponíveis para o seu evento

O seguinte SELECT retorna todos os campos de dados que são específicos para o seu tipo de evento.

  • Observe o item da cláusula WHERE: column_type = 'data'.
  • Além disso, precisarias editar o valor da cláusula WHERE para 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];

Resultado

As seguintes linhas foram retornadas pelo anterior SELECT, WHERE o.name = 'lock_deadlock':

  • Cada linha representa um filtro opcional para o sqlserver.lock_deadlock evento.
  • A Column-Description coluna é omitida da exibição a seguir. O seu valor é muitas vezes NULL.
  • Esta é a saída real, exceto para a coluna Descrição omitida, que geralmente é NULL.
  • Estas linhas são WHERE object_type = 'lock_deadlock'.
Package Event Coluna-para-Dados-de-Predicado
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 e campos de eventos

O seguinte SELECT inclui um JOIN para a sys.dm_xe_map_values vista.

O objetivo de exibir o SELECT são os vários campos que pode escolher para a sua sessão de evento. Os campos de evento podem ser usados de duas maneiras:

  • Para escolher quais valores de campo serão gravados no seu destino para cada ocorrência de evento.
  • Para filtrar quais ocorrências de eventos serão enviadas ao seu destino ou mantidas.
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];

Resultado

A seguir, apresenta-se uma amostra das 100+ linhas reais de saída do T-SQL SELECT anterior. A linha para resource_type é relevante para a filtragem de predicados usada no exemplo event_session_test3 em outra parte deste artigo.

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

Parâmetros para os alvos

O seguinte SELECT retorna todos os parâmetros para o seu alvo. Cada parâmetro é marcado para indicar se é obrigatório. Os valores atribuídos aos parâmetros afetam o comportamento do destino.

  • Observe o item da cláusula WHERE: object_type = 'customizable'.
  • Além disso, precisarias editar o valor da cláusula WHERE para 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];

Resultado

As seguintes linhas de parâmetros são um pequeno subconjunto daqueles retornados pelo precedente 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 convertendo a coluna target_data para XML

Isso DMV SELECT retorna linhas de dados do destino da sessão de evento ativa. Os dados são convertidos em XML, o que torna sua célula retornada selecionável para fácil exibição no SSMS.

  • Se a sessão do evento for terminada, isto SELECT retornará zero linhas.
  • Você precisaria editar o valor da cláusula WHERE para 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!>';

Saída, a única linha, incluindo a célula XML

Aqui está a única linha resultante do anterior SELECT. A coluna XML-Cast contém uma cadeia de caracteres XML que o SSMS entende ser XML. Por conseguinte, o SSMS entende que deve tornar a célula XML-Cast selecionável.

Para esta execução:

  • O valor s.name = foi definido numa sessão de evento para o evento checkpoint_begin.
  • O alvo era um 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>

Saída, XML formatado de forma legível quando a célula é selecionada

Quando a célula XML-Cast é selecionada, a seguinte exibição bonita é exibida.

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

Usar SELECT numa função para recuperar dados de event_file do disco rígido

Suponha que sua sessão de evento tenha reunido alguns dados e posteriormente tenha sido interrompida. Se sua sessão foi definida para usar o destino event_file, você ainda pode recuperar os dados chamando a função sys.fn_xe_target_read_file.

  • Você deve editar seu caminho e nome de arquivo no parâmetro da chamada de função, antes de executar este SELECT.
    • Não preste atenção aos dígitos adicionais que o sistema SQL insere nos nomes reais dos arquivos .XEL cada vez que reinicia a sua sessão. Basta fornecer o nome base normal e a extensão.
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;

Saída, linhas retornadas pelo SELECT da função

Em seguida, estão as linhas retornadas pela função anterior SELECT FROM . A Event-Data-As-XML coluna XML contém os dados que são especificamente sobre a ocorrência do evento.

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>

Saída, uma célula XML

Aqui está o conteúdo da primeira célula XML, do conjunto de linhas retornado anterior.

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