Ir al contenido

Configuración básica de PgBouncer optimizada para Odoo

26 de diciembre de 2025 por
Configuración básica de PgBouncer optimizada para Odoo
Juan Manuel De Castro
| Todavía no hay comentarios

🎯 Objetivo de este capítulo

Al terminar este capítulo:

  • PgBouncer estará configurado específicamente para Odoo

  • Evitarás errores típicos de producción

  • Tendrás una base estable para tuning avanzado

👉 No buscamos “máximo rendimiento” todavía.

Buscamos estabilidad + previsibilidad.


🧱 Principio clave: PgBouncer no se configura “genérico”

La mayoría de guías fallan aquí.

PgBouncer:

  • no se configura igual para todas las apps

  • depende del patrón de conexiones

  • depende de transacciones

Odoo tiene un patrón muy particular.

📁 Archivo principal

Todo lo que tocamos está en:

/etc/pgbouncer/pgbouncer.ini


🗂️ Sección [databases]

Ejemplo recomendado:

[databases]
odoo = host=127.0.0.1 port=5432 dbname=odoo


Buenas prácticas

  • Usa un alias por base

  • No uses * = en producción

  • Mantén explícito el dbname


⚙️ Sección [pgbouncer] – Configuración base

🔌 Puertos y escucha

listen_addr = 0.0.0.0
listen_port = 6432
  • Usa 0.0.0.0 solo si Odoo está en otro host

  • Si todo está en el mismo servidor:

    listen_addr = 127.0.0.1


🔐 Autenticación (recomendada)

auth_type = scram-sha-256
auth_file = /etc/pgbouncer/userlist.txt

👉 SCRAM es más seguro y estable que md5.


🔄 Pool mode (CRÍTICO)

pool_mode = transaction

Por qué transaction y no session

  • Odoo abre transacciones frecuentemente

  • session mantiene la conexión ocupada

  • transaction libera la conexión al terminar

❌ session = starvation asegurado

✅ transaction = reutilización eficiente


📊 Tamaño de pools (valores seguros iniciales)

max_client_conn = 500
default_pool_size = 20
reserve_pool_size = 5

Qué significa cada uno

  • max_client_conn

    Máximo de conexiones desde Odoo a PgBouncer

  • default_pool_size

    Conexiones reales a PostgreSQL por base

  • reserve_pool_size

    Conexiones extra para picos breves

👉 Estos valores no son finales, son seguros para empezar.


⏱️ Timeouts importantes

server_idle_timeout = 60
query_timeout = 0
  • server_idle_timeout:

    • cierra conexiones ociosas

    • libera recursos

  • query_timeout = 0:

    • no romper queries largas de Odoo

    • Odoo maneja sus propios timeouts


🧠 Manejo de transacciones problemáticas

idle_transaction_timeout = 60

Evita:

  • transacciones colgadas

  • workers bloqueando pools

🧾 Logging (muy recomendado)

log_connections = yes
log_disconnections = yes
log_pooler_errors = yes

En producción:

  • ayuda a detectar saturación

  • permite debugging real

🧪 Configuración completa recomendada (base)

[databases]
odoo = host=127.0.0.1 port=5432 dbname=odoo

[pgbouncer]
listen_addr = 127.0.0.1
listen_port = 6432

auth_type = scram-sha-256
auth_file = /etc/pgbouncer/userlist.txt

pool_mode = transaction

max_client_conn = 500
default_pool_size = 20
reserve_pool_size = 5

server_idle_timeout = 60
idle_transaction_timeout = 60
query_timeout = 0

log_connections = yes
log_disconnections = yes
log_pooler_errors = yes



🔁 Aplicar cambios

sudo systemctl reload pgbouncer

(O usa restart si cambiaste auth o puertos)

👀 Verificar que todo esté bien

Conéctate a PgBouncer:

psql -p 6432 -U odoo pgbouncer

Y ejecuta:

SHOW POOLS;
SHOW STATS;

Qué debes ver:

  • pools activos

  • pocas conexiones reales

  • clientes entrando y saliendo


❌ Errores comunes en esta fase

  • pool_mode = session

  • pools demasiado pequeños

  • timeouts agresivos

  • no mirar métricas

  • copiar configs genéricas de internet


📌 Conclusión

Con esta configuración:

  • Odoo deja de saturar PostgreSQL

  • PgBouncer actúa como amortiguador

  • El sistema se vuelve estable

👉 Todavía no es óptimo, pero ya es correcto.

Siguiente capítulo ->

Configuración básica de PgBouncer optimizada para Odoo
Juan Manuel De Castro 26 de diciembre de 2025
Compartir
Etiquetas
Archivo
Iniciar sesión dejar un comentario