Melhores Práticas de Concorrência
A higiene de concorrência previne tempestades de locks, inchaço e atraso na replicação.
Como Usar Esta Lista
- Revise
pg_stat_activitysemanalmente para identificar transações ociosas. - Defina timeouts nos padrões de role ou pool.
A - Formato da Transação
- Mantenha transações curtas. Sem pausas para o usuário dentro da TX.
- Uma ação de negócio por TX quando possível. Domínios de falha claros.
- Tente novamente em deadlocks e falhas de serialização. Backoff exponencial com jitter.
B - Locks e Isolamento
- Use
read committedpor padrão, a menos que um nível mais forte seja necessário.Serializablepara escritas com invariantes pesados. - Use
FOR UPDATE SKIP LOCKEDpara filas de trabalho. Evite um emaranhado de locks advosorios. - Indexe linhas que você bloqueia via predicados. Evite
seq scan+ bloqueio de todas as linhas.
C - Manutenção
- Monitore transações longas e slots de replicação. Slots retêm WAL.
- Ajuste o
autovacuumpara tabelas com muitas atualizações. Tuplas mortas bloqueiam a visibilidade. - Defina
idle_in_transaction_session_timeout. Mate sessões abandonadas.
FAQs
O nível `repeatable read` é suficiente?
Frequentemente para relatórios; serializable para invariantes estritos entre escritores concorrentes.
Relacionados
- Noções Básicas de Transações - limites
- Transações Longas - retenção de WAL
Versões da Stack: Esta página foi escrita para PostgreSQL 18.4 (estável 18, manutenção 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x e PostGIS 3.5+.