0Pricing
SQL Academy · Lección

Agrupación de conexiones: PgBouncer

Ejecute PgBouncer en modo de agrupación por transacciones, dimensione correctamente los grupos y evite la trampa de las sentencias preparadas.

Agrupación de conexiones: PgBouncer es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.

¿Por qué agrupar las conexiones?

Cada conexión de Postgres es un proceso independiente del sistema operativo, con un consumo elevado de memoria y CPU. Las aplicaciones que abren y cierran conexiones en cada solicitud agotan rápidamente el servidor. La agrupación reutiliza un conjunto reducido de conexiones de larga duración.

Coste por conexión

Un proceso backend típico de Postgres utiliza entre 5 y 10 MB de RAM. 500 conexiones equivalen a unos 5 GB de RAM solo para los procesos backend. PgBouncer puede multiplexar miles de clientes sobre 50 conexiones backend.

Tres modos de agrupación

  • Session: el cliente obtiene una conexión dedicada durante toda la sesión
  • Transaction: el cliente obtiene una conexión por transacción
  • Statement: una conexión por sentencia, utilizado rara vez

Modo Transaction (recomendado)

Cada transacción obtiene una conexión del servidor. El mismo cliente puede utilizar conexiones diferentes en transacciones sucesivas.

# pgbouncer.ini
[databases]
mydb = host=primary port=5432 dbname=mydb

[pgbouncer]
pool_mode = transaction
listen_port = 6432
max_client_conn = 1000
default_pool_size = 50

Advertencias del modo Transaction

Las funciones que requieren estado de sesión dejan de funcionar:

  • Sentencias preparadas (necesitan el mismo backend en llamadas sucesivas)
  • SET LOCAL ... (es correcto por transacción; SET ..., que persiste entre transacciones, no lo es)
  • LISTEN / NOTIFY (necesitan una conexión persistente)
  • Cursores que sobreviven a una transacción

Modo Session

Utilícelo cuando el modo Transaction rompa la aplicación, pero tendrá menos clientes simultáneos.

Dimensionar los grupos

Regla general: default_pool_size ≈ vCPU count × 2 + spindles. Un valor demasiado alto hace que los cambios de contexto reduzcan el rendimiento; uno demasiado bajo provoca esperas en el grupo.

PgBouncer delante de HAProxy

Arquitectura de producción habitual:

App → HAProxy (read/write routing) → PgBouncer (pooling) → Postgres

Sentencias preparadas en modo Transaction

Las versiones recientes de PgBouncer (1.21 y posteriores) admiten sentencias preparadas a nivel de protocolo en modo Transaction. En versiones anteriores, utilice consultas simples o el modo Session.

Supervisar PgBouncer

Conéctese a la base de datos de administración, que es una base de datos especial:

psql -p 6432 -U pgbouncer pgbouncer

-- Commands:
SHOW STATS;
SHOW POOLS;
SHOW CLIENTS;
SHOW SERVERS;

Alternativas

  • pgpool-II: agrupación, balanceo de carga y reescritura de consultas
  • Odyssey: el pooler de Yandex, con varios hilos
  • Grupos del lado del driver: normalmente se combinan con PgBouncer para agrupar conexiones en todo el clúster

Grupo de la aplicación y PgBouncer

Normalmente, las aplicaciones ejecutan su propio grupo de conexiones (HikariCP, pgxpool) Y además pasan por PgBouncer. Es una agrupación en dos capas: el grupo de la aplicación mantiene las conexiones con el bouncer, y el bouncer las multiplexa sobre Postgres.

Resumen

PgBouncer es esencial a cualquier escala no trivial.

  • El modo Transaction es el estándar
  • Preste atención a prepared statements, SET y LISTEN
  • El tamaño del grupo debe ser aproximadamente vCPU × 2
  • Supervise con SHOW POOLS

Comprobación rápida

¿Qué modo de PgBouncer multiplexa al mayor número de clientes utilizando el menor número de conexiones del servidor?

Preguntas frecuentes

¿La lección «Agrupación de conexiones: PgBouncer» es gratis?

Sí — el texto completo de «Agrupación de conexiones: PgBouncer» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Agrupación de conexiones: PgBouncer»?

Ejecute PgBouncer en modo de agrupación por transacciones, dimensione correctamente los grupos y evite la trampa de las sentencias preparadas. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Academy?

No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Agrupación de conexiones: PgBouncer»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Academy?

Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. pg_stat_statements: consultas principales
  2. pgBadger para analizar registros
  3. Agrupación de conexiones: PgBouncer
  4. Planificación de capacidad y auditorías de fragmentación
← Volver a SQL Academy