FolioPierEstudos de TI

Monitoramento

Nota 37 de 41 · 5 min de leitura
Nesta página
  1. Identificar o servidor e o momento
  2. As conexões
  3. Os contadores do servidor
  4. O log de consultas lentas
  5. O computador do servidor
  6. Registrar o que foi visto

Quando a demora desaparece antes da coleta, parte da evidência desaparece junto. O monitoramento durante a ocorrência separa a espera, a execução pesada, o excesso de conexões e um reinício do serviço. O objetivo é registrar o estado que explica o sintoma sem criar uma carga maior que o próprio problema.

Identificar o servidor e o momento

  • SELECT VERSION(), @@hostname, @@port, DATABASE(), CONNECTION_ID();: identifica o servidor, a porta, o banco e a conexão da observação.

Esses valores evitam misturar o servidor da loja com outro servidor, e o horário de cada coleta fica anotado, com os relógios dos computadores conferidos. A conta da observação também importa. Sem o privilégio PROCESS, a lista de conexões mostra apenas as conexões da própria conta, e a conexão que bloqueia pode ficar de fora.

As conexões

  • SHOW FULL PROCESSLIST;: mostra cada conexão, com o identificador, a conta, o computador de origem, o banco, o tipo de comando, o tempo, o estado e a instrução.

Sem a palavra FULL, a instrução aparece cortada nos primeiros 100 caracteres. O tempo mostra os segundos no estado atual, e não a duração total da operação na tela. Uma conexão no estado Sleep pode guardar uma transação aberta, e por isso a conexão mais antiga não é necessariamente a responsável pela demora.

Os contadores do servidor

  • SHOW GLOBAL STATUS WHERE Variable_name IN ('Uptime', 'Threads_connected', 'Threads_running', 'Connections', 'Aborted_connects', 'Slow_queries');: mostra os principais contadores do servidor.

Os contadores têm significados diferentes:

  • Uptime: os segundos desde a última inicialização do serviço. Um valor pequeno indica um reinício recente, sem explicar a causa.
  • Threads_connected: as conexões abertas no momento.
  • Threads_running: as conexões que estão trabalhando no momento, e não dormindo.
  • Connections: o total de tentativas de conexão desde a inicialização.
  • Aborted_connects: o total de tentativas de conexão que falharam.
  • Slow_queries: o total de consultas que passaram do limite de tempo definido para consultas lentas.

Os três últimos contadores só aumentam, e a leitura útil vem da comparação de duas amostras. Se o Connections passa de 10.000 para 10.300 em 60 segundos, o servidor recebeu 300 conexões novas nesse intervalo, e não 10.300 conexões ao mesmo tempo.

O limite de conexões simultâneas aparece com o comando SHOW VARIABLES LIKE 'max_connections';, e o padrão costuma ser 151. Quando o limite é atingido, as novas conexões recebem o erro 1040, de conexões demais.

O log de consultas lentas

O log de consultas lentas registra as consultas que passam de um tempo limite, de 10 segundos por padrão. Dois comandos mostram a configuração:

  • SHOW VARIABLES LIKE 'slow_query%';: mostra se o log está ligado e o nome do arquivo;
  • SHOW VARIABLES LIKE 'long_query_time';: mostra o tempo limite, em segundos.

Cada registro traz o tempo da consulta, o tempo de espera por bloqueio, as linhas devolvidas e as linhas examinadas. O registro é gravado ao fim da execução, e a ordem do arquivo pode ser diferente da ordem em que as consultas começaram. A ausência de uma consulta no log não prova que não houve demora, porque o log pode estar desligado ou com um limite alto.

A partir do MySQL 5.1.12, o log pode ser ligado sem reiniciar o serviço, com o comando SET GLOBAL slow_query_log = 1;. A ligação considera o volume de registros e o espaço em disco, e o horário da mudança fica anotado.

O computador do servidor

Os contadores do banco não substituem a observação do computador. O Gerenciador de Tarefas do Windows mostra o uso do processador, da memória e do disco pelo processo do MySQL, e o espaço livre de cada disco também entra na coleta. Um disco cheio paralisa o banco tanto quanto um bloqueio.

Registrar o que foi visto

Uma anotação precisa vale mais que uma impressão. A frase “a conexão 42 esperava um bloqueio da conexão 17 às 10h14” explica mais do que “o banco estava pesado”. Depois da intervenção, as mesmas observações são repetidas e comparadas. Quando o sintoma some antes da coleta, a causa fica registrada como não confirmada.

No suporte

A coleta começa pelas observações de baixo custo, durante o sintoma, com o horário e a origem de cada uma. Consultas amplas, registros detalhados ligados por muito tempo e comandos que executam a consulta investigada aumentam a carga do servidor.

Para guardar

  • O servidor, o horário e a conta da observação dão sentido à coleta.
  • O estado da conexão e o estado da transação são informações diferentes.
  • Os contadores acumulados exigem a comparação de duas amostras.
  • O Uptime confirma um reinício, mas não a causa dele.
  • O log de consultas lentas só registra o que passa do limite configurado.
  • Uma ocorrência sem evidência suficiente termina com a causa não confirmada.
O contador Connections está em 100.000. Isso significa 100.000 conexões abertas agora?

Não. O Connections soma as tentativas de conexão desde a inicialização do serviço. As conexões abertas aparecem no Threads_connected, e a diferença do Connections entre duas amostras mostra o ritmo de conexões novas.

A conta usada na observação não mostra as conexões de outras contas. É possível concluir que não existe uma conexão bloqueando?

Não. Sem o privilégio PROCESS, a lista mostra apenas as conexões da própria conta. A limitação fica registrada, e a observação é repetida com uma conta que tenha esse privilégio.

Publicado a partir do Obsidian · FolioPier