Todos los términos del glosario

Agrupación de conexiones

¿Qué es la agrupación de conexiones (connection pooling) en PostgreSQL?

La agrupación de conexiones mantiene abierto un conjunto de conexiones a la base de datos y las comparte entre muchos clientes, porque cada conexión de PostgreSQL la atiende su propio proceso de servidor.

PostgreSQL usa un modelo de un proceso por usuario: cada conexión de cliente la atiende su propio proceso backend en el servidor, y el parámetro max_connections limita cuántas conexiones pueden existir a la vez. Un pool de conexiones se ubica entre la aplicación y la base de datos, mantiene abierto un número limitado de conexiones al servidor y las entrega a los clientes según las necesiten.

El pool puede estar dentro de la aplicación (la mayoría de los drivers y ORM incluyen uno) o en un pooler independiente delante del servidor, como PgBouncer. En la agrupación a nivel de transacción, una conexión al servidor vuelve al pool después de cada transacción, así que la siguiente transacción puede ejecutarse en otra conexión. Todo lo que dependa del estado de la sesión, como los comandos SET a nivel de sesión o las tablas temporales, requiere cuidado en ese modo.

Ejemplo

El ejemplo muestra el límite de conexiones del servidor y cuenta las conexiones de clientes actuales por estado. Muchas conexiones inactivas son una señal común de que un pool ayudaría.

SHOW max_connections;

SELECT state, count(*)
FROM pg_stat_activity
WHERE backend_type = 'client backend'
GROUP BY state;

SQL simple para PostgreSQL 16 o 17 estándar, sin extensiones. Ejecútalo en una base de datos vacía que puedas descartar.

Fuentes

Documentación oficial de PostgreSQL (en inglés).

Términos relacionados