IGTI Blog

Wait Events: O que são e para que servem?

Os DBAs devem medir o desempenho através dos wait events (eventos de tempo de espera).

Conhecimento é poder. Melhorar o desempenho das nossas tarefas é primordial nos tempos de hoje. Quem não quer ganhar tempo e aumentar sua produtividade? Um dos objetivos principais de um DBA é garantir que as aplicações sejam executadas com um bom desempenho para os seus respectivos usuários. Mas o que seria um bom desempenho? Já tentou chegar a uma conclusão dentro de sua equipe, empresa ou usuários? O que pode ser considerado bom desempenho para um ramo da empresa, pode não ser para outro. A resposta não é simples.

É importante definir as principais métricas a serem observadas para se chegar a uma medida de desempenho/performance. Estas métricas devem ser idealmente centradas no aplicativo, no usuário final e no rendimento. Antes de você passar para um hardware mais rápido ou para o provisionamento de mais recursos, é preciso entender todo o contexto: aplicações envolvidas, servidores, usuários, enfim, é necessário ter números! Não pode ser apenas “achismo”. Depois de conhecer o contexto e as métricas você poderá investigar o seu banco de dados de forma muito mais eficaz. Uma das análises possíveis no SGBD é através dos wait events. Este será o tema central deste nosso artigo.   

Como podemos medir e saber exatamente o que está acontecendo com o SGBD? Quais as causas da demora na execução de um processo? Não basta saber qual é a transação ou quanto tempo ela demora, é necessário ir mais além, ou seja, descobrir onde estão os gargalos em comum do SGBD. É neste momento que aparece os denominados wait events. A metodologia básica para entender o desempenho de um banco de dados é a análise do tempo de espera (wait events).

Os Wait Events permitem ao DBA visualizar onde o SGBD gasta mais tempo para que o processamento das transações seja concluído. Com eles podemos identificar os gargalos de espera que incidiram desde o início ao término de um processo, incluindo esperas por operações de I/O, locks, network, dentre outros. Com estes dados será possível propor melhoria em geral para o sistema dando direcionamento para uma solução ou redução do impacto causado pelo gargalo de espera.

 Wait events na prática

Conforme já mencionamos, sempre que um SGBD precisa aguardar por algo, seja um simple lock ou uma gravação ou leitura do disco, por exemplo, essa espera é registrada, indicando sua ocorrência e quanto tempo o SGBD deve aguardar.  Os wait events ficam armazenados em tabelas temporárias ou dinâmicas no próprio banco de dados.  Os conteúdos são repovoados começando na inicialização do servidor e descartados no desligamento do servidor.

As esperas são classificadas de acordo com o que o SGBD está esperando. Cada tipo de espera é representada por um wait type.  Desta forma, analisando quais wait types estão causando maior quantidade de esperas ou por tempo mais longo, podemos identificar problemas no servidor de banco de dados. Temos um problema no disco? Temos problemas com Locks? Os waits podem nos apontar isso.

Existem também vários wait types que são benignos ou muito pouco significativos e por isso devem ser excluídos (filtrados) do resultado da sua query quando você for utilizá-los.  Utilize a documentação de cada SGBD para identificar quais são os eventos de espera importantes que devem ser analisados e quais serão descartados na sua análise.

MYSQL

No MYSQL os wait events fazem parte do banco de dados Performance Schema. As tabelas que guardam os respectivos dados são:

  • events_waits_current: Eventos atuais
  • events_waits_history: Histórico de eventos
  • events_waits_history_long: Resumo dos eventos.

O esquema de desempenho monitora os eventos do servidor. Um “evento” é qualquer coisa que o servidor faz e que leva tempo. Em geral, um evento pode ser uma chamada de função, uma espera para o sistema operacional, um estágio de execução de uma instrução SQL, como análise ou classificação, ou uma instrução inteira ou grupo de instruções. Os eventos são específicos de uma determinada instância do Servidor MySQL.

Eventos atuais estão disponíveis, bem como históricos de eventos e resumos. Isso permite que você determine quantas vezes as atividades foram realizadas e quanto tempo elas levaram.

Exemplo de wait events:

Mais informações aqui

Oracle

Conforme a documentação do Oracle, os wait events são divididos em três tabelas/visões dinâmicas distintas:

  • V$SESSION_WAIT: exibe os eventos para os quais as sessões acabaram de concluir ou estão esperando.
  • V$SYSTEM_EVENT: exibe o número total de tempo que todas as sessões têm aguardado por eventos de espera.
  • V$SESSION_EVENT: é semelhante ao V$SYSTEM_EVENT, mas mostra todas as esperas para cada sessão.

Todo evento de espera pertence a uma classe de espera (Wait Class). A partir da visão V$EVENT_NAME podemos identificar os tipos de classe de espera e os tipos de eventos, bem como o que representam os parâmetros(PARAMETER) P1, P2 e P3 da V$SESSION_WAIT igualmente como as colunas P1TEXT, P2TEXT e P3TEXT desta mesma view.

Exemplo de wait events:

Mais informações aqui

 SQL SERVER

As duas principais views do SQLServer que permitem recuperar as informações dos wait events são: “dm_os_wait_stats” e “dm_exec_session_wait_stats”. Os tipos de eventos de espera são divididos em espera de recurso (objeto bloqueado), fila em espera (algum processo de segundo plano executando alguma ação) ou espera externa (códigos externos).

Exemplo de wait events:

Mais informações aqui

PostgreSQL

O PostgreSQL também oferece suporte ao relatório de informações dinâmicas sobre exatamente o que está acontecendo no sistema agora, como o comando exato que está sendo executado atualmente por outros processos do servidor e quais outras conexões existem no sistema. A principal view dinâmica no Postgres que contém todas estas informações sobre a atividade de cada processo é a “pg_stat_activity”.

Exemplo de wait events:

Mais informações aqui

Identificar os principais pontos de lentidão dentro das aplicações, mais precisamente dentro do SGBD pode ser uma tarefa mais objetiva com a análise dos “Wait Events”. Estes permitem atacar o problema em sua raiz. É interessante observar que a maioria dos SGBDs do mercado proporciona a funcionalidade dos wait events de forma distinta, mas com o mesmo objetivo.

É primordial estudar, informar e consultar a documentação oficial de cada SGBD para determinar o que cada evento significa. Desta forma você poderá encerrar problemas que te acompanham há tempos, através desta “antiga” funcionalidade, mas que a cada dia é mais aprimorada tornando-a mais atual do que nunca.

       Dicas:

  • Os DBAs podem elaborar relatórios semanais ou mensais de desempenho. Mostrar que com as melhorias, investimentos em hardware, por exemplo, podem ser postergados. Esse é um modelo de DBA que cria valor dentro da empresa. Mais do que criar, você prova.
  • Planeje todas as alterações no ambiente de banco de dados, inclusive as de desempenho! Avise quando serão realizadas com antecedência. Seus usuários agradecem.

Professor autor: Armstrong Gomes Brito