¿Cómo puedo aumentar el número máximo de conexiones de mi instancia de Amazon RDS para MySQL o Amazon RDS para PostgreSQL?

6 minutos de lectura
0

Quiero aumentar el número máximo de conexiones para mi instancia de base de datos de Amazon Relational Database Service (Amazon RDS) para MySQL o Amazon RDS para PostgreSQL.

Solución

Nota: Antes de aumentar la cantidad máxima de conexiones, se recomienda optimizar las configuraciones existentes.

Comprobación del valor actual de max_connections

La métrica max_connections establece el número máximo de conexiones a bases de datos de RDS para MySQL y RDS para PostgreSQL. El valor predeterminado de max_connections depende de la clase de instancia que utilice la instancia de Amazon RDS. Una clase de instancia de base de datos con más memoria disponible puede tener un mayor número de conexiones a bases de datos.

Para comprobar el valor de max_connections, conéctate a la instancia de base de datos de Amazon RDS de tu motor de base de datos y usa el siguiente comando.

  • RDS para MySQL:

    SHOW GLOBAL VARIABLES LIKE 'max_connections';
  • RDS para PostgreSQL:

    postgres=> show max_connections;

Nota: El número predeterminado de max_connections que calculas con una fórmula puede variar ligeramente del resultado de los comandos anteriores. Esta variación se debe a que Amazon RDS reserva parte de la memoria total de DBInstanceClassMemory para las operaciones subyacentes del sistema operativo. Los comandos anteriores utilizan solo la memoria reservada para el motor PostgreSQL y no para el sistema operativo host subyacente.

Optimización de las conexiones actuales

Antes de aumentar el valor de max_connections, comprueba si puedes reducir el número de conexiones existentes. Cuando el número de conexiones al cliente supera el valor de max_connections, obtendrás uno de los siguientes errores:

Estos errores pueden producirse cuando Amazon RDS tiene una mayor carga de trabajo o sufre un bloqueo en una tabla o fila. Si la carga de trabajo de tu instancia funciona según lo esperado, debes aumentar el parámetro max_connections.

Comprueba que hayas cerrado todas las conexiones al cliente y a la aplicación una vez finalizada una operación

Cuando la conexión a un servidor no se cierra, la aplicación cliente abre una nueva conexión. Con el tiempo, estas nuevas conexiones al servidor pueden hacer que la instancia supere el valor de max_connections.

Para ver una lista de todas las conexiones de la instancia de base de datos de RDS para MySQL, usa el siguiente comando:

SHOW FULL PROCESSLIST;

Para ver las conexiones de cada base de datos de tu instancia de RDS para PostgreSQL, usa el siguiente comando:

SELECT datname, numbackends FROM pg_stat_database;

(Solo MySQL) Comprueba si hay conexiones inactivas

Las conexiones abiertas inactivas o inactivas se producen cuando se establecen valores más altos para los parámetros de tiempo de espera de la conexión, como wait_timeout o interactive_timeout. Si configuras una cuota de conexión alta, es posible que el uso de la memoria sea elevado aunque no utilices esas conexiones.

Para ver las conexiones inactivas en una instancia de RDS para MySQL, usa la siguiente consulta:

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND='Sleep';

Para terminar una conexión inactiva en una instancia de base de datos de RDS para MySQL, usa el siguiente comando:

CALL mysql.rds_kill(example-pid);

(Solo PostgreSQL) Comprueba si hay conexiones inactivas

Para ver las conexiones inactivas en una instancia de RDS para PostgreSQL, usa la siguiente consulta:

    SELECT * FROM pg_stat_activity WHERE pid <> pg_backend_pid()
    AND state in ('idle', 'idle in transaction', 'idle in transaction (aborted)', 'disabled')
    AND state_change < current_timestamp - INTERVAL '15' MINUTE;

El resultado de la consulta muestra los procesos de backend que están inactivos, inactivos en la transacción, inactivos en la transacción (anulados) o deshabilitados durante más de 15 minutos.

Para terminar una conexión inactiva en una instancia de RDS para PostgreSQL, usa el siguiente comando:

SELECT pg_terminate_backend(example-pid);

Nota: Se recomienda configurar solo las conexiones activas que necesitas para que la aplicación funcione correctamente. Si la estructura de la aplicación requiere conexiones inactivas, se recomienda utilizar Amazon RDS Proxy.

Aumento del número máximo de conexiones

Nota: Cuando escales verticalmente una instancia, experimentes tiempos de inactividad y cambies tu facturación.

Para aumentar el número máximo de conexiones, se recomienda escalar verticalmente la instancia de base de datos a una clase de instancia de base de datos con más memoria. No se recomienda aumentar el parámetro max_connections más allá del valor predeterminado. La instancia puede tener problemas cuando hay más conexiones que requieren un mayor uso de memoria. Las instancias con poca memoria pueden fallar. Si aumentas el valor de max_connections, supervisa la métrica FreeableMemory de Amazon CloudWatch para supervisar el uso de los recursos.

Sin embargo, si tus instancias tienen mucha memoria libre, cambia manualmente el parámetro max_connections. Antes de ajustar el valor de max_connections, ajusta el límite de conexiones en el grupo de parámetros para reflejar los cambios en la memoria disponible en las instancias de base de datos.

Si tu instancia de base de datos usa un grupo de parámetros predeterminado, debes crear y usar un grupo de parámetros personalizado para modificar el valor de max_connections. Asocia el grupo de parámetros de base de datos personalizado a tu instancia de Amazon RDS y, a continuación, reinicia la instancia. Cuando el nuevo grupo de parámetros personalizado esté asociado a tu instancia de base de datos, puedes modificar el valor del parámetro max_connections. Para obtener más información, consulta ¿Cómo modifico los valores de un grupo de parámetros de base de datos de Amazon RDS? Establece un valor de max_connections ligeramente superior al número máximo de conexiones que esperas abrir en cada instancia de base de datos.

Nota: Durante el reinicio, se produce una breve interrupción.

Prácticas recomendadas de RDS para MySQL para aumentar el valor de max_connections

Si has activado Performance Schema, se recomienda utilizar la configuración predeterminada de max_connections. El tamaño de las estructuras de memoria de Performance Schema se ajusta automáticamente en función de las variables de configuración del servidor.

Nota: Si activas Información de rendimiento para una instancia de base de datos de Amazon RDS para MySQL, Performance Schema se activa automáticamente.

En tu caso de uso, optimiza la configuración del tiempo de espera de los siguientes parámetros relacionados con la conexión a MySQL:

  • wait_timeout
  • interactive_timeout
  • net_read_timeout
  • net_write_timeout
  • max_execution_time
  • max_connect_errors
  • max_user_connections

Para obtener más información sobre estos parámetros, consulta 7.1.8 Server system variables en el sitio web de MySQL.

Prácticas recomendadas de RDS para PostgreSQL para aumentar el valor de max_connections

En tu caso de uso, optimiza la configuración del tiempo de espera de los siguientes parámetros relacionados con la conexión a PostgreSQL:

  • idle_in_transaction_session_timeout
  • tcp_keepalives_idle
  • tcp_keepalives_interval
  • tcp_keepalives_count

Para obtener más información sobre estos parámetros, consulta idle_in_transaction_session_timeout (integer) y 19.3.2 TCP settings en el sitio web de PostgreSQL.