Eventos estendidos no Banco de Dados SQL do Azure e na Instância Gerenciada SQL do Azure

Aplica-se a:Banco de Dados SQL do Azure Instância Gerenciada SQLdo Azure

Para obter uma introdução aos Eventos Estendidos, consulte:

O conjunto de recursos, a funcionalidade e os cenários de uso para Eventos Estendidos no Banco de Dados SQL do Azure e na Instância Gerenciada SQL do Azure são semelhantes aos disponíveis no SQL Server. As principais diferenças são:

  • O event_file destino sempre usa blobs no Armazenamento do Azure, em vez de arquivos no disco.
  • No Banco de Dados SQL do Azure, as sessões de eventos são sempre com escopo de banco de dados. Isto significa que:
    • Uma sessão de eventos em um banco de dados não pode coletar eventos de outro banco de dados.
    • Um evento deve ocorrer no contexto de um banco de dados de usuário para ser incluído em uma sessão.
  • Na Instância Gerenciada SQL do Azure, você pode criar sessões de eventos com escopo de servidor e de banco de dados. Recomendamos o uso de sessões de eventos com escopo de servidor para a maioria dos cenários.

Começar

Há dois exemplos para ajudá-lo a começar rapidamente com os Eventos Estendidos no Banco de Dados SQL do Azure e na Instância Gerenciada SQL do Azure:

  • Crie uma sessão com um destino event_file no Armazenamento do Azure. Este exemplo mostra como capturar dados de eventos em um arquivo (blob) no Armazenamento do Azure usando o event_file destino. Use isso se precisar persistir os dados de eventos capturados ou se quiser usar o visualizador de eventos no SQL Server Management Studio (SSMS) para analisar os dados capturados.
  • Crie uma sessão com um destino ring_buffer na memória. Este exemplo mostra como capturar os eventos mais recentes de uma sessão de evento na memória usando o ring_buffer destino. Use isso como uma maneira rápida de examinar eventos recentes durante investigações ad hoc ou solução de problemas, sem precisar armazenar dados de eventos capturados.

Os Eventos Estendidos podem ser usados para monitorar réplicas somente leitura. Para obter mais informações, consulte Ler consultas em réplicas.

Melhores práticas

Adote as seguintes práticas recomendadas para usar os Eventos Estendidos no Banco de Dados SQL do Azure e na Instância Gerenciada SQL do Azure de forma confiável e sem afetar a integridade do mecanismo de banco de dados e o desempenho da carga de trabalho.

  • Se você usar o event_file destino:
    • Não defina a EVENT_RETENTION_MODE opção como NO_EVENT_LOSS. Isso pode causar tempos limite de conexão e atrasos de failover, entre outros problemas, afetando a disponibilidade do banco de dados ou da instância gerenciada.
    • Use uma conta de armazenamento na mesma região do Azure que o banco de dados ou a instância gerenciada onde você cria sessões de eventos.
    • Alinhe a redundância da conta de armazenamento com a redundância do banco de dados, pool elástico ou instância gerenciada. Para recursos localmente redundantes , use LRS, GRS ou RA-GRS. Para recursos redundantes de zona, use ZRS, GZRS ou RA-GZRS. Consulte Redundância do Armazenamento do Azure para obter detalhes.
    • Não use nenhuma camada de acesso de blob além de Hot.
  • Se você quiser criar uma sessão de eventos em execução contínua que seja iniciada automaticamente após cada reinicialização do Mecanismo de Banco de Dados (por exemplo, após um failover ou um evento de manutenção), inclua a opção de sessão de evento em STARTUP_STATE = ON suas CREATE EVENT SESSION instruções or ALTER EVENT SESSION .
  • Por outro lado, use STARTUP_STATE = OFF para sessões de eventos de curto prazo, como as usadas na solução de problemas ad hoc.
  • No Banco de Dados SQL do Azure, não leia eventos de deadlock da sessão de eventos interna dl . Se houver um grande número de eventos de deadlock coletados, lê-los com a função sys.fn_xe_file_target_read_file() pode causar um erro de falta de memória no master banco de dados. Isso pode afetar o processamento de login e resultar em uma interrupção do aplicativo. Para obter as maneiras recomendadas de monitorar deadlocks, consulte Coletar gráficos de deadlock no Banco de Dados SQL do Azure com eventos estendidos.

Alvos da sessão do evento

A Base de Dados SQL do Azure e a Instância Gerida SQL do Azure suportam os seguintes destinos:

  • event_file alvo. Grava buffers completos em um blob em um contêiner de Armazenamento do Azure.
  • ring_buffer alvo. Mantém os dados do evento na memória até serem substituídos por novos dados do evento.
  • event_counter alvo. Conta todos os eventos que ocorrem durante uma sessão de eventos estendida.
  • alvo do histograma . Conta as ocorrências de diferentes valores de campos ou ações em buckets separados.
  • event_stream. Transmite dados de eventos para um aplicativo .Net.

Nota

O event_stream destino no Banco de Dados SQL do Azure e na Instância Gerenciada SQL do Azure está em visualização.

Diferenças do Transact-SQL

Ao executar as instruções CREATE EVENT SESSION, ALTER EVENT SESSION e DROP EVENT SESSION no SQL Server e na Instância Gerenciada SQL do Azure, você usa a ON SERVER cláusula. No Banco de Dados SQL do Azure, você usa a ON DATABASE cláusula em vez disso, porque no Banco de Dados SQL do Azure as sessões de eventos têm escopo de banco de dados.

Vistas alargadas do catálogo de Eventos

Eventos estendidos fornece várias exibições de catálogo. As visualizações de catálogo informam sobre a definição ou metadados da sessão do evento. Essas exibições não retornam informações sobre instâncias de sessões de eventos ativas.

Nome da vista de catálogo Description
sys.database_event_session_actions Retorna uma linha para cada ação em cada evento de uma sessão de evento.
sys.database_event_session_events Retorna uma linha para cada evento em uma sessão de evento.
sys.database_event_session_fields Retorna uma linha para cada coluna personalizável que foi explicitamente definida em eventos e destinos.
sys.database_event_session_targets Retorna uma linha para cada destino de evento para uma sessão de evento.
sys.database_event_sessions Retorna uma linha para cada sessão de evento no banco de dados.

Exibições de gerenciamento dinâmico de eventos estendidos

Os Eventos Estendidos fornecem várias exibições de gerenciamento dinâmico (DMVs). Os DMVs retornam informações sobre sessões de eventos iniciadas .

Nome do Detran Description
sys.dm_xe_database_session_event_actions Retorna informações sobre ações de sessão de evento.
sys.dm_xe_database_session_events Retorna informações sobre eventos de sessão.
sys.dm_xe_database_session_object_columns Mostra os valores de configuração para objetos que estão vinculados a uma sessão.
sys.dm_xe_database_session_targets Retorna informações sobre destinos de sessão.
sys.dm_xe_database_sessions Retorna uma linha para cada sessão de evento em execução no banco de dados atual.

Detrans comuns

Há DMVs de Eventos Estendidos adicionais que são comuns ao Banco de Dados SQL do Azure, à Instância Gerenciada do SQL do Azure e ao SQL Server:

Eventos, ações e destinos disponíveis

Assim como no SQL Server, você pode obter eventos, ações e destinos disponíveis usando esta consulta:

SELECT o.object_type,
       p.name AS package_name,
       o.name AS db_object_name,
       o.description AS db_obj_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON p.guid = o.package_guid
WHERE o.object_type IN ('action','event','target')
ORDER BY o.object_type,
         p.name,
         o.name;

Permissões

No Banco de Dados SQL do Azure e na Instância Gerenciada SQL do Azure, os Eventos Estendidos dão suporte a um modelo de permissão granular. As seguintes permissões podem ser concedidas:

CREATE ANY DATABASE EVENT SESSION
DROP ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION ADD EVENT
ALTER ANY DATABASE EVENT SESSION DROP EVENT
ALTER ANY DATABASE EVENT SESSION ADD TARGET
ALTER ANY DATABASE EVENT SESSION DROP TARGET
ALTER ANY DATABASE EVENT SESSION ENABLE
ALTER ANY DATABASE EVENT SESSION DISABLE
ALTER ANY DATABASE EVENT SESSION OPTION

Para obter informações sobre o que cada uma dessas permissões controla, consulte CREATE EVENT SESSION, ALTER EVENT SESSION e DROP EVENT SESSION.

Todas essas permissões são incluídas na CONTROL permissão no banco de dados ou na instância gerenciada. No Banco de Dados SQL do Azure, o proprietário do banco de dados (dbo), os db_owner membros da função de banco de dados e os administradores do servidor lógico detêm a permissão do banco de dados CONTROL . Na Instância Gerenciada SQL do Azure, os membros da função de servidor mantêm a sysadminCONTROL permissão na instância.

Autorização e controlo de contentores de armazenagem

Quando você usa o destino, os event_file dados de evento são armazenados em blobs em um contêiner de Armazenamento do Azure. O Mecanismo de Banco de Dados que executa a sessão de eventos deve ter acesso específico a esse contêiner. Você concede esse acesso criando um token SAS para o contêiner e armazenando o token em uma credencial.

No Banco de Dados SQL do Azure, você deve usar uma credencial com escopo de banco de dados. Na Instância Gerenciada SQL do Azure, use uma credencial com escopo de servidor.

O token SAS que você cria para seu contêiner de Armazenamento do Azure deve atender aos seguintes requisitos:

  • Tenha as rwl (Read, Write, List) permissões.
  • Tenha a hora de início e a hora de expiração que abrangem o tempo de vida da sessão do evento.
  • Não tem restrições de endereço IP.

Gestão de recursos

No Banco de Dados SQL do Azure, o consumo de memória por sessões de eventos estendidas é controlado dinamicamente pelo Mecanismo de Banco de Dados para minimizar a contenção de recursos.

Há um limite de memória disponível para sessões de eventos:

  • Em um único banco de dados, a memória total da sessão é limitada a 128 MB.
  • Em um pool elástico, os bancos de dados individuais são limitados pelos limites de banco de dados único e, no total, eles não podem exceder 512 MB.

Se você receber uma mensagem de erro fazendo referência a um limite de memória, as ações corretivas que você pode tomar são:

  • Execute menos sessões de eventos simultâneos.
  • Usando CREATE instruções e ALTER para sessões de eventos, reduza a quantidade de memória especificada na MAX_MEMORY cláusula para a sessão.

Nota

Em Eventos Estendidos, a MAX_MEMORY cláusula aparece em dois contextos: ao criar ou alterar uma sessão (no nível da sessão) e ao usar o ring_buffer destino (no nível de destino). Os limites acima se aplicam à memória de nível de sessão.

Há um limite no número de sessões de eventos iniciadas no Banco de Dados SQL do Azure:

  • Em um único banco de dados, o limite é 100.
  • Em um pool elástico, o limite é de 100 sessões com escopo de banco de dados por pool.

Em pools elásticos densos, iniciar uma nova sessão de evento estendida pode falhar devido a restrições de memória, mesmo quando o número total de sessões iniciadas estiver abaixo de 100.

Para localizar a memória total consumida por uma sessão de evento, execute a seguinte consulta enquanto estiver conectado ao banco de dados onde a sessão de evento foi iniciada:

SELECT name AS session_name,
       total_buffer_size + total_target_memory AS total_session_memory
FROM sys.dm_xe_database_sessions;

Para localizar a memória total da sessão de eventos para um pool elástico, essa consulta precisa ser executada em todos os bancos de dados do pool.