Explore eventos prolongados
O mecanismo de eventos estendido no SQL do Azure é um sistema de monitoramento leve e poderoso que permite capturar informações granulares sobre a atividade em seus bancos de dados e servidores. As soluções de monitorização na plataforma Azure permitem-lhe configurar facilmente uma monitorização poderosa para o seu ambiente e fornecer respostas automatizadas a condições de erro.
Os eventos estendidos se baseiam na funcionalidade do SQL Server Profiler, permitindo rastrear consultas e expondo dados adicionais (eventos) que você pode monitorar. Alguns exemplos de problemas que você pode solucionar com os Eventos Estendidos incluem:
- Solução de problemas de desempenho de bloqueio e bloqueio.
- Identificação de consultas de longa duração.
- Monitoramento de operações DDL (Data Definition Language).
- Registro de estatísticas de coluna ausentes.
- Observando a pressão da memória em seu banco de dados.
- Operações físicas de E/S de longa duração.
A estrutura de eventos estendida 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 seu problema de desempenho, direcionando seu foco para áreas específicas.
Abaixo está um exemplo de uma sessão de evento estendida 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 o nó da sessão do evento, conta o número de ocorrências de cada evento na sessão do evento. Para exibir os dados de destino no Pesquisador de Objetos do SSMS, clique com o botão direito do mouse no nó de destino e selecione Exibir Dados de Destino. O SSMS exibe os dados como vemos no lado esquerdo da imagem e os resultados da contagem para cada evento.
Para obter mais informações sobre eventos estendidos no Banco de Dados SQL do Azure, consulte Eventos estendidos no Banco de Dados SQL do Azure.
O que posso monitorar com eventos estendidos?
Os eventos estendidos cobrem toda a área de superfície do SQL Server e são divididos em quatro canais, que definem o público de um evento.
- Admin - Os eventos de administrador 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.
- Operacional - 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 grupo de disponibilidade mudando de estado, o que indicaria um failover.
- Analítico - Os eventos analíticos estão tipicamente relacionados com eventos de desempenho e são publicados em grande volume. Rastrear o procedimento armazenado ou a execução da consulta seria um exemplo de um evento analítico.
- Depurar - Os eventos de depuração não são necessariamente totalmente documentados e você só deve usá-los ao solucionar problemas em conjunto com o 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 relacionado de informações.
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 estendida
Você verá abaixo o processo básico de criação de uma sessão de eventos estendida usando a caixa de diálogo Nova Sessão do SQL Server Management Studio. Você pode acessar essa tela expandindo o nó 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 para o recurso de eventos estendidos. Você deve primeiro nomear a sessão. O SQL Server fornece vários modelos que são agrupados nas seguintes categorias:
- Fechaduras e Blocos
- Equivalentes do Profiler
- Execução de Consultas
- Monitorização 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 orientá-lo em todas as opções, mas quando estiver começando, usar um modelo pode ser uma maneira fácil de criar uma sessão básica.
Você tem algumas opções de caixa de seleção para quando iniciar esta sessão. Você pode optar por iniciar sua nova sessão sempre que o servidor for iniciado e também pode optar por iniciar a sessão assim que ela for criada. Os administradores podem iniciar e interromper sessões de eventos estendidas a qualquer momento por meio do nó Eventos Estendidos no SQL Server Management Studio. Você também tem a opção de habilitar o rastreamento de causalidade, que adiciona um identificador global exclusivo (GUID) e um número de sequência à saída de cada evento, o que permite que você percorra facilmente a ordem em que os eventos ocorreram.
A imagem acima mostra a tela onde você adiciona os eventos à sua sessão. Um evento representa um ponto de interesse dentro do código do mecanismo de banco de dados — eles podem representar operações puramente internas do sistema ou podem ser associados a ações do usuário, como a execução de consultas. No exemplo acima, você pode ver que os eventos sp_statement_completed
, sql_batch_completed
e sql_statement_completed
foram adicionados a esta sessão de evento. Por padrão, essa sessão capturaria todas as instâncias desses eventos que ocorrem em sua instância. Você pode limitar a coleta clicando no botão configurar.
A tela de configuração de eventos permite definir quais dados você está coletando em relação aos seus eventos. Campos globais, permitem-lhe escolher os dados que está a recolher, quando o seu evento ocorre. Os campos globais também são conhecidos como ações, pois a ação consiste em adicionar 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 dos Eventos Estendidos que permitem usar o controle granular para capturar apenas as ocorrências específicas do evento que você deseja capturar. Neste exemplo, você pode ver que o filtro está sendo aplicado no campo sqlserver.is_system
onde é 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 queremos apenas capturar instruções enviadas por usuários ou aplicativos de usuário.
Os filtros aplicam-se a um único campo num único evento. Se você quiser ter certeza de que não está rastreando atividades do sistema para nenhum evento, precisará de um filtro separado para cada um: para o sql_statement_completed
evento, para o sql_batch_completed
evento e para o sp_statement_completed
evento.
É uma boa prática configurar um filtro para cada evento que você está capturando. Isso ajuda a melhorar a eficiência da coleta de dados e permite que você restrinja o foco da sua pesquisa.
A imagem abaixo mostra os campos de evento que são coletados. Eles são específicos para o evento que está sendo acionado e podem incluir campos opcionais para coleta. No caso acima, você pode ver que as opções de coleta opcionais são statement
, e parameterized_plan_handle
.
Depois de definir uma sessão de evento, você definirá um destino de armazenamento, como mostra a imagem abaixo.
Uma sessão de evento estendida tem um destino — um alvo pode ser simplesmente pensado como um local para o mecanismo acompanhar as ocorrências de um evento. Dois dos destinos mais comuns são o arquivo de eventos, que é um arquivo no sistema de arquivos 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 de anel que está na memória do SQL Server. O buffer de anel é mais comumente usado para observação ao vivo de uma sessão de evento, pois é um buffer circular e os dados não são persistidos além de uma sessão. A maioria dos destinos processa dados de forma assíncrona, o que significa que os dados do evento são gravados na memória antes de serem persistidos no disco. A exceção são os destinos ETW (Rastreamento de Eventos para Windows) e Contador de Eventos, que são processados de forma síncrona.
A tabela a seguir contém informações e usos para cada tipo de destino de Eventos Estendidos.
Destino | Descrição | Em processamento |
---|---|---|
Contador de Eventos | Conta todos os eventos que ocorreram durante uma sessão de Evento Estendido. Isso é usado para obter informações sobre características de carga de trabalho sobre uma carga de trabalho sem a sobrecarga de uma coleção de eventos completa. | Synchronous (Síncrono) |
Ficheiro de Evento | Grava a saída da sessão de eventos da memória em um arquivo persistente no disco. | Assíncrono |
Emparelhamento de eventos | Muitos eventos que geralmente ocorrem em pares (por exemplo, aquisição de bloqueio, liberação de bloqueio), e essa coleção pode ser usada para identificar quando esses eventos não ocorrem em um conjunto correspondente. | Assíncrono |
Rastreamento de eventos para Windows (ETW) | Usado para correlacionar eventos do SQL Server com os dados de eventos do sistema operacional Windows. | Synchronous (Síncrono) |
Histograma | Isso é 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 coluna ou ação de evento específica. | Assíncrono |
Buffer de anel | Usado para armazenar dados na memória. Os dados não são mantidos no disco e talvez sejam frequentemente liberados do buffer | Assíncrono |
Como alternativa, você pode criar uma sessão de eventos estendida usando T-SQL. Os seguintes comandos T-SQL fornecem um exemplo sobre como criar uma sessão de eventos estendida:
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 eventos podem ter como escopo 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ê terá que iniciá-la. Você pode fazer isso por meio do T-SQL e ALTER
da sessão usando a opção ou pode usar o STATE
SQL Server Management Studio para isso.