Ir al contenido

PgBouncer: el escudo de conexiones que hace a Odoo más estable

Introducción

Cuando Odoo crece—más usuarios, más compañías, más integraciones—PostgreSQL empieza a sentir la presión: ráfagas de conexiones, sesiones “idle in transaction”, bloqueos y latencias impredecibles. Subir max_connections rara vez ayuda; suele incrementar el consumo de memoria y el context switching del servidor, sin resolver el fondo del problema: gestionar la concurrencia.

Aquí entra PgBouncer, un connection pooler ligero que se coloca entre las aplicaciones (Odoo, integraciones, BI) y la base de datos. En vez de abrir miles de conexiones reales, PgBouncer las reutiliza y suaviza los picos, manteniendo la base estable en momentos críticos (cierres, campañas, procesos masivos). En este artículo verás qué es, cómo funciona, las configuraciones clave, y un checklist de despliegue para aplicarlo con seguridad en tu entorno

¿Qué es PgBouncer?

PgBouncer es un pooler de conexiones para PostgreSQL. Tus apps se conectan a PgBouncer (por convención, puerto 6432); PgBouncer mantiene y reutiliza un número reducido de conexiones reales hacia Postgres. El resultado es menos overhead por apertura/cierre de conexiones y concurrencia controlada.


Por qué Odoo lo necesita

  • Picos (cierre contable, campañas, masivos, ETLs) → ráfagas de conexiones.
  • Sesiones colgadas (idle in transaction) → bloqueos y autovacuum ineficiente.
  • Latencias erráticas → equipos frustrados y SLAs incumplidos.
  • Infra sobredimensionada solo para momentos críticos → costo alto.
    Con PgBouncer estabilizas conexiones y priorizas el trabajo útil.​

Cómo funciona

  • Pooling: en lugar de miles de sockets directos, las apps hablan con PgBouncer; este reutiliza conexiones al backend.
  • Modos:
    • session (por defecto, seguro): una conexión de servidor por sesión de cliente.
    • transaction (más eficiente): devuelve la conexión al terminar cada transacción.
  • statement (agresivo): no permite transacciones multi-sentencia.
    Elige session para empezar en Odoo; evalúa transaction si tu stack no depende de estado de sesión/prepared statements.

Resultados típicos

  • Max connections bajo control.
  • Menos “idle in transaction” y menos bloqueos.
  • Latencia más predecible en horas pico.
    (Los porcentajes exactos dependen de carga, versión de Odoo y personalizaciones.)

¿Tu Odoo va a ciegas? Monitorea tu infraestructura con New Relic y evita sorpresas