Ferramentas de IO e Memória
iostat, vmstat, pidstat em hosts PostgreSQL 18.4 Linux - conecte métricas do host a PIDs do postgres durante incidentes de IO e memória.
Receita
# Snapshot de IO (pacote sysstat)
iostat -xz 1 5
# Visão de memória e escalonador de CPU
vmstat 1 5
# RSS por processo para PIDs do postgres
pidstat -r -p $(pgrep -d, -f 'postgres:') 1 5SELECT pid, wait_event_type, wait_event, state, left(query, 60)
FROM pg_stat_activity
WHERE backend_type = 'client backend' AND state = 'active';Quando usar isso:
- Latência p95 aumentada, mas a porcentagem de CPU parece ociosa (espera de IO)
- Atividade de OOM ou swap durante grandes consultas de
sort/hash aggregate - Autovacuum ou checkpoint suspeitos de saturar o disco
Exemplo de Trabalho
Sintoma: Timeouts de API; CPU do Postgres 30%, mas latência alta.
iostat -xz 1 3Device r/s w/s rkB/s wkB/s %util
nvme0n1 4500 800 72000 12000 98.5SELECT queryid, calls, mean_exec_time, shared_blks_read, temp_blks_written
FROM pg_stat_statements
ORDER BY shared_blks_read DESC NULLS LAST LIMIT 5;pidstat -u -p $(pgrep -n -f 'postgres:') 1 3Interpretação:
%utilperto de 100% → disco saturado- Consulta principal com
shared_blks_readalto → varredura sequencial ou cache frio - PID específico com CPU alta em
pidstat→ correlacionar compg_stat_activity.pid
Mergulho Profundo
Colunas do iostat
| Coluna | Significado | Link para Postgres |
|---|---|---|
r/s, rkB/s | Taxa de leitura | Varreduras sequenciais, leituras de cache de índice frio |
w/s, wkB/s | Taxa de gravação | Checkpoints, WAL, autovacuum |
%util | Dispositivo ocupado | >80% sustentado é um gargalo |
await | Latência de IO | await alto + util alto → limites do disco |
Colunas do vmstat
| Coluna | Significado | Ação |
|---|---|---|
si, so | Swap in/out | Pressão de memória; risco de OOM |
us, sy | CPU do usuário/sistema | sy alto durante o estado de espera de IO |
wa | Espera de IO | Corresponde à saturação do iostat |
b | Processos bloqueados | Fila de execução sobrecarregada |
pidstat no Postgres
# Todos os backends do postgres RSS a cada segundo
pidstat -r -C postgres 1 5
# Backend único do pg_stat_activity
pidstat -r -p 284719 1 10SELECT pid, query, work_mem_needed FROM (
SELECT pid, left(query,40) AS query
FROM pg_stat_activity WHERE state = 'active'
) q;- Operações de sort/hash mostram aumento do RSS em um PID antes de despejar para o disco (
temp_blks_written)
Checkpoint vs IO de Consulta
SELECT checkpoints_timed, checkpoints_req, checkpoint_write_time, buffers_checkpoint
FROM pg_stat_bgwriter;- Pico de checkpoint: taxa de gravação alta, menos linhas de consulta ativas em
pg_stat_activity - Tempestade de consultas: muitos backends ativos com eventos de espera
DataFileRead
Armadilhas
- Culpar o Postgres sem iostat - Limitação do EBS/NFS parece consultas lentas. Correção: meça
%utilprimeiro. - Amostra única do vmstat - pico enganoso. Correção: intervalo de 1 segundo, 5+ amostras.
- pidstat no PID errado - postmaster vs backend. Correção: use o PID de
pg_stat_activity. - Ignorar a contagem de conexões - 200 sorts x
work_memesgotam a RAM. Correção: agrupe conexões, diminua o papel dowork_mempor consulta. - Ajustar
shared_buffersdurante tempestade de swap - não corrige o swap. Correção: reduza os consumidores de memória, adicione RAM, corrija as consultas.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
htop | Análise interativa detalhada | Pacote de incidentes automatizado |
| Métricas de volume da nuvem | Dashboards RDS/EBS | Necessita prova por PID |
pg_stat_io (PG 16+) | Visão de IO em nível de banco de dados | Limitação de disco em nível de host |
FAQs
Instalar sysstat em produção?
Frequentemente em um bastion, não no pod do banco de dados. Para k8s, use um sidecar de depuração com iostat ou confie no node exporter + Prometheus.
Qual %util é muito alto?
Sustentado >70-80% no volume de dados durante OLTP requer investigação. Rajadas durante lotes noturnos podem ser aceitáveis se o SLA não for afetado.
pidstat não encontrado?
apt install sysstat ou yum install sysstat. Fallback: snapshots de ps -o pid,rss,cmd -p <pid>.
Relacionados
- Noções Básicas de CLI Linux para DBAs - saúde do disco e do serviço
- Melhores Práticas de CLI - política de scripting
- Ajuste de Work Mem e Sort Hash - GUCs de memória
- Varredura Sequencial vs. Varredura de Índice - amplificação de leitura
- Habilidade de Triagem de Incidentes - branch de IO
Versões da Pilha: Esta página foi escrita para PostgreSQL 18.4 em Linux com sysstat 12+ (
iostat,pidstat,vmstat).