Buenas Prácticas de Concurrencia
La higiene de concurrencia previene tormentas de bloqueos, hinchazón y retraso en la replicación.
Cómo Usar Esta Lista
- Revisa
pg_stat_activitysemanalmente para detectar transacciones inactivas. - Establece tiempos de espera en los valores predeterminados del rol o del pool.
A - Forma de la Transacción
- Mantén las transacciones cortas. Sin esperas del usuario dentro de TX.
- Una acción de negocio por TX cuando sea posible. Dominios de fallo claros.
- Reintenta bloqueos y fallos de serialización. Retroceso exponencial con jitter.
B - Bloqueos y Aislamiento
-
read committedpor defecto a menos que se necesite algo más fuerte.Serializablepara escrituras con muchos invariantes. -
FOR UPDATE SKIP LOCKEDpara colas de trabajo. Evita el caos de bloqueos consultivos. - Indexa las filas que bloqueas mediante predicados. Previene escaneo secuencial + bloqueo de todas las filas.
C - Mantenimiento
- Monitoriza las transacciones largas y las ranuras de replicación. Las ranuras retienen WAL.
- Autovacuum ajustado para tablas con muchas actualizaciones. Las tuplas muertas bloquean la visibilidad.
- Establece
idle_in_transaction_session_timeout. Mata las sesiones abandonadas.
Preguntas Frecuentes
¿Es suficiente `repeatable read`?
A menudo para informes; serializable para invariantes estrictos entre escritores concurrentes.
Relacionado
- Conceptos Básicos de Transacciones - límites
- Transacciones Largas - retención de WAL
Versiones de Stack: Esta página fue escrita para PostgreSQL 18.4 (estable 18, mantenimiento 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x, y PostGIS 3.5+.