Si su aplicación crea muchas conexiones de corta duración o genera una alta rotación de conexiones, habilitar el pool de conexiones (PgBouncer) reduce la carga del servidor de base de datos y mejora el tiempo de respuesta. PgBouncer se sitúa entre su aplicación y ApsaraDB RDS for PostgreSQL, y reutiliza las conexiones de backend entre múltiples conexiones de cliente para evitar que la base de datos las abra y cierre repetidamente.
Cuándo usar el pool de conexiones
No todas las cargas de trabajo se benefician de PgBouncer. Utilice esta tabla para decidir si debe usar una conexión mediante pool o directa.
|
Escenario |
Tipo de conexión |
Razón |
|
Funciones serverless o de borde |
Mediante pool |
Cada invocación crea una nueva conexión |
|
Aplicaciones web con muchas solicitudes simultáneas |
Mediante pool |
Reduce la sobrecarga de conexión por solicitud |
|
Alta rotación de conexiones por frameworks ORM |
Mediante pool |
Reutiliza las conexiones de backend |
|
Migraciones de esquema |
Directa |
Las herramientas de migración pueden usar instrucciones |
|
Consultas analíticas de larga duración |
Directa |
Evita la contención en el pool |
|
|
Directa |
Usa instrucciones |
|
Replicación lógica |
Directa |
Requiere una sesión persistente |
|
Sentencias preparadas (en modo transacción) |
Directa |
No compatible con el pool de transacciones |
Requisitos previos
Antes de empezar, asegúrese de que su instancia de ApsaraDB RDS for PostgreSQL cumpla con todos los siguientes requisitos:
Versión principal del motor: PostgreSQL 11 o posterior
Serie del producto: Basic Edition o High-availability Edition
Método de facturación: subscription o pay-as-you-go
Versión menor del motor: 20240830 o posterior, sin el sufijo
babelfish
Para consultar o actualizar la versión menor del motor, consulte Actualizar la versión menor del motor de una instancia de ApsaraDB RDS for PostgreSQL.
Facturación
Esta función es gratuita.
Cómo funciona
PgBouncer actúa como middleware entre su aplicación y la base de datos. Los clientes se conectan a PgBouncer en el puerto 6432 (predeterminado). PgBouncer mantiene un pool de conexiones de backend hacia PostgreSQL en el puerto 5432 (predeterminado) y las asigna a los clientes según el modo de pool configurado.
Cuando PgBouncer está habilitado:
Se asigna un nuevo puerto de PgBouncer (predeterminado: 6432). Sus conexiones existentes a través del puerto original de la base de datos (5432) no se ven afectadas.
El sistema instala los complementos
pgbouncer_fdwydblinken la base de datospostgrespara admitir las métricas del pool de conexiones. Estos complementos no se pueden desinstalar.
Habilitar o deshabilitar el pool de conexiones
Vaya a la página Instances. En la barra de navegación superior, seleccione la región donde reside su instancia de RDS. Busque la instancia y haga clic en su ID.
En el panel de navegación izquierdo, haga clic en Database Connection.
Haga clic en Enable PgBouncer o Disable PgBouncer.
En el cuadro de diálogo que aparece, haga clic en OK.
Una vez habilitado PgBouncer, el puerto de PgBouncer (predeterminado: 6432) aparece en la página Database Connection. Para cambiar el puerto, haga clic en Modify Endpoint, seleccione un tipo de endpoint y actualice el campo PgBouncer Port.
Después de deshabilitar PgBouncer, las aplicaciones que aún estén configuradas para usar el puerto 6432 no podrán conectarse. Cámbielas al puerto original de la base de datos (predeterminado: 5432) antes de deshabilitarlo.
Conectarse a través del pool de conexiones
Después de habilitar PgBouncer, actualice el puerto de conexión de su aplicación de 5432 a 6432. Todos los demás parámetros de conexión (endpoint, nombre de usuario y contraseña) permanecen sin cambios.
Antes (conexión directa):
postgresql://<username>:<password>@<endpoint>:5432/<database>
Después (conexión mediante pool):
postgresql://<username>:<password>@<endpoint>:6432/<database>
Para obtener más información, consulte Conectarse a una instancia de ApsaraDB RDS for PostgreSQL.
Configurar los parámetros del pool de conexiones
Después de habilitar PgBouncer, utilice la función Parameter Settings para ajustar el comportamiento del pool de conexiones.
Parameter Settings muestra los parámetros de PgBouncer solo después de habilitar PgBouncer. Si desea aplicar una
para modificar parámetros en lote, habilite primero PgBouncer y luego aplique la plantilla.
La plantilla de parámetros predeterminada es PostgreSQL_PgBouncer_Default Parameter Template (rpg-sys-pgsql-pgbouncer).
Modo de pool
El parámetro pgbouncer.pool_mode controla cuándo devuelve PgBouncer una conexión de backend al pool.
|
Modo |
Predeterminado |
Cómo funciona |
Cuándo usarlo |
|
|
Sí |
Devuelve la conexión después de cada transacción |
La mayoría de las aplicaciones. Proporciona la mayor reutilización de conexiones. |
|
|
No |
Devuelve la conexión cuando el cliente se desconecta |
Aplicaciones que usan funciones a nivel de sesión ( |
|
|
No |
Devuelve la conexión después de cada sentencia. Solo para cargas de trabajo con autocommit. No admite transacciones que abarquen múltiples sentencias. |
Cargas de trabajo exclusivas de autocommit |
Límites de conexión
Los siguientes parámetros controlan cuántas conexiones acepta y reenvía PgBouncer a la base de datos. max_client_conn y default_pool_size operan en capas diferentes: max_client_conn limita las conexiones entrantes de clientes, mientras que default_pool_size limita las conexiones salientes de backend. Muchos clientes pueden compartir un pool más pequeño de conexiones de backend; esa es la ventaja principal del pool de conexiones.
|
Parámetro |
Tipo |
Predeterminado |
Qué controla |
|
|
int |
100 |
Número máximo de conexiones de cliente que acepta PgBouncer |
|
|
int |
20 |
Número predeterminado de conexiones permitidas en el pool de conexiones |
|
|
int |
0 |
Número mínimo de conexiones de cliente permitidas por el pool de conexiones |
Otros parámetros
|
Parámetro |
Tipo |
Predeterminado |
Descripción |
|
|
int |
120 |
Tiempo máximo en segundos que una consulta espera en la cola. Al alcanzar el tiempo de espera, se desconecta al cliente. Establezca este valor en |
|
|
string |
|
Lista separada por comas de parámetros de inicio que ignora PgBouncer. De forma predeterminada, PgBouncer solo procesa parámetros básicos ( |
|
|
string |
|
Lista separada por comas de usuarios autorizados para conectarse a la base de datos virtual de PgBouncer y ejecutar consultas de solo lectura. |
Para consultar la referencia completa de parámetros, visite la documentación oficial de PgBouncer.
Consultar métricas del pool de conexiones
Utilice Enhanced Monitoring para monitorear la actividad del pool de conexiones. Las métricas están disponibles solo después de habilitar PgBouncer.
|
Métrica |
Descripción |
|
|
Conexiones activas de clientes |
|
|
Conexiones de clientes en espera de una conexión de backend |
|
|
Conexiones activas de backend |
|
|
Conexiones inactivas de backend |
|
|
Total de conexiones en el pool |
|
|
Número de pools de conexiones |
Límites
El tiempo máximo de inactividad para una conexión en el pool es de 10 minutos. Las conexiones inactivas que superan esta duración se cierran automáticamente. Este valor no se puede modificar.
Cuando el cifrado SSL está habilitado en la instancia, PgBouncer también habilita SSL. PgBouncer no admite la autenticación de conexiones con la Access Control List (ACL) establecida en
verify-caoverify-full, y no es compatible con client certificate revocation files.
Referencia de API
Llame a la operación ModifyDBInstanceConfig para habilitar o deshabilitar PgBouncer mediante programación.
|
Parámetro |
Descripción |
Ejemplo |
|
|
El ID de la instancia de RDS for PostgreSQL |
|
|
|
El nombre del elemento de configuración |
|
|
|
|
|