SELECTs e JOINs de exibições do sistema dos Eventos Estendidos no SQL Server
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Este artigo explica os dois conjuntos de exibições do sistema relacionados a eventos estendidos no SQL Server e no Banco de Dados SQL do Azure. O artigo ilustra:
- Como unir com JOIN várias exibições do sistema.
- Como selecionar com SELECT tipos específicos de informações de exibições do sistema.
- Como as mesmas informações de sessão de evento são representadas de várias perspectivas tecnológicas, o que reforça a compreensão de cada perspectiva.
A maioria dos exemplos é gravada para o SQL Server. Mas, com pequenas edições seria executado no Banco de Dados SQL.
R. Informações básicas
Há dois conjuntos de exibições do sistema para eventos estendidos:
Exibições do catálogo:
Essas exibições armazenam informações sobre a definição de cada sessão de evento que é criada por CREATE EVENT SESSIONou por uma interface do usuário SSMS equivalente. Mas essas exibições não sabem nada sobre se alguma das sessões já começou a ser executada.
- Por exemplo, se o Pesquisador de Objetos do SSMS mostrar que não há nenhuma sessão de eventos definida, realizar a seleção da exibição sys.server_event_session_targets com SELECT retornará zero linhas.
O prefixo do nome é:
- sys.server_event_session* é o prefixo do nome no SQL Server.
- sys.database_event_session* é o prefixo do nome no Banco de Dados SQL.
DMVs (exibições de gerenciamento dinâmico):
Armazenam informações sobre a atividade atual das sessões de evento em execução. Mas esses DMVs sabem muito sobre a definição das sessões.
- Mesmo se todas as sessões de eventos estiverem paradas no momento, um SELECT da exibição de sys.dm_xe_packages ainda retornará linhas porque vários pacotes são carregados na memória ativa na inicialização do servidor.
- Pelo mesmo motivo, sys.dm_xe_objects sys.dm_xe_object_columns também retorna linhas.
O prefixo do nome para DMVs de eventos estendidos é:
- sys.dm_xe_* é o prefixo do nome no SQL Server.
- sys.dm_xe_database_* geralmente é o prefixo do nome no Banco de Dados SQL.
Permissões:
Para realizar a seleção com SELECT das exibições do sistema, a seguinte permissão é necessária:
- VIEW SERVER STATE: se for no Microsoft SQL Server.
- VIEW DATABASE STATE: se for no Banco de Dados SQL do Azure.
B. Exibições do catálogo
Esta seção corresponde e correlaciona três diferentes perspectivas tecnológicas na mesma sessão de eventos definida. A sessão foi definida e é visível no Pesquisador de Objetos do SQL Server Management Studio (SSMS.exe), mas a sessão não está em execução no momento.
Todos os meses, é aconselhável instalar a atualização mais recente do SSMS, para evitar falhas inesperadas.
A documentação de referência sobre as exibições do catálogo para eventos estendidos está em Exibições do catálogo de eventos estendidos (Transact-SQL).
A sequência nesta seção B:
B.1 Perspectiva da interface do usuário do SSMS
- Crie a definição de sessão de evento usando a interface do usuário do SSMS. São mostradas capturas de tela passo a passo.
B.2 Perspectiva do Transact-SQL
- Use o menu de contexto do SSMS para fazer engenharia reversa da sessão de eventos definida na instrução CREATE EVENT SESSION do Transact-SQL equivalente. O T-SQL mostra uma correspondência perfeita para as opções de capturas de tela do SSMS.
B.3 Perspectiva SELECT JOIN UNION da exibição de catálogo
- Emita uma instrução T-SQL SELECT das exibições de catálogo do sistema para nossa sessão de evento. Os resultados corresponderem às especificações de instrução CREATE EVENT SESSION .
B.1 Perspectiva da interface do usuário do SSMS
No SSMS, no seu Pesquisador de Objetos, é possível iniciar a caixa de diálogo Nova Sessão expandindo Gerenciamento>Eventos Estendidose clicando com o botão direito do mouse em Sessões>Nova Sessão.
Na caixa de diálogo grande Nova Sessão , em sua primeira seção chamada Geral, vemos que a opção foi selecionada para Iniciar a sessão de evento na inicialização do servidor.
Em seguida, na seção Eventos, vemos que o evento lock_deadlock foi selecionado. Para esse evento, vemos que três Ações foram selecionadas. Isso significa que o botão Configurar foi clicado, que fica cinza após ser clicado.
Em seguida, ainda na seção Eventos>Configurar, vemos que resource_type foi definido como PAGE. Isso significa que os dados de eventos não serão enviados do mecanismo de evento para a página de destino se o valor de resource_type for algo diferente de PAGE.
Vemos filtros de predicado adicionais para o nome do banco de dados e para um contador.
Em seguida, na seção Armazenamento de Dados, vemos que event_file foi selecionado como destino. Além disso, vemos que a opção Habilitar substituição de arquivo foi selecionada.
Por fim, na seção Avançado, vemos que o valor de Latência Máxima de Expedição foi reduzido para 4 segundos.
Isso conclui a perspectiva da interface do usuário do SSMS em uma definição de sessão de evento.
B.2 Perspectiva do Transact-SQL
Independentemente de como uma definição de sessão do evento é criada, na interface do usuário do SSMS, a sessão pode ser submetida à engenharia reversa em um script do Transact-SQL perfeitamente correspondente. Você pode examinar as capturas de tela de Nova Sessão anteriores e comparar as especificações visíveis com as cláusulas no seguinte script CREATE EVENT SESSION do T-SQL gerado.
Para realizar a engenharia reversa de uma sessão, você pode clicar com o botão direito do mouse no nó da sessão no Pesquisador de Objetos e selecionar Sessão de Script como>CREATE para>Área de Transferência.
O script do T-SQL a seguir foi criado pela engenharia reversa com o SSMS. Em seguida, o script foi manualmente “embelezado” pela manipulação estratégica somente do espaço em branco.
CREATE EVENT SESSION [event_session_test3]
ON SERVER -- Or, if on Azure SQL Database, ON DATABASE.
ADD EVENT sqlserver.lock_deadlock
(
SET
collect_database_name = (1)
ACTION
(
package0 .collect_system_time,
package0 .event_sequence,
sqlserver .client_hostname
)
WHERE
(
[database_name] = N'InMemTest2'
AND [package0].[counter] <= (16)
AND [resource_type] = (6)
)
)
ADD TARGET package0.event_file
(
SET
filename = N'C:\Junk\event_session_test3_EF.xel',
max_file_size = (20),
max_rollover_files = (2)
)
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 4 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = ON
);
Isso conclui a perspectiva do T-SQL.
B.3 Perspectiva SELECT JOIN UNION da exibição de catálogo
Não tenha medo! A instrução T-SQL SELECT é longa apenas porque une, com UNION, vários SELECTs pequenos. Qualquer um dos SELECTs pequenos pode ser executado sozinho. Os pequenos SELECT mostram como as várias exibições de catalogação do sistema devem ser unidas, utilizando 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]
;
Saída
A tabela a seguir mostra a saída da execução de SELECT JOIN UNION anterior. Os nomes de parâmetro de saída e os valores mapeiam para o que é claramente visível na instrução CREATE EVENT SESSION anterior.
Session-Name | Clause-Type | Parameter-Name | Parameter-Value |
---|---|---|---|
event_session_test3 | 1_EVENT | Event-Name | lock_deadlock |
event_session_test3 | 2_EVENT_SET | collect_database_name | 1 |
event_session_test3 | 3_EVENT_ACTION | sqlserver.client_hostname | (Not_Applicable) |
event_session_test3 | 3_EVENT_ACTION | sqlserver.collect_system_time | (Not_Applicable) |
event_session_test3 | 3_EVENT_ACTION | sqlserver.event_sequence | (Not_Applicable) |
event_session_test3 | 4_EVENT_PREDICATES | ([sqlserver].[equal_i_sql_unicode_string]([database_name],N'InMemTest2') AND [package0].[counter]<=(16)) | (Not_Applicable) |
event_session_test3 | 5_TARGET | event_file | (Not_Applicable) |
event_session_test3 | 6_TARGET_SET | filename | C:\Junk\event_session_test3_EF.xel |
event_session_test3 | 6_TARGET_SET | max_file_size | 20 |
event_session_test3 | 6_TARGET_SET | max_rollover_files | 2 |
event_session_test3 | 7_WITH_MAX_MEMORY | max_memory | 4096 |
event_session_test3 | 7_WITH_STARTUP_STATE | startup_state | 1 |
Isso conclui a seção sobre exibições do catálogo.
C. DMVs (exibições de gerenciamento dinâmico)
Agora, vamos mudar para DMVs. Esta seção fornece várias instruções Transact-SQL SELECT que servem, cada uma, a uma finalidade de negócios útil específica. Além disso, os SELECTs demonstram como unir as DMVs com JOIN para quaisquer novos usos desejados.
A documentação de referência das DMVs está disponível em Exibições de gerenciamento dinâmico de eventos estendidos
Neste artigo, todas as linhas saída reais dos SELECTs a seguir são do SQL Server 2016, a menos que esteja especificado de outra forma.
Aqui está a lista de SELECTs nesta seção C de DMV:
- C.1 Lista de todos os pacotes
- C.2 Contagem de cada tipo de objeto
- C.3 SELECT todos os itens disponíveis classificados por tipo
- C.4 Campos de dados disponíveis para seu evento
- C.5 sys.dm_xe_map_values e campos de evento
- C.6 Parâmetros para destinos
- C.7 SELECT de DMV convertendo a coluna target_data para XML
- C.8 SELECT FROM de uma função para recuperar dados de event_file da unidade de disco
C.1 Lista de todos os pacotes
Todos os objetos que você pode usar na área de eventos estendidos são provenientes 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;
Saída
Aqui está a lista de pacotes.
Pacote | Package-Description |
---|---|
fluxo de arquivos | Eventos estendidos para SQL Server FILESTREAM e FileTable |
package0 | Pacote padrão. Contém todos os tipos, mapas, operadores de comparação, ações e destinos padrão |
qds | Eventos estendidos para 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 SQL Satellite |
sqlserver | Eventos estendidos para o Microsoft SQL Server |
sqlserver | Eventos estendidos para o Microsoft SQL Server |
sqlserver | Eventos estendidos para o Microsoft SQL Server |
sqlsni | Eventos estendidos para o Microsoft SQL Server |
ucs | Eventos estendidos para Pilha de Comunicações Unificadas |
XtpCompile | Eventos estendidos para a Compilação XTP |
XtpEngine | Eventos estendidos para o mecanismo XTP |
XtpRuntime | Eventos estendidos para o Runtime XTP |
Definições dos inicialismos anteriores:
- clr = Common Language Runtime do .NET
- qds = Armazenamento de Dados de Consulta
- sni = Interface de Rede do Servidor
- ucs = Pilha de Comunicações Unificadas
- xtp = extreme transaction processing
C.2 Contagem de cada tipo de objeto
Esta seção informa sobre os tipos de objetos que contêm pacotes de eventos. É exibida uma lista completa de todos os tipos de objeto que estão em sys.dm_xe_objects, com a contagem para cada tipo.
SELECT --C.2
Count(*) AS [Count-of-Type],
o.object_type
FROM
sys.dm_xe_objects AS o
GROUP BY
o.object_type
ORDER BY
1 DESC;
Saída
Aqui está a contagem de objetos por tipo de objeto. Existem aproximadamente 1915 objetos.
Count-of-Type | object_type |
---|---|
1303 | event |
351 | map |
84 | mensagem |
77 | pred_compare |
53 | ação |
46 | pred_source |
28 | tipo |
17 | destino |
C.3 SELECT todos os itens disponíveis classificados por tipo
O SELECT a seguir retorna aproximadamente 1915 linhas, uma 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];
Saída
Para aguçar seu apetite, a seguir está uma amostragem arbitrária dos objetos retornados pelo SELECT anterior.
Type-of-Item | Pacote | Item | Item-Description |
---|---|---|---|
ação | package0 | callstack | Coletar a pilha de chamadas atual |
ação | package0 | debug_break | Interromper o processo no depurador padrão |
ação | sqlos | task_time | Coletar tempo de execução da tarefa atual |
ação | sqlserver | sql_text | Coletar texto SQL |
event | qds | query_store_aprc_regression | Acionado quando o Repositório de Consultas detecta regressão no desempenho do plano de consulta |
event | SQLSatellite | connection_accept | Ocorre quando uma nova conexão é aceita. Este evento serve para registrar todas as tentativas de conexão. |
event | XtpCompile | cgen | Ocorre no início da geração de código C. |
map | qds | aprc_state | Estado de correção de regressão do plano automático do Repositório de Consultas |
mensagem | package0 | histogram_event_required | É necessário um valor para o parâmetro 'filtering_event_name' quando o tipo de origem é 0. |
pred_compare | package0 | equal_ansi_string | Operador de igualdade entre dois valores de cadeia de caracteres ANSI |
pred_compare | sqlserver | equal_i_sql_ansi_string | Operador de Igualdade entre dois valores de cadeia de caracteres SQL ANSI |
pred_source | sqlos | task_execution_time | Obter o tempo de execução da tarefa atual |
pred_source | sqlserver | client_app_name | Obter o nome do aplicativo cliente atual |
destino | package0 | etw_classic_sync_target | Destino Síncrono do ETW (Rastreamento de Eventos para Windows) |
destino | package0 | event_counter | Use o destino event_counter para contar o número de ocorrências de cada evento na sessão de evento. |
destino | package0 | event_file | Use o destino event_file para salvar os dados de evento em um arquivo XEL, que pode ser arquivado e usado para análise e revisão posteriores. Você pode mesclar vários arquivos XEL para ver os dados combinados de sessões de evento separadas. |
destino | package0 | histogram | Use o destino de histograma para agregar dados de evento com base em um campo de dados de evento específico ou ação associada ao evento. O histograma permite que você analise a distribuição dos dados do evento durante o período da sessão de evento. |
destino | package0 | pair_matching | Destino de emparelhamento |
destino | package0 | ring_buffer | Destino de buffer de anéis assíncrono |
tipo | package0 | xml | Fragmento XML bem formado |
C.4 Campos de dados disponíveis para seu evento
A instrução SELECT a seguir retorna todos os campos de dados que são específicos para seu tipo de evento.
- Observe o item de cláusula WHERE: column_type = 'data'.
- Além disso, você precisa editar o valor da cláusula 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];
Saída
As linhas a seguir foram retornadas pelo SELECT, WHERE o.name = 'lock_deadlock'
anterior:
- Cada linha representa um filtro opcional para o evento sqlserver.lock_deadlock .
- A coluna [Column-Description] é omitida da exibição a seguir. Geralmente, seu valor é NULL.
- Essa é a saída real, exceto pela coluna de descrição omitida, que costuma ser nula.
- Essas são as linhas em que object_type = 'lock_deadlock'.
Pacote | Evento | Column-for-Predicate-Data |
---|---|---|
sqlserver | lock_deadlock | associated_object_id |
sqlserver | lock_deadlock | database_id |
sqlserver | lock_deadlock | database_name |
sqlserver | lock_deadlock | deadlock_id |
sqlserver | lock_deadlock | duration |
sqlserver | lock_deadlock | lockspace_nest_id |
sqlserver | lock_deadlock | lockspace_sub_id |
sqlserver | lock_deadlock | lockspace_workspace_id |
sqlserver | lock_deadlock | mode |
sqlserver | lock_deadlock | object_id |
sqlserver | lock_deadlock | owner_type |
sqlserver | lock_deadlock | resource_0 |
sqlserver | lock_deadlock | resource_1 |
sqlserver | lock_deadlock | resource_2 |
sqlserver | lock_deadlock | resource_description |
sqlserver | lock_deadlock | resource_type |
sqlserver | lock_deadlock | transaction_id |
C.5 sys.dm_xe_map_values e campos de evento
A instrução SELECT a seguir inclui um JOIN para a exibição complicada chamada sys.dm_xe_map_values.
A finalidade do SELECT é mostrar os vários campos que podem ser selecionados para sua sessão de eventos. Os campos de evento podem ser usados de duas maneiras:
- Para escolher quais valores do campo serão gravados para o destino para cada ocorrência do evento...
- Para filtrar quais ocorrências do evento serão enviadas para versus mantidas fora de seu destino.
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];
Saída
A seguir, há uma amostragem das 153 linhas reais da saída do T-SQL SELECT anterior. A linha de resource_type é relevante para a filtragem de predicado usada no exemplo event_session_test3 em outro lugar nesse artigo.
/*** 5 sampled rows from the actual 153 rows returned.
NOTE: 'resource_type' under 'Column'.
Package Object Object-Type O--C Column Column-Type-Name Column-Type Column-Value C--M Map-Value Map-Key
------- ------ ----------- ---- ------ ---------------- ----------- ------------ ---- --------- -------
sqlserver lock_deadlock event o--c CHANNEL etw_channel readonly 2 c--m Operational 4
sqlserver lock_deadlock event o--c KEYWORD keyword_map readonly 16 c--m access_methods 1024
sqlserver lock_deadlock event o--c mode lock_mode data NULL c--m IX 8
sqlserver lock_deadlock event o--c owner_type lock_owner_type data NULL c--m Cursor 2
sqlserver lock_deadlock event o--c resource_type lock_resource_type data NULL c--m PAGE 6
Therefore, on your CREATE EVENT SESSION statement, in its ADD EVENT WHERE clause,
you could put:
WHERE( ... resource_type = 6 ...) -- Meaning: 6 = PAGE.
***/
C.6 Parâmetros para destinos
A instrução SELECT a seguir retorna todos os parâmetros para o seu destino. Cada parâmetro está marcado para indicar se é obrigatório. Os valores que você atribui a parâmetros afetam o comportamento do destino.
- Observe o item de cláusula WHERE: object_type = 'customizable'.
- Além disso, você precisa editar o valor da cláusula 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];
Saída
As linhas de parâmetros a seguir são um subconjunto daquelas retornadas pela instrução SELECT anterior, no SQL Server 2016.
/*** Actual output, all rows, where target name = 'event_file'.
Package Target Parameter Parameter-Type IsMandatoryYN Parameter-Description
------- ------ --------- -------------- ------------- ---------------------
package0 event_file filename unicode_string_ptr YES_Mandatory Specifies the location and file name of the log
package0 event_file increment uint64 Not_mandatory Size in MB to grow the file
package0 event_file lazy_create_blob boolean Not_mandatory Create blob upon publishing of first event buffer, not before.
package0 event_file max_file_size uint64 Not_mandatory Maximum file size in MB
package0 event_file max_rollover_files uint32 Not_mandatory Maximum number of files to retain
package0 event_file metadatafile unicode_string_ptr Not_mandatory Not used
***/
C.7 SELECT de DMV convertendo a coluna target_data para XML
Esse SELECT de DMV retorna linhas de dados do destino de sua sessão de eventos ativa. Os dados são convertidos em XML, o que torna sua célula retornada clicável para a exibição fácil no SSMS.
- Se sua sessão de evento for interrompida, este SELECT retornará zero linhas.
- Você precisa 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 sua célula XML
Aqui está a única linha resultante do SELECT anterior. A coluna XML-Cast contém uma cadeia de caracteres de XML que o SSMS entende que é XML. Portanto, o SSMS compreende que ele deve tornar a célula de XML-Cast clicável.
Para esta execução:
- O valor s.name = foi definido para uma sessão de evento para o evento checkpoint_begin .
- O destino 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 exibido formatado quando a célula é clicada
Quando a célula XML-CAST é clicada, a seguinte exibição formatada aparece.
<RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="2" eventCount="2" droppedCount="0" memoryUsed="104">
<event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:23.508Z">
<data name="database_id">
<type name="uint32" package="package0" />
<value>5</value>
</data>
</event>
<event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:26.975Z">
<data name="database_id">
<type name="uint32" package="package0" />
<value>5</value>
</data>
</event>
</RingBufferTarget>
C.8 SELECT FROM de uma função para recuperar dados de event_file da unidade de disco
Suponha que sua sessão de eventos coletou alguns dados e foi parada posteriormente. Se sua sessão tiver sido definida para usar o destino event_file, você ainda poderá recuperar os dados chamando a função sys.fn_xe_target_read_file.
- Você deve editar o caminho e o nome de arquivo no parâmetro da chamada de função, antes de executar este SELECT.
- Não dê atenção aos dígitos extra que o sistema SQL integra nos nomes de arquivo .XEL reais sempre que você reinicia a sessão. Apenas dê o nome raiz e a extensão normais.
SELECT --C.8
f.module_guid,
f.package_guid,
f.object_name,
f.file_name,
f.file_offset,
CAST(f.event_data AS XML) AS [Event-Data-As-XML]
FROM
sys.fn_xe_file_target_read_file(
'\<YOUR-PATH-FILE-NAME-ROOT-HERE!>*.xel',
--'C:\Junk\Checkpoint_Begins_ES*.xel', -- Example.
NULL, NULL, NULL
) AS f;
Saída, linhas retornadas pelo SELECT FROM da função
A seguir estão as linhas retornadas pelo SELECT FROM da função anterior. A coluna do XML mais à direita 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:\Junk\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel 5120 <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:14.023Z"><data name="database_id"><value>5</value></data><action name="session_id" package="sqlserver"><value>60</value></action><action name="database_id" package="sqlserver"><value>5</value></action></event>
D5149520-6282-11DE-8A39-0800200C9A66 03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2 checkpoint_end C:\Junk\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel 5120 <event name="checkpoint_end" package="sqlserver" timestamp="2016-07-09T03:30:14.025Z"><data name="database_id"><value>5</value></data></event>
D5149520-6282-11DE-8A39-0800200C9A66 03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2 checkpoint_begin C:\Junk\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel 5632 <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:17.704Z"><data name="database_id"><value>5</value></data><action name="session_id" package="sqlserver"><value>60</value></action><action name="database_id" package="sqlserver"><value>5</value></action></event>
D5149520-6282-11DE-8A39-0800200C9A66 03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2 checkpoint_end C:\Junk\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel 5632 <event name="checkpoint_end" package="sqlserver" timestamp="2016-07-09T03:30:17.709Z"><data name="database_id"><value>5</value></data></event>
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>