🧠 El punto de inflexión
Si llegaste hasta aquí, ya sabes que:
Odoo abre muchas conexiones
PostgreSQL no escala bien con ellas
El problema no se soluciona dentro de Odoo
Aquí aparece PgBouncer.
🔌 Qué es PgBouncer (sin marketing)
PgBouncer es un connection pooler para PostgreSQL.
En términos simples:
Odoo abre muchas conexiones lógicas
PgBouncer mantiene pocas conexiones reales
PostgreSQL solo ve lo que puede manejar
PgBouncer se coloca entre Odoo y PostgreSQL:
Odoo → PgBouncer → PostgreSQL
🧩 Qué problema resuelve exactamente
Sin PgBouncer:
Cada worker de Odoo abre su conexión
PostgreSQL crea un proceso por conexión
La memoria se dispara
La latencia aumenta
Con PgBouncer:
Las conexiones se reutilizan
PostgreSQL tiene menos procesos
Menos RAM por conexión
Menos locks innecesarios
Latencia más estable
🔄 Pooling: la idea clave
PgBouncer funciona con un concepto simple pero potente:
Una conexión real puede servir a muchos clientes, pero no al mismo tiempo.
Cuando una transacción termina:
la conexión vuelve al pool
otro request la reutiliza
PostgreSQL nunca ve el pico real de usuarios
⚙️ Por qué Odoo no puede hacer esto solo
Odoo:
no tiene pooling interno real
asume conexión directa
mantiene transacciones abiertas más tiempo del ideal
Además:
el ORM no está diseñado para compartir conexiones
tocar esto en Odoo rompería compatibilidad
👉 PgBouncer no reemplaza a Odoo, lo complementa.
🧨 El error común: “mi servidor aguanta sin PgBouncer”
Sí, aguanta… hasta que no.
Normalmente pasa esto:
pocos usuarios → todo bien
crece el uso → latencia intermitente
subes max_connections
más RAM consumida
un día colapsa
PgBouncer no es opcional en producción seria.
🧪 Ejemplo real (simplificado)
Escenario sin PgBouncer:
12 workers
20 usuarios concurrentes
40–60 conexiones reales
PostgreSQL con RAM desperdiciada
Con PgBouncer:
12 workers
20 usuarios concurrentes
10–15 conexiones reales
PostgreSQL estable
👉 Mismo Odoo, comportamiento totalmente distinto.
🧠 PgBouncer no acelera queries (y eso es bueno)
Importante aclararlo:
PgBouncer no hace queries más rápidas
no cachea resultados
no optimiza SQL
Lo que hace es:
evitar el colapso
reducir overhead
estabilizar el sistema
La velocidad mejora porque el sistema deja de pelear consigo mismo.
⚠️ PgBouncer mal configurado puede empeorar todo
PgBouncer no es magia:
mal pool_mode rompe Odoo
pool sizes mal calculados generan starvation
auth mal hecho rompe conexiones
cron jobs pueden bloquear pools
👉 Por eso este curso existe.
Capítulo siguiente ->