Pacotes de eventos estendidos

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Um pacote é um contêiner para objetos de Eventos Estendidos no Mecanismo de Banco de Dados do SQL Server. Por exemplo, existem os seguintes pacotes em qualquer Mecanismo de Banco de Dados que ofereça suporte a Eventos Estendidos:

  • package0 - objetos de sistema de Eventos Estendidos. Esse é o pacote padrão.
  • sqlserver - objetos relacionados ao Mecanismo de Banco de Dados
  • sqlos - objetos relacionados do Sistema Operacional do SQL (SQLOS)

Observação

O pacote SecAudit é usado internamente pelo recurso de Auditoria. Nenhum dos objetos nesse pacote está disponível por meio da DDL (linguagem de definição de dados) de Eventos Estendidos.

Os pacotes são identificados por um nome, um GUID e o módulo binário que contém o pacote. Um módulo pode ser um executável ou uma biblioteca de vínculo dinâmico. Para obter mais informações, confira sys.dm_xe_packages.

Um pacote pode conter qualquer ou todos os objetos a seguir, que serão discutidos em maiores detalhes posteriormente neste artigo:

  • Eventos
  • Destinos
  • Ações
  • Tipos
  • Predicados
  • Mapas

Objetos de pacotes diferentes podem ser mesclados em uma sessão de evento. Para obter mais informações, consulte Sessões de Eventos Estendidos.

Conteúdo do pacote

A ilustração a seguir mostra os objetos que podem existir em um pacote.

Diagram that shows the relationship of a module, packages, and objects.

Eventos

Eventos são pontos de interesse de monitoramento no caminho de execução de um programa, como o SQL Server. Quando um evento é disparado, ele contém o fato de que o ponto de interesse foi alcançado e informações de estado a partir do momento em que o evento foi disparado.

Os eventos somente podem ser usados para rastreamento ou ações de disparo. Essas ações podem ser síncronas ou assíncronas.

Observação

Um evento não tem qualquer conhecimento das ações que podem ser disparadas em resposta ao acionamento do evento.

Um conjunto de eventos em um pacote não pode ser alterado depois que o pacote for registrado com Eventos Estendidos.

Todos os eventos têm um esquema de versão que define seu conteúdo. Esse esquema é composto por colunas de evento com tipos definidos. Um evento de um tipo específico sempre tem que fornecer seus dados exatamente na mesma ordem especificada no esquema. No entanto, um evento de destino não precisa consumir todos os dados fornecidos.

Categorização do evento

O Extended Events usa um modelo de categorização de evento semelhante ao ETW (Rastreamento de Eventos do Windows). Duas propriedades de evento são usadas para categorização, canal e palavra-chave. O uso dessas propriedades dá suporte à integração do Extended Events com o ETW e suas ferramentas.

Um canal identifica a audiência para um evento. Os canais são descritos na tabela a seguir.

Termo Definição
Administrador Os eventos Admin são principalmente direcionados aos usuários finais, administradores e suporte. Os eventos encontrados nos canais Admin podem indicar um problema com uma solução bem definida na qual um administrador pode agir. Um exemplo de um evento admin é quando um aplicativo falha ao se conectar. Esses eventos são bem documentados ou têm uma mensagem associada a eles que diz ao leitor o que fazer para retificar o problema.
Operacional Eventos operacionais são usados para analisar e diagnosticar um problema ou uma ocorrência. Eles podem ser usados para disparar ferramentas ou tarefas com base no problema ou na ocorrência.
Analytic Eventos analíticos são publicados em grande volume. Eles descrevem operação de programa e são geralmente usados em investigações de desempenho.
Depurar Eventos depuradores são usados predominantemente por desenvolvedores para diagnosticar um problema de depuração.

Eventos do canal de depuração retornam dados de estado internos específicos de implementação. Os esquemas e os dados retornados pelos eventos podem mudar, tornar-se inválidos ou ser removidos em versões futuras do Mecanismo de Banco de Dados sem aviso prévio.

Uma palavra-chave é específica do aplicativo e habilita um agrupamento mais refinado dos eventos relacionados, o que facilita a especificação e recuperação de um evento que você quer usar em uma sessão. A consulta a seguir pode ser usada para obter informações de palavra-chave.

SELECT map_value AS Keyword
FROM sys.dm_xe_map_values
WHERE name = 'keyword_map';

Destinos

Destinos são consumidores de evento. Os destinos processam eventos de forma síncrona no thread que aciona o evento ou de forma assíncrona em um thread fornecido pelo sistema. Os Eventos Estendidos fornecem vários tipos de destinos que você pode usar conforme apropriado para direcionar a saída do evento. Para obter mais informações, consulte Destinos para Eventos Estendidos.

Use a cláusula ADD TARGET para adicionar destinos a uma sessão de evento.

Ações

Uma ação é uma resposta ou série de respostas de programa a um evento. As ações são vinculadas a um evento, e cada evento pode ter seu próprio conjunto de ações.

Observação

Ações que se destinam a eventos específicos não podem ser vinculadas a outros eventos.

Uma ação associada a um evento é invocada de forma síncrona no thread que acionou o evento. Há muitos tipos de ação e eles têm uma ampla faixa de recursos. As ações podem:

  • Capturar um despejo de processo
  • Armazenar informações de estado em um contexto local usando armazenamento variável
  • Agregar dados de evento
  • Anexar dados aos dados de evento

Exemplos comuns de uso de ações incluem:

  • Coletar o texto SQL de uma consulta que está sendo executada pelo thread que está disparando o evento
  • Coletar o identificador do plano de consulta, o hash da consulta e o hash do plano de consulta
  • Coletar atributos de uma sessão que faz com que o evento seja disparado, incluindo nome do host do cliente, nome da entidade de segurança, ID da conexão etc.
  • Coletar a pilha de chamadas
  • Capturar um despejo de processo quando ocorrer um erro específico

Use a cláusula ACTION para adicionar ações a uma sessão de evento.

Predicados

Predicados são um conjunto de regras lógicas usado para avaliar eventos quando eles são processados. Isso permite que o usuário do Extend Events capture dados de evento seletivamente com base em critérios específicos.

Predicados podem armazenar dados em um contexto local que podem ser usados para criar predicados que retornam valores verdadeiros uma vez a cada n minutos ou a cada n vezes que um evento é acionado. Esse armazenamento de contexto local também pode ser usado para atualizar o predicado dinamicamente, suprimindo, assim, acionamento de evento futuro, caso os eventos contenham dados semelhantes.

Os predicados têm a capacidade de recuperar informações de contexto, como a ID do thread e os dados específicos do evento. Os predicados são avaliados como expressões boolianas completas e oferecem suporte a circuito pequeno no primeiro ponto em que toda a expressão é considerada falsa.

Observação

Predicados com efeitos colaterais não podem ser avaliados se a verificação de um predicado anterior falhar.

Use a cláusula WHERE para adicionar predicados a uma sessão de evento.

Tipos

Em um pacote, cada objeto de Eventos Estendidos tem um tipo. Os seguintes tipos são usados:

  • action
  • event
  • message
  • pred_compare
  • pred_source
  • target
  • type

Para obter mais informações, confira sys.dm_xe_objects.

Mapas

Uma tabela de mapas mapeia um valor interno para uma cadeia de caracteres que habilita um usuário a saber o que o valor representa. Em vez de só poder obter um valor numérico, um usuário pode adquirir uma descrição significativa do valor interno. A consulta a seguir mostra como obter valores de mapa.

SELECT map_key, map_value
FROM sys.dm_xe_map_values
WHERE name = 'lock_mode';

A consulta precedente produz a saída a seguir:

map_key map_value
0 NL
1 SCH_S
2 SCH_M
3 S
4 U
5 X
6 IS
7 IU
8 IX
9 SIU
10 SIX
11 UIX
12 BU
13 RS_S
14 RS_U
15 RI_NL
16 RI_S
17 RI_U
18 RI_X
19 RX_S
20 RX_U
21 LAST_MODE

Usando essa tabela como um exemplo, suponhamos que você tenha uma coluna denominada lock_mode e seu valor seja 5. A tabela indica que 5 é mapeado para X, o que significa que o tipo de bloqueio é Exclusivo.