Explorar eventos estendidos
O mecanismo de eventos estendidos no SQL do Azure é um sistema de monitoramento leve e avançado que permite coletar informações granulares sobre a atividade em seus bancos de dados e servidores. As soluções de monitoramento na plataforma do Azure permitem que você configure facilmente o monitoramento poderoso para seu ambiente e forneça respostas automatizadas às condições de erro.
Os eventos estendidos se baseiam na funcionalidade do SQL Server Profiler permitindo rastrear consultas e expor dados adicionais (eventos) que você pode monitorar. Exemplos de problemas que você pode solucionar com os Eventos Estendidos incluem:
- Solucionar problemas de desempenho de bloqueio e deadlock.
- Identificar consultas de longa execução.
- Monitorar operações de DDL (linguagem de definição de dados).
- Registrar em log estatísticas de colunas ausentes.
- Observar a demanda de memória no seu banco de dados.
- Operações de E/S físicas de longa execução.
A estrutura de eventos estendidos também permite que você use filtros para limitar a quantidade de dados coletados a fim de reduzir a sobrecarga da coleta de dados e permite que você identifique mais facilmente o problema de desempenho direcionando seu foco para áreas específicas.
Veja abaixo um exemplo de uma sessão de evento estendido criada no Banco de Dados SQL do Azure:
Na imagem acima, xe_deadlocks é o nome de uma sessão de evento estendida em execução no banco de dados AdventureWorks (no lado esquerdo da imagem). O nó de destino event_counter, que está sob seu nó de sessão de evento, conta o número de ocorrências de cada evento na sessão de evento. Para visualizar os dados de destino no Pesquisador de Objetos de SSMS, clique com o botão direito do mouse no nó de destino e selecionar Exibir Dados de Destino. O SSMS exibe os dados como vemos no lado esquerdo da imagem, e os resultados da contagem de cada evento.
Para obter mais informações, confira Eventos estendidos no Banco de Dados SQL do Azure.
O que posso monitorar com os eventos estendidos?
Os eventos estendidos cobrem a área de superfície total do SQL Server e são divididos em quatro canais, que definem o público de um evento.
- Administração: os eventos de administração são direcionados para usuários finais e administradores. Os eventos incluídos indicam um problema dentro de um conjunto bem definido de ações que um administrador pode tomar. Um exemplo disso é a geração de um relatório de deadlock XML para ajudar a identificar a causa raiz do deadlock.
- Operacionais: os eventos operacionais são usados para análise e diagnóstico ou problemas comuns. Esses eventos podem ser usados para disparar uma ação ou tarefa com base em uma ocorrência do evento. Um exemplo de um evento operacional seria um banco de dados em um estado de alteração do grupo de disponibilidade, que indicaria um failover.
- Analíticos: os eventos analíticos normalmente estão relacionados a eventos de desempenho e são publicados em grande volume. O rastreamento de procedimento armazenado ou execução de uma consulta seria exemplo de um evento analítico.
- Depuração: os eventos de depuração não estão totalmente documentados e você deve usá-los apenas para solucionar problemas junto ao suporte da Microsoft.
Os eventos são adicionados às sessões, que podem hospedar vários eventos. Normalmente, vários eventos são agrupados em uma sessão para capturar um conjunto de informações relacionado.
Você pode executar a consulta abaixo para obter uma lista dos eventos, ações e destinos disponíveis:
SELECT
obj.object_type,
pkg.name AS [package_name],
obj.name AS [object_name],
obj.description AS [description]
FROM sys.dm_xe_objects AS obj
INNER JOIN sys.dm_xe_packages AS pkg ON pkg.guid = obj.package_guid
WHERE obj.object_type in ('action', 'event', 'target')
ORDER BY obj.object_type,
pkg.name,
obj.name;
Criar sessão de eventos estendidos
Você verá abaixo o processo básico de criação de uma sessão de eventos estendidos usando a caixa de diálogo Nova Sessão do SQL Server Management Studio. Você pode acessar essa tela expandindo o nó de Gerenciamento no SSMS, expandindo o nó Eventos Estendidos, clicando com o botão direito do mouse em Sessões e selecionando Nova Sessão.
A imagem acima mostra a caixa de diálogo Nova Sessão do recurso de eventos estendidos. Primeiro você deve nomear a sessão. O SQL Server fornece vários modelos agrupados nas seguintes categorias:
- Bloqueios e Blocos
- Equivalentes Profiler
- Execução da consulta
- Monitoramento do Sistema
Esses modelos predefinidos permitem que você comece rapidamente a usar eventos estendidos para monitoramento. Neste exemplo, você verá eventos adicionados manualmente à sessão para se orientar por todas as opções, mas quando se está usando o recurso pela primeira vez, usar um modelo pode ser uma maneira fácil de criar uma sessão básica.
Você tem algumas opções de seleção para quando iniciar esta sessão. Você pode optar por iniciar sua nova sessão sempre que o servidor for inicializado ou iniciar a sessão assim que ela for criada. Os administradores podem iniciar e interromper as sessões de eventos estendidos a qualquer momento por meio do nó Eventos Estendidos no SQL Server Management Studio. Você também tem a opção de habilitar o acompanhamento casual, que adiciona um GUID (identificador global exclusivo) e um número de sequência para a saída de cada evento, o que permite que você confira facilmente a ordem das etapas em que os eventos ocorreram.
A imagem acima mostra a tela em que você adiciona os eventos à sua sessão. Um evento representa um ponto de interesse no código do mecanismo de banco de dados. Eles podem representar operações puramente internas do sistema ou podem ser associados à ações do usuário, como a execução de consulta. No exemplo acima, você pode ver que os eventos sp_statement_completed
, sql_batch_completed
e sql_statement_completed
foram adicionados a essa sessão de evento. Por padrão, essa sessão capturaria todas as instâncias desses eventos ocorrendo na sua instância. Você pode limitar a coleta clicando no botão configurar.
A tela de configuração de evento permite definir quais dados você está coletando, já que eles estão relacionados aos seus eventos. Os campos globais permitem escolher os dados que você está coletando quando o evento ocorre. Os campos globais também são conhecidos como ações, porque a ação significa acrescentar campos de dados adicionais ao evento. Esses campos representam os dados coletados quando o evento estendido ocorre e são comuns na maioria dos eventos estendidos. A imagem abaixo mostra as opções de filtro para um evento estendido.
Os filtros são um recurso poderoso de Eventos Estendidos que permitem usar o controle granular para capturar apenas as ocorrências específicas do evento que você deseja. Neste exemplo, você pode ver que o filtro está sendo aplicado no campo sqlserver.is_system
onde ele é igual a zero, o que indica que a consulta não é uma operação interna. Em outras palavras, a sessão não capturará a conclusão de instruções enviadas por conexões do sistema, e o que queremos é capturar apenas instruções enviadas por usuários ou aplicativos de usuário.
Os filtros se aplicam a apenas um campo em um evento único. Para garantir que não está rastreando atividades do sistema para nenhum evento, você precisará de um filtro separado para cada um: o evento sql_statement_completed
, o evento sql_batch_completed
e o evento sp_statement_completed
.
É uma boa prática configurar um filtro para cada evento que está sendo capturado. Isso ajuda a melhorar a eficiência da coleta de dados e permite que você estreite o foco da sua pesquisa.
A imagem abaixo mostra os campos de evento coletados. Eles são específicos do evento que está sendo disparado e podem incluir campos opcionais para coleta. No evento acima, você pode ver que as opções de coleção opcionais são statement
e parameterized_plan_handle
.
Depois de ter definido uma sessão do evento, você definirá um destino de armazenamento, conforme mostrado na imagem abaixo.
Uma sessão de evento estendido tem um destino e ele pode ser considerado apenas um lugar para o mecanismo controlar as ocorrências de um evento. Dois dos destinos mais comuns são arquivo de evento, que é um arquivo no sistema que pode armazenar eventos e, nas ofertas de PaaS do SQL do Azure, esses dados são gravados em um armazenamento de blob. Outro destino comum é o buffer em anel que está dentro da memória do SQL Server. O buffer em anel é mais usado para a observação ao vivo de uma sessão de evento, porque ele é um buffer circular e os dados não são mantidos além de uma sessão. A maioria dos destinos processa os dados de forma assíncrona, o que significa que os dados do evento são gravados na memória antes de terem persistido no disco. A exceção é o ETW (destino de rastreamento de eventos do Windows) e os destinos do contador de eventos processados de forma síncrona.
A tabela a seguir contém informações e usos para cada tipo de destino de Eventos Estendidos.
Target (destino) | Descrição | Processing |
---|---|---|
Contador de eventos | Conta todos os eventos ocorridos durante uma sessão de Eventos Estendidos. Ele é usado para obter informações sobre as características de uma carga de trabalho quando ela não tem a sobrecarga de uma coleção de eventos completa. | Síncrono |
Arquivo de Evento | Grava a saída da sessão do evento da memória no arquivo persistente no disco. | Assíncronos |
Emparelhamento de eventos | Muitos eventos que geralmente ocorrem em pares (por exemplo, aquisição de bloqueio, liberação de bloqueio) se adicionados a essa coleção podem ser usados para identificar quando esses eventos não ocorrem em um conjunto correspondente. | Assíncronos |
ETW (Rastreamento de Eventos para Windows) | Usado para correlacionar eventos do SQL Server com os dados de evento do SO do Windows. | Síncrono |
Histograma | Ele é semelhante ao contador de eventos, que conta as ocorrências de um evento. A diferença é que o histograma pode contar com base em uma ação ou coluna de evento específica. | Assíncronos |
Buffer em Anel | Usado para armazenar dados na memória. Os dados não persistem no disco e talvez sejam frequentemente liberados do buffer | Assíncronos |
Como alternativa, você pode criar uma sessão de eventos estendidos usando T-SQL. Os seguintes comandos T-SQL fornecem um exemplo de como criar uma sessão de eventos estendidos:
IF EXISTS (SELECT * FROM sys.server_event_sessions WHERE name='test_session')
DROP EVENT session test_session ON SERVER;
GO
CREATE EVENT SESSION test_session
ON SERVER
ADD EVENT sqlos.async_io_requested,
ADD EVENT sqlserver.lock_acquired
ADD TARGET package0.etw_classic_sync_target (SET default_etw_session_logfile_path = N'C:\demo\traces\sqletw.etl' )
WITH (MAX_MEMORY=4MB, MAX_EVENT_SIZE=4MB);
GO
As sessões de evento podem ser delimitadas para um servidor ou um banco de dados. No exemplo mostrado acima, você está adicionando dois eventos e usando o caminho ETW (rastreamento de eventos para Windows), com um local de arquivo. Depois de criar a sessão, você precisará iniciá-la. Você pode fazer isso por meio do T-SQL e da sessão de ALTER
usando a opção STATE
, ou pode usar o SQL Server Management Studio para isso.