Eventos Estendidos no Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure
Aplica-se a: Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Para ver 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 de SQL do Azure são semelhantes aos disponíveis no SQL Server. As diferenças principais são:
- O destino
event_file
sempre usa BLOBs no Armazenamento do Azure, em vez de arquivos em disco. - No Banco de Dados SQL do Azure, as sessões de evento têm sempre um escopo de banco de dados. Isso significa que:
- Uma sessão de evento em um banco de dados não pode coletar os 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 de SQL do Azure, você pode criar sessões de evento com escopo de servidor e de banco de dados. Recomendamos o uso de sessões de evento com escopo de servidor para a maioria dos cenários.
Introdução
Dois exemplos foram incluídos para ajudar você a começar a usar Eventos Estendidos no Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure rapidamente.
- Criar uma sessão com um destino event_file no Armazenamento do Azure. Este exemplo mostra como capturar dados de evento em um arquivo (BLOb) no Armazenamento do Azure usando o destino
event_file
. Faça isso se você precisar persistir os dados de eventos capturados ou se quiser usar o visualizador de eventos no SQL Server Management Studio (SSMS) para analisar esses dados. - Criar 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 destino
ring_buffer
. Faça isso se quiser examinar rapidamente os eventos recentes durante investigações ad hoc ou a 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, confira Consultas de leitura em réplicas.
Práticas recomendadas
Adote as melhores práticas abaixo para usar Eventos Estendidos no Banco de Dados SQL do Azure e na Instância Gerenciada de 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 destino
event_file
:- Use uma conta de armazenamento na mesma região do Azure que o banco de dados ou a instância gerenciada onde as sessões de eventos forem criadas.
- 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 com redundância local, use LRS, GRS ou RA-GRS. Para recursos com redundância de zona, use ZRS, GZRS ou RA-GZRS. Confira Redundância do Armazenamento do Azure para obter mais detalhes.
- Não use nenhuma camada de acesso de BLOb diferente de
Hot
.
- Se você quiser criar uma sessão de eventos com 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
STARTUP_STATE = ON
em suas instruçõesCREATE EVENT SESSION
ouALTER EVENT SESSION
. - Por outro lado, use
STARTUP_STATE = OFF
para sessões de eventos de curto prazo, como as utilizadas na solução de problemas ad hoc. - No banco de dados SQL do Azure, não leia eventos de deadlock na 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 memória insuficiente no banco de dadosmaster
. Isso pode afetar o processamento do login e resultar em interrupção do aplicativo. Para ver as maneiras recomendadas de monitorar deadlocks, consulte Coletar gráficos de deadlock no banco de dados SQL do Azure com eventos estendidos.
Destinos da sessão de evento
O Banco de Dados SQL do Azure e a Instância Gerenciada de SQL do Azure são compatíveis com os seguintes destinos:
- Destino event_file Grava buffers completos em um BLOb de um contêiner de Armazenamento do Azure.
- Destino ring_buffer Mantém os dados de eventos na memória até que sejam substituídos por novos dados de eventos.
- Destino event_counter Conta todos os eventos ocorridos durante uma sessão de eventos estendidos.
- Destino histogram Conta as ocorrências de valores diferentes de campos ou ações em buckets separados.
- event_stream Transmite dados de eventos para um aplicativo .NET.
Observação
O destino event_stream
no Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure está em Preview.
Diferenças do Transact-SQL
Ao executar as instruções CREATE EVENT SESSION, ALTER EVENT SESSION e DROP EVENT SESSION no SQL Server na Instância Gerenciada de SQL do Azure, você usa a cláusula ON SERVER
. Porém, no Banco de Dados SQL do Azure, você usa a cláusula ON DATABASE
, porque as sessões de evento do Banco de dados SQL do Azure têm escopo de banco de dados.
Exibições do catálogo de Eventos Estendidos
Os Eventos Estendidos têm várias exibições do catálogo. As exibições do catálogo informam sobre metadados ou definição da sessão de eventos. Essas exibições não retornam informações sobre as instâncias de sessões de eventos ativas.
Nome do modo de exibição de catálogo | Descrição |
---|---|
sys.database_event_session_actions | Retorna uma linha para cada ação em cada evento de uma sessão de eventos. |
sys.database_event_session_events | Retorna uma linha para cada evento em uma sessão de eventos. |
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 em uma sessão de evento. |
sys.database_event_sessions | Retorna uma linha para cada sessão de eventos no banco de dados. |
Exibições de gerenciamento dinâmico de Eventos Estendidos
Os Eventos Estendidos têm várias exibições de gerenciamento dinâmico (DMVs). As DMVs retornam informações sobre as sessões de eventos iniciadas.
Nome da DMV | Descrição |
---|---|
sys.dm_xe_database_session_event_actions | Retorna informações sobre ações da sessão de evento. |
sys.dm_xe_database_session_events | Retorna informações sobre os eventos da sessão. |
sys.dm_xe_database_session_object_columns | Mostra os valores de configuração de objetos associados a uma sessão. |
sys.dm_xe_database_session_targets | Retorna informações sobre os destinos da sessão. |
sys.dm_xe_database_sessions | Retorna uma linha para cada sessão de evento sendo executada no banco de dados atual. |
DMVs comuns
Existem outras DMVs de Eventos Estendidos que são comuns ao Banco de Dados SQL do Azure, à Instância Gerenciada de 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 a seguinte 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
Dica
Em 2022, a Microsoft introduziu uma série de novas permissões mais granulares para Eventos Estendidos, para obter mais informações, consulte Blog: Novas permissões granulares para SQL Server 2022 e SQL do Azure para melhorar a adesão ao PoLP.
No Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure, os Eventos Estendidos são compatíveis com 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 saber mais sobre o que cada uma dessas permissões controla, consulte CREATE EVENT SESSION, ALTER EVENT SESSION e DROP EVENT SESSION.
Todas essas permissões estão incluídas na permissão CONTROL
do banco de dados ou da instância gerenciada. No Banco de Dados SQL do Azure, o proprietário do banco de dados (dbo
), os membros da função db_owner
do banco de dados e os administradores do servidor lógico têm a permissão CONTROL
do banco de dados. Na Instância Gerenciada de SQL do Azure, os membros da função sysadmin
de servidor detêm a permissão CONTROL
na instância.
Controle e autorização de contêiner de armazenamento
Quando você usa o destino event_file
, os dados de eventos são armazenados em BLObs em um contêiner do Armazenamento do Azure. O Mecanismo de Banco de Dados que executa a sessão do evento precisa de acesso específico a esse contêiner. Você pode conceder esse acesso de uma das seguintes maneiras:
Atribua a função RBAC do Colaborador de Dados do Blob de Armazenamento à identidade gerenciada do servidor lógico SQL do Azure ou da instância gerenciada do SQL do Azure no contêiner e crie uma credencial para instruir o Mecanismo de Banco de Dados a usar a identidade gerenciada para autenticação.
Como alternativa à atribuição da função RBAC Colaborador de Dados do Blob de Armazenamento, você pode atribuir as seguintes ações RBAC:
Namespace Ação Microsoft.Storage/storageAccounts/blobServices/containers/
read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/
delete
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/
read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/
write
Observação
O uso de identidade gerenciada com sessões de eventos estendidos está em versão prévia.
Crie um token SAS para o contêiner e armazene 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 de SQL do Azure, use uma credencial com escopo de servidor.
O token SAS criado para o contêiner de Armazenamento do Azure deve atender aos seguintes requisitos:
- Ter as
rwdl
permissões (Read
,Write
,Delete
,List
). - Ter um período com hora de início e hora de expiração que abranja a vida útil da sessão de evento.
- Não ter restrições de endereço IP.
- Ter as
Governança de recursos
No Banco de Dados SQL do Azure, o consumo de memória por sessões de eventos estendidos é controlado dinamicamente pelo Mecanismo de Banco de Dados para minimizar a contenção de recursos.
Existe um limite de memória disponível para sessões de eventos:
- Em um único banco de dados, a memória total para sessões é limitada a 128 MB.
- Em um pool elástico, os bancos de dados individuais são restringidos pelos limites do banco de dados individual, e não podem exceder 512 MB no total.
Se receber uma mensagem de erro fazendo referência a um limite de memória, as medidas corretivas que você pode tomar são:
- Executar menos sessões simultâneas do evento.
- Usar as instruções
CREATE
eALTER
para sessões de eventos, além de reduzir a quantidade de memória especificada na cláusulaMAX_MEMORY
da sessão.
Observação
Em Eventos Estendidos, a cláusula MAX_MEMORY
aparece em dois contextos: ao criar ou alterar uma sessão (no nível da sessão) e ao usar o destino ring_buffer
(no nível de destino). Os limites acima se aplicam à memória de nível de sessão.
Existe um limite para o número de sessões de evento iniciadas no Banco de Dados SQL do Azure:
- Em um banco de dados individual, o limite é 100.
- Em um pool elástico, o limite é de 100 sessões no escopo do banco de dados por pool.
Em pools elásticos densos, iniciar uma nova sessão de evento estendido poderá 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 de um pool elástico, essa consulta precisa ser executada em todos os bancos de dados do pool.