Mejores Prácticas de Pooling
Dimensiona los pools de conexiones a partir de la capacidad de la base de datos, no del recuento de réplicas del microservicio. Utiliza esta lista de verificación al desplegar PgBouncer delante de PostgreSQL 18.4.
Cómo Usar Esta Lista
- Valida el entorno de staging a través del pooler, no solo directamente en el puerto 5432.
- Monitoriza
cl_waitingantes de aumentarmax_client_conn. - Empareja los cambios del pool con instantáneas de
pg_stat_activity.
A - Dimensionamiento
- Dimensiona el pool del servidor a partir de los núcleos de CPU y la latencia de consulta p95. No uses
pods * pool_max. - Mantén las conexiones máximas del servidor por debajo del 70% de
max_connections. Reserva margen para administración/replicación. - Utiliza pooling de transacciones para OLTP web sin estado. Pooling de sesiones solo cuando sea necesario.
- Deshabilita o limita las sentencias preparadas del lado del servidor en modo de transacción. Previene errores intermitentes.
- Establece
max_client_connlo suficientemente alto para las aplicaciones pero acotado. El pooler es barato; Postgres no lo es.
B - Configuración
- Configura
server_reset_query = DISCARD ALLen modo de transacción. Limpia el estado de la sesión entre préstamos. - Utiliza alias de pool separados por rol (oltp, reporting, admin). Límites
pool_sizeindependientes. - Termina TLS en el pooler o en la aplicación de forma consistente. Documenta la rotación del almacén de confianza.
- Ejecuta PgBouncer 1.x con SCRAM hacia PostgreSQL 18. Alinea los mecanismos de autenticación.
- Realiza health-check del pooler en el balanceador de carga. No solo del primario de Postgres.
C - Tiempos de Espera y Seguridad
- Establece
statement_timeouta través de los valores predeterminados deALTER ROLE. Sobrevive a los reinicios del pooler. - Establece
idle_in_transaction_session_timeouten los roles de la aplicación. Libera los backends del servidor. - Utiliza
lock_timeouten los roles OLTP. Falla rápido bajo contención de migraciones. - Omite el pooler solo para ventanas controladas de DDL de administración. Documenta la URL de "break-glass".
- Alerta sobre
cl_waitingsostenido y errores de conexión. Notifica antes de la avalancha de usuarios.
D - Operaciones
- Incluye el pooler en los simulacros de failover. Cambio de DNS o configuración al nuevo primario.
- Controla la versión de
pgbouncer.iniyuserlist/auth_querycon control de versiones. Revisa en PRs. - Realiza pruebas de carga de tormentas de conexiones al desplegar. Reinicios de pods en cascada a través del pooler.
- Separa pools para réplicas de lectura al enrutar analíticas. No compartas
pool_sizedel primario. - Revisa
pg_stat_activity.application_namepara conexiones misteriosas. Mapea a alias de pool.
Preguntas Frecuentes
¿Punto de partida para el tamaño del pool?
A menudo 2-4 veces los núcleos de CPU del pool total del servidor; ajusta con métricas.¿JDBC maximumPoolSize?
Pequeño por pod; confía en PgBouncer para la multiplexación.¿sesión vs transacción?
Transacción por defecto; sesión para tablas temporales/listen.¿sentencias preparadas?
Generalmente desactivadas en modo de transacción para ORMs.¿múltiples clústeres?
Instancia de PgBouncer separada o separación lógica por clúster.¿observabilidad?
SHOW POOLS/STATS más `pg_stat_activity` de Postgres.¿serverless?
Se requiere pool externo; nunca ráfagas de `max_connections` sin procesar.¿pool administrado en la nube?
Mismos principios; verifica el comportamiento de preparación y tiempo de espera.¿exposición de la consola de administración?
Restringe el socket de administración de PgBouncer; sin internet público.¿siguiente sección?
Ajuste OLTP vs OLAP para aislamiento de carga de trabajo más allá del pooling.Relacionado
- Conceptos Básicos de Pooling - Fundamentos
- Modos de PgBouncer -
pool_mode - Sentencias Preparadas y Pooling - Configuración de ORM
- Matemáticas de Conexiones - Fórmulas
Versiones de la pila: 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+.