Descripción del control de conexiones
Postgres usa un modelo de conexión basado en procesos. Para establecer una conexión hace falta el sistema operativo y la asignación de una pequeña cantidad de memoria. Cada consulta SQL se ejecuta mediante una conexión actual.
Estados de conexión
Una conexión podría encontrarse en uno de cuatro estados:
- activa: conexiones activas, que actualmente ejecutan consultas.
- inactiva: conexiones abiertas que no están en uso.
- Inactivo en la transacción: conexión en espera que no realiza ningún trabajo. Use pg_stat_activity para comprender qué hace una conexión y cuánto tiempo lleva en este estado.
- inactiva en la transacción (anulada): conexiones que anteriormente se encontraban inactivas en la transacción, pero se han anulado.
El modelo de conexión basado en procesos hace que sea costoso mantener muchas conexiones inactivas.
Número máximo de conexiones
PostgreSQL limita el número máximo de conexiones simultáneas al servidor en un momento dado un parámetro del servidor denominado max_connections. En Azure Database for PostgreSQL, el valor predeterminado depende del nivel de proceso. El valor permitido está comprendido entre 25 y 5000.
Una implementación local de PostgreSQL reserva algunas conexiones para que el superusuario mantenga la integridad de la base de datos. Normalmente, esta reserva es el 15 % del valor de max_connections.
Azure Database for PostgreSQL es una solución administrada que reserva automáticamente tres conexiones para supervisar un servidor flexible.
Nota
No hay ningún parámetro del servidor para administrar superuser_reserved_connections en Azure Database for PostgreSQL.
Agrupación de conexiones
Las aplicaciones cliente que suelen abrir y cerrar conexiones pueden experimentar latencia de conexión, lo que da lugar a menos transacciones por segundo y, en general, una mayor latencia de la aplicación.
Azure Database for PostgreSQL recomienda la agrupación de conexiones, en lugar de abrir y cerrar conexiones con frecuencia. La agrupación de conexiones reutiliza las conexiones existentes, en vez de cerrar y volver a crear conexiones. Este proceso reduce la latencia de conexión y permite más transacciones de base de datos por segundo para las bases de datos del servidor.
La agrupación de conexiones establece un conjunto fijo de conexiones cuando se inicia el servidor y, posteriormente, estas conexiones se mantienen. La agrupación de conexiones también ayuda a reducir la fragmentación de memoria que causa la creación constante de conexiones en el servidor.
PGBouncer
es una solución de agrupación de conexiones integrada en Azure Database for PostgreSQL. Para habilitar pgBouncer:
- En Azure Portal, vaya al servidor de Azure Database for PostgreSQL.
- En el menú izquierdo, seleccione Parámetros del servidor.
- En la barra de búsqueda, busque PgBouncer.
- Establezca el valor pgbouncer.enabled en true para habilitar PgBouncer. Esta configuración no requiere que se reinicie el servidor.
- Establezca pgbouncer.default_pool_size en el número de conexiones por par de usuario/base de datos que necesite. El valor predeterminado es 50.
- Establezca el parámetro pgBouncer.pool_mode en TRANSACTION.
Nota
PgBouncer se admite en los niveles de proceso De uso general y Optimizado para memoria en redes de acceso público y acceso privado. PgBouncer no se admite en el nivel de proceso ampliable. Cuando el nivel de proceso De uso general u Optimizado para memoria se cambia a Ampliable, se pierde la funcionalidad PGBouncer.