Comprender el manejo de conexiones
Postgres usa un modelo de conexión basado en procesos. Establecer una conexión implica 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 estar en uno de los cuatro estados:
- activa: conexiones activas, que actualmente ejecutan consultas.
- conexiones inactivas - 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 se encuentra 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 cualquier momento mediante un parámetro de 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 y reserva automáticamente tres conexiones para supervisar un servidor flexible.
Nota
No hay ningún parámetro de 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 transacciones más bajas 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 lugar de cerrar y volver a crear conexiones. Este proceso reduce la latencia de conexión y permite mayores transacciones de base de datos por segundo para las bases de datos en el servidor.
La agrupación de conexiones establece un conjunto fijo de conexiones cuando se inicia el servidor y estas conexiones se mantienen. La agrupación de conexiones también ayuda a reducir la fragmentación de memoria causada por nuevas conexiones que se crean constantemente 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ú de la izquierda, seleccione Parámetros del servidor.
- En la barra de búsqueda, busque PgBouncer.
- Establezca el valor de pgbouncer.enabled en true para habilitar PgBouncer. Esta configuración no requiere un reinicio del 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 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.