Noções Básicas da CLI do Linux para DBAs
10 exemplos para sinais de disco e memória durante tempestades de consultas em hosts Linux com PostgreSQL 18.4 - triagem com bash antes de alterar GUCs ou fazer failover.
Busque em todas as páginas da documentação
10 exemplos para sinais de disco e memória durante tempestades de consultas em hosts Linux com PostgreSQL 18.4 - triagem com bash antes de alterar GUCs ou fazer failover.
kubectl exec para o pod do banco de dados (função somente leitura para juniores).PGDATA: /var/lib/postgresql/18/main ou o ponto de montagem específico do provedor.psql no PATH com política de credenciais de produção somente leitura.export PGDATA=/var/lib/postgresql/18/main
export DATABASE_URL="postgresql://readonly@localhost:5432/myapp"df -h "$PGDATA"
df -i "$PGDATA" # exaustão de inodes parece disco cheio
du -sh "$PGDATA/pg_wal" "$PGDATA/log" 2>/dev/null || truefree -h
vmstat 1 5
dmesg -T | tail -30 | grep -i -E 'oom|kill|postgres'SELECT name, setting, unit FROM pg_settings
WHERE name IN ('shared_buffers','work_mem','maintenance_work_mem','effective_cache_size');postgres com alto RSS durante tempestades de sort/hashwork_mem vezes as ordenações concorrentes podem exceder a RAM sem limites de pool de conexõesSELECT pid, usename, application_name, client_addr, state, wait_event_type, wait_event,
now() - query_start AS duration, left(query, 100) AS query
FROM pg_stat_activity
WHERE datname = current_database() AND pid <> pg_backend_pid()
ORDER BY duration DESC NULLS LAST
LIMIT 20;wait_event_type = IO durante tempestade de checkpoint ou seq scanidle in transaction retém locks e aumenta o vacuumSELECT count(*) FILTER (WHERE NOT granted) AS waiting,
count(*) FILTER (WHERE granted) AS granted
FROM pg_locks;# Linha única do shell via psql
psql "$DATABASE_URL" -t -c "SELECT count(*) FROM pg_locks WHERE NOT granted;"sudo systemctl status postgresql@18-main
sudo journalctl -u postgresql@18-main -p err --since "30 min ago" --no-pagerFATAL: could not write lock file em disco cheiops aux | grep '[p]ostgres'
pgrep -a postgres# Principais workers do postgres por RSS
ps -eo pid,rss,cmd --sort=-rss | grep postgres | head -10postgres: worker são normais; um worker com RSS gigante pode ser um nó de sort/hashss -tnp | grep ':5432'
ss -s # resumo: established, timewaitmax_connections em SQL#!/usr/bin/env bash
set -euo pipefail
OUT="incident-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$OUT"
df -h > "$OUT/df.txt"
free -h > "$OUT/free.txt"
vmstat 1 5 > "$OUT/vmstat.txt"
psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -c "SELECT version();" > "$OUT/version.txt"
psql "$DATABASE_URL" -c "SELECT * FROM pg_stat_activity;" > "$OUT/activity.csv" --csv
psql "$DATABASE_URL" -c "SELECT * FROM pg_locks WHERE NOT granted;" > "$OUT/locks.csv" --csv
tar czf "$OUT.tgz" "$OUT"
echo "bundle: $OUT.tgz"iostat -xz 1 5SELECT queryid, calls, mean_exec_time, shared_blks_read
FROM pg_stat_statements
ORDER BY shared_blks_read DESC NULLS LAST
LIMIT 10;%util no volume de dados mais scans sequenciais nas principais instruções → problema de índice ou cache# Graceful (systemd)
sudo systemctl stop postgresql@18-main
# Emergência apenas após falha da parada
sudo kill -TERM "$(head -1 "$PGDATA/postmaster.pid")"
sleep 10
# kill -9 último recurso - arrisca checkpoint incompletoSIGKILL no postmaster arrisca a recuperação na próxima inicialização; documente no post-mortemPrefira bastion com sysstat (iostat), htop. Imagem mínima de produção: use vmstat, ps, df sempre presentes.
Kubernetes: kubectl exec -it pod -- bash e depois os mesmos comandos. Caminho PGDATA a partir do env ou psql -c 'SHOW data_directory;'.
Hardware morto, PANIC de corrupção ou disco irrecuperável - não para toda tempestade de locks. Veja Habilidade de Triagem de Incidentes.
Versões de Stack: Esta página foi escrita para PostgreSQL 18.4 no Linux (systemd, layouts Debian/RHEL).
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026