Marcio Cunha

Banco lento? Como achar gargalos de disco no Linux

Aprenda a correlacionar a latência de disco com a lentidão de transações no seu banco de dados usando iostat, pidstat e perf no Linux.

Marcio Cunha•6 min
Também disponível em:EnglishEspañol
Resumo
  • A lentidão em bancos de dados muitas vezes não é falta de CPU, mas sim espera por operações de disco travadas.
  • O comando iostat revela o tempo que o sistema operacional gasta esperando o hardware responder às requisições.
  • Ferramentas como o pidstat ajudam a isolar qual processo específico está gerando o maior volume de leitura e escrita.
  • O utilitário perf permite cavar fundo no kernel para entender quais chamadas de sistema estão segurando as transações.
  • Cruzar dados de tempo de resposta do disco com métricas de processos evita otimizações cegas e economiza tempo de infraestrutura.

Por que o seu banco de dados trava sem motivo aparente?

Quando um sistema de banco de dados começa a responder lentamente, a primeira reação comum é culpar a falta de memória RAM ou o excesso de consultas complexas executadas pelos usuários. Na prática, porém, o verdadeiro vilão costuma se esconder bem abaixo da camada de aplicação, nas engrenagens físicas do armazenamento em bloco. Se o subsistema de disco do seu servidor Linux estiver sufocado, até mesmo as consultas mais simples e otimizadas vão sofrer atrasos severos, acumulando conexões e criando um efeito cascata de lentidão que paralisa todo o ecossistema tecnológico.

Para entender esse fenômeno, precisamos lembrar que o Linux trata o armazenamento através de uma fila complexa de requisições de entrada e saída, conhecidas como I/O. Quando um banco de dados relacional precisa gravar dados de transações ou buscar registros em tabelas extensas, ele envia ordens para o núcleo do sistema operacional. Se essas ordens demoram mais tempo do que o esperado para serem executadas fisicamente pelos discos rígidos ou SSDs, os processos entram em um estado de espera persistente. É exatamente nesse cenário que ferramentas de monitoramento de baixo nível se tornam indispensáveis para salvar a operação.

Como usar o iostat para identificar gargalos gerais de disco

O primeiro passo em qualquer investigação de desempenho de armazenamento no Linux começa com a análise da ferramenta estatística de entrada e saída. Ao executar o comando básico no terminal, você consegue visualizar métricas cruciais sobre a taxa de transferência e a utilização geral dos dispositivos de bloco conectados à máquina. Em cenários de bancos de dados lentos, o segredo não está apenas em olhar a quantidade de dados transferidos por segundo, mas sim em examinar com muita atenção o tempo médio que cada requisição leva para ser atendida pelo hardware.

Para monitorar isso em tempo real e capturar picos de estresse, costumamos rodar o comando com um intervalo de atualização constante de poucos segundos, permitindo observar o comportamento sob carga de produção real. Se você notar que o parâmetro de tempo de espera nas filas está disparando enquanto a utilização do disco bate consistentemente perto de cem por cento, há um claro sinal de saturação física. Antes de comprar mais hardware, vale a pena verificar se o problema não decorre de falhas físicas iminentes, cruzando esses dados com ferramentas de diagnóstico como monitoramento preditivo de falhas em disco com SMART para descartar problemas de desgaste prematuro nas unidades de armazenamento.

iostat -xz 2 10

Na prática, a leitura correta dessa saída exige observar colunas específicas que mostram a porcentagem de tempo que o disco passou ocupado processando solicitações e o atraso acumulado nas filas de espera. Quando a fila cresce de forma desordenada e o tempo de resposta ultrapassa dezenas de milissegundos para operações comuns, o banco de dados sofre um travamento sistêmico. Isso acontece porque o motor do banco frequentemente trava transações inteiras até que a confirmação de gravação segura seja retornada pelo disco, garantindo que nenhum dado valioso seja corrompido em caso de quedas repentinas de energia.

Isolando o culpado com o pidstat e a identificação de processos

Identificar que o disco está lento é apenas metade do caminho para solucionar o problema de engenharia; o próximo passo crítico consiste em descobrir exatamente qual processo ou thread está gerando essa carga excessiva de leitura e escrita. Em servidores robustos, muitas ferramentas rodam em segundo plano, desde serviços de backup até rotinas de indexação e o próprio motor do banco de dados, disputando implacavelmente os mesmos recursos limitados de barramento e armazenamento.

Para rastrear o consumo de I/O em nível de processo de forma cirúrgica, utilizamos o monitor de estatísticas de processos do Linux voltado para o uso de recursos do sistema. Ele permite observar quais tarefas estão consumindo mais largura de banda de disco e gerando alto volume de blocos gravados em tempo real. Executar essa verificação sob carga ajuda a confirmar se o gargalo realmente pertence ao banco de dados principal ou se existe algum processo parasita sugando a capacidade do subsistema de armazenamento da máquina.

pidstat -d 2 10

Quando analisamos a saída gerada por esse comando, conseguimos mapear o identificador exato do processo causador da saturação, permitindo tomar decisões operacionais rápidas e assertivas. Às vezes, o problema de lentidão no banco é agravado por falhas na infraestrutura de rede que atrasam a replicação síncrona ou o tráfego de dados, exigindo diagnósticos paralelos parecidos com os que realizamos quando precisamos isolar falhas de rede em containers Docker com tcpdump para garantir que o fluxo de pacotes não esteja estrangulando o sistema operacional como um todo.

Correlacionando latência com chamadas de sistema usando o perf

Quando as métricas gerais e o rastreamento por processo ainda deixam dúvidas sobre a origem exata da lentidão transacional, a engenharia avançada recorre a um depurador de eventos a nível de kernel extremamente poderoso. O utilitário de desempenho do Linux permite inspecionar o comportamento interno do sistema operacional, mapeando quais funções do código executável estão gastando mais ciclos de processamento ou aguardando respostas de hardware em nível microscópico.

O uso correto dessa ferramenta ajuda a correlacionar a latência sentida pelo usuário final com as chamadas de sistema específicas de leitura e escrita disparadas pelo banco de dados. Embora exija cautela para não gerar sobrecarga adicional em ambientes de produção altamente sensíveis, coletar amostras de eventos de I/O revela gargalos ocultos que ferramentas superficiais jamais conseguiriam expor, mostrando exatamente onde o tempo de processamento está sendo desperdiçado.

perf record -e block:block_rq_issue -ag -- sleep 10

Após coletar os rastreamentos com o depurador de kernel, geramos um relatório consolidado que detalha a árvore de execução dos processos e o tempo gasto em cada etapa do fluxo de armazenamento. Essa visão granular permite separar claramente o tempo consumido pelo processamento interno do banco de dados daquele tempo perdido exclusivamente na espera pelas respostas físicas do dispositivo de armazenamento. Com esses dados em mãos, a equipe de engenharia ganha a capacidade de ajustar parâmetros de concorrência, otimizar políticas de cache do sistema de arquivos ou planejar migrações de hardware com total precisão técnica.

Considerações finais sobre a estabilidade do armazenamento

Investigar gargalos de entrada e saída em bancos de dados no Linux exige ir muito além da simples observação de gráficos superficiais de utilização de hardware. Como vimos, combinar a visão macroscópica fornecida pelo iostat com a precisão de processos do pidstat e a profundidade de kernel do perf transforma uma suposição vaga em um diagnóstico cirúrgico. Manter a estabilidade transacional depende diretamente de entender como o sistema operacional gerencia suas filas de blocos e de agir rapidamente antes que a lentidão do disco comprometa definitivamente a experiência dos usuários da aplicação.

Em ambientes de missão crítica, a prevenção e o monitoramento contínuo continuam sendo as melhores defesas contra falhas catastróficas de infraestrutura e perda de dados. Garantir que o subsistema de armazenamento conte com fontes de energia estáveis, discos com boa margem de vida útil e uma arquitetura de cache bem dimensionada evita surpresas desagradáveis durante os picos de tráfego. Adotar uma rotina rigorosa de auditoria de desempenho garante que sua base de dados permaneça ágil, resiliente e pronta para escalar com segurança à medida que o negócio cresce.