Introduzindo o SQL Server Extended Events

O SQL Server Extended Events (Eventos Estendidos) é um sistema de manipulação de eventos para sistemas de servidores. A infraestrutura de Eventos Estendidos oferece suporte à correlação de dados do SQL Server e, em certas condições, à correlação de dados entre sistema operacional e aplicativos de banco de dados. No último caso, a saída de Eventos Estendidos deve ser direcionada ao ETW (Rastreamento de Eventos do Windows) para correlacionar dados de evento com o sistema operacional ou com os dados de evento do aplicativo.

Todos os aplicativos têm pontos de execução que são úteis dentro e fora de um aplicativo. Dentro do aplicativo, o processamento assíncrono pode ser enfileirado usando informações colhidas durante a execução inicial de uma tarefa. Fora do aplicativo, pontos de execução fornecem utilitários de monitoramento com informações sobre as características comportamentais e de desempenho do aplicativo monitorado.

O sistema Eventos Estendidos oferece suporte a dados de evento fora de um processo. Esses dados são geralmente usados por:

  • Ferramentas de rastreamento, como o Rastreamento SQL e o Monitor do Sistema.

  • Ferramentas de log, como o log de eventos do Windows ou o log de erros do SQL Server.

  • Usuários que administram um produto ou desenvolvem aplicativos em um produto.

Design e recursos de Eventos Estendidos

O sistema Eventos Estendidos tem os seguintes principais aspectos:

  • O mecanismo Eventos Estendidos é agnóstico, o que permite que o mecanismo associe qualquer evento a qualquer destino porque não é restrito ao conteúdo do evento. Para obter mais informações sobre o mecanismo Eventos Estendidos, consulte Mecanismo de eventos estendidos do SQL Server.

  • Os eventos são separados dos consumidores de evento, que são chamados destinos em Eventos Estendidos. Isso significa que qualquer destino pode receber qualquer evento. Além disso, qualquer evento gerado pode ser consumido automaticamente pelo destino, que pode registrar ou fornecer contexto de evento adicional. Para obter mais informações, consulte Destinos de eventos estendidos do SQL Server

  • Os eventos são distintos quanto à ação no disparo de um evento. Como resultado, qualquer ação pode ser associada a qualquer evento.

  • Predicados podem filtrar dinamicamente o disparo de um evento, o que aumenta a flexibilidade da infraestrutura do mecanismo Eventos Estendidos. Para obter mais informações, consulte Pacotes do SQL Server Extended Events.

O mecanismo Eventos Estendidos pode gerar dados de evento de forma síncrona (e processar os dados de forma assíncrona) o que fornece uma solução flexível para manipulação de eventos. Além disso, o mecanismo Eventos Estendidos fornece os seguintes recursos:

  • Uma abordagem unificada no tratamento de eventos em todo o sistema de servidor, permitindo, ao mesmo tempo, que os usuários isolem eventos específicos com a finalidade de solucionar problemas.

  • Integração com e suporte às ferramentas de ETW existentes.

  • Um mecanismo de tratamento de evento completamente configurável com base no Transact-SQL.

  • A habilidade de monitorar processos ativos dinamicamente com efeito mínimo sobre esses processos.

Usando Extended Events com ETW

Se você quiser usar o Extended Events para correlacionar dados do sistema operacional e de aplicativos de banco de dados, é recomendável primeiro ter conhecimentos práticos do ETW. O ETW pode ser usado com o Extended Events ou como um consumidor de eventos do Extended Events. Os seguintes tópicos fornecem um ponto de partida para a obtenção de informações gerais sobre o ETW:

Cenários para uso de eventos estendidos

Você pode usar eventos estendidos em uma grande variedade de cenários de monitoramento e solução de problemas. Os cenários a seguir ilustram algumas das situações em que o mecanismo Eventos Estendidos pode fornecer dados valiosos para resolver problemas em áreas como:

  • Solucionando problemas da causa de fragmentação de conjunto de trabalho

  • Solucionando problemas de uso excessivo de CPU

  • Solucionando problemas de deadlocks

  • Correlacionando atividade de solicitação com logs ETW do Windows

Solucionando problemas da causa de fragmentação de conjunto de trabalho

Você está experimentando graves problemas de desempenho com seu servidor de produção, o que faz com que os aplicativos cliente excedam o tempo limite. Esses problemas parecem ser temporários e o desempenho volta ao normal depois de 10 a 15 minutos.

Você examina o log de erros do SQL Server e encontra as seguintes mensagens de erro:

"Uma parte significativa do processo de servidor passou pelo page out. Isso pode resultar em degradação de desempenho. Duração: 300 segundos. Utilização da memória atual 34%."

"IOCP Listener não está respondendo."

ObservaçãoObservação

IOCP significa "porta de Conclusão de IO". Essa porta atende a solicitações de usuário na rede. A mensagem indica que a porta de conclusão foi bloqueada no último minuto.

Você suspeita que o SQL Server não esteja respondendo suficientemente rápido à pressão de memória no servidor. Quando você verifica a memória com o Gerenciador de Tarefas, parece haver memória mais do que suficiente disponível no servidor. Você tenta se conectar ao banco de dados do SQL Server Management Studio, mas a tentativa excede o tempo limite. Você pode se conectar ao servidor emitindo o comando SQLCMD - A no prompt de comando do Windows. Isso abre uma sessão na conexão de administrador dedicada.

Você decide usar o mecanismo Eventos Estendidos para obter mais informações. Você cria uma sessão de Eventos Estendidos que:

  • Adiciona eventos ao sinal de memória do sistema e à alteração de memória total do servidor.

  • Direciona a saída para o ETW. Essa saída será gravada em um arquivo criado em uma unidade que não é usada pelo arquivo de paginação ou pelos arquivos de banco de dados SQL Server.

No prompt de comando do Windows você executa uma instrução para permitir um rastreamento ETW kernel do Windows em todos os eventos da memória. Você permite a execução desses rastreamentos por vários minutos e depois fecha a sessão de eventos estendidos e o rastreamento de Kernel do Windows.

Você usa tracerpt.exe para correlacionar o rastreamento do Windows e o rastreamento de ETW do SQL Server. Você procura um evento que indica que a notificação de memória baixa do sistema foi definida, mas não localizada. Em vez disso, você vê um grande número de faltas de páginas de todos os processos no servidor. Você examina os eventos antes da paginação e descobre que os conjuntos de trabalhos de todos os processos foram fragmentados em resposta a uma solicitação de alocação de memória de um driver.

Solucionando problemas de uso excessivo de CPU

Você está investigando uso excessivo de CPU em seu sistema de produção. Você usa vários DMVs (Exibições de Gerenciamento Dinâmico) para determinar se o uso de CPU pode ser atribuído a consultas executadas no sistema. Esse exame indica que a maioria das consultas é de consultas de usuário ad hoc. As informações obtidas dos DMVs não são suficientes para diagnosticar o problema.

Você cria uma sessão de Eventos Estendidos que:

  • Habilita eventos para conclusão de instrução com predicados que especificam limite de CPU.

  • Tem uma ação para só coletar o plano de consulta quando o evento é acionado.

  • Grava todos os dados coletados em um arquivo. Esse arquivo está em uma unidade que não contém nenhum arquivo de log ou de banco de dados.

Depois de iniciar a sessão de Eventos Estendidos você examina a saída e pode determinar que a causa do problema de CPU é uma conversão de tipo de dados entre duas tabelas unidas em comum.

Solucionando problemas de deadlocks

Você tem recebido relatórios de usuários indicando que certos aplicativos estão retornando erros de deadlock. Para maximizar a efetividade da solução desses problemas, você decide focalizar os deadlocks acessados com mais frequência. Você cria uma sessão de Eventos Estendidos que:

  • Configura o controle do evento de deadlock para a sessão.

  • Especifica um destino que faz a agregação com base em um identificador para o deadlock.

Você executa a sessão Eventos Estendidos. Depois que os deadlocks adicionais são informados você pode obter informações de agregação de deadlock e o gráfico de deadlock XML completo para cada origem. Usando essas informações você pode especificar os deadlocks mais comuns e começar a trabalhar na solução.

Correlacionando atividade de solicitação com logs ETW do Windows

Você está solucionando um problema de redução de velocidade do aplicativo em seu servidor de produção e pode restringir a causa a longas horas de leitura de disco. Você cria uma sessão de Eventos Estendidos que:

  • Adiciona leituras de disco como um evento de sessão.

  • Envia os dados coletados para o ETW.

Depois de iniciar a sessão Eventos Estendidos você executa um rastreamento de kernel ETW do Windows. Depois de 10 minutos você para ambas as sessões.

Você usa tracerpt.exe para mesclar o rastreamento do Windows e o rastreamento do ETW do SQL. Desse rastreamento mesclado você pode correlacionar e controlar as solicitações de leitura do SQL Server para o kernel do Windows. Essa análise indica uma longa demora antes que a solicitação de E/S seja revertida ao SQL Server. Usando essas informações você pode determinar conclusivamente que o problema de E/S está no caminho físico de E/S.