¿Por qué se muestra el error «Demasiadas conexiones» al conectarme a mi instancia de MySQL de Amazon Aurora?

8 minutos de lectura
0

Estoy intentando conectarme a mi instancia de base de datos de MySQL de Amazon Aurora, pero se muestra el error «Demasiadas conexiones». ¿Cuál es el valor máximo de conexiones para mi instancia de base de datos y cómo puedo ajustar ese valor?

Descripción corta

Si se muestra el error «Demasiadas conexiones» cuando el cliente intenta conectarse a un clúster o instancia de base de datos de MySQL de Amazon Aurora, significa que todas las conexiones disponibles están siendo utilizadas por otros clientes. Esto se define mediante el parámetro max_connections.

Es posible que observe alguno de estos síntomas:

  • La métrica DatabaseConnections en Amazon CloudWatch es igual al valor de max_connections o se aproxima a él en la instancia de base de datos de MySQL de Aurora.
  • El valor del parámetro max_connections supera la memoria disponible proporcionada para conexiones por la clase de instancia de base de datos. Compruebe si hay algún indicio, como un valor bajo para la métrica FreeableMemory en CloudWatch.
  • Se muestra ERROR 1040(): Demasiadas conexiones en el registro de errores de MySQL.

Puede alcanzar un valor de max_connections por los siguientes motivos:

  • Aumento repentino o gradual del número de conexiones de cliente/aplicación a la instancia de base de datos. Esto se debe a las siguientes causas:
    • Aumento de la carga de trabajo que conduce a un incremento de las conexiones.
    • Un bloqueo en el nivel de tabla o de fila provoca un aumento de las conexiones entre el cliente y la aplicación.
  • El cliente o la aplicación no cierran las conexiones correctamente una vez finalizada la operación.
  • El valor de los parámetros de tiempo de espera de la conexión, como wait_timeout o interactive_timeout se ha incrementado y puede dar lugar a un aumento de las conexiones suspendidas.

Antes de solucionar el error de conexiones máximas, observe todos los subprocesos que se están ejecutando actualmente en la instancia de base de datos. A continuación, habilite el registro en su instancia de base de datos.

Visualización de los hilos en ejecución actualmente en la instancia de base de datos de MySQL de Aurora

El comando SHOW FULL PROCESSLIST muestra qué hilos están en ejecución actualmente en la instancia de BD. Inicie sesión en la instancia de base de datos y, a continuación, ejecute la siguiente consulta:

SHOW FULL PROCESSLIST\G

También puede ejecutar la siguiente consulta para obtener el mismo conjunto de resultados:

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST

Nota: Debe conceder a su cuenta de usuario el privilegio de administración para que el servidor MySQL PROCESS pueda ver todos los subprocesos que se ejecutan en una instancia de base de datos de MySQL. De lo contrario, SHOW PROCESSLIST solo mostrará los hilos asociados a la cuenta de MySQL que esté utilizando. Para obtener más información, consulte Privilegios facilitados por MySQL en la documentación de MySQL.

Nota: Las instrucciones SHOW FULL PROCESSLIST e INFORMATION_SCHEMA.PROCESSLIST pueden repercutir negativamente en el rendimiento porque requieren un mútex.

Habilitación del registro en la instancia de base de datos de MySQL de Aurora

Habilite el registro en su instancia de base de datos de MySQL de Aurora; para ello, habilite general_log, slow_query_log o los parámetros de registro de auditoría.

Solución

Solucione el error de conexiones máximas mediante uno de estos métodos:

  • Revise las conexiones existentes y, si es posible, termínelas para liberar la presión de conexión. Por ejemplo, comience por terminar las conexiones en estado de suspensión.
  • Aumente el número máximo de conexiones a la instancia de base de datos.

Terminación de conexiones existentes en su instancia de base de datos

Termine consultas o sesiones de usuario que se estén ejecutando actualmente en su instancia de base de datos mediante la ejecución de los comandos rds_kill y rds_kill_query:

CALL mysql.rds_kill(thread-ID);
CALL mysql.rds_kill_query(thread-ID);

Aumento de las conexiones máximas a su instancia de base de datos

Aumente el número máximo de conexiones a la instancia de base de datos mediante los siguientes métodos:

  • Escale la instancia a una clase de instancia de base de datos con más memoriaNota: El escalado de la clase de instancia de base de datos provoca una interrupción.
  • Defina un valor más grande para el parámetro max_connections mediante un grupo de parámetros personalizado en el nivel de instancia. El incremento del parámetro max_connections no provoca ninguna interrupción, pero si su instancia de base de datos utiliza un grupo de parámetros predeterminado, cambie el grupo de parámetros por un grupo de parámetros personalizado. Cambiar el grupo de parámetros provoca una interrupción. Para obtener más información, consulte Trabajo con grupos de parámetros de base de datos.

Nota: El número máximo de conexiones permitidas para una instancia de base de datos de MySQL de Aurora se determina con el parámetro max_connections en el grupo de parámetros en el nivel de instancia correspondiente a la instancia de base de datos. Veamos un ejemplo:

max_connections = GREATEST({log(DBInstanceClassMemory/805306368)*45},{log(DBInstanceClassMemory/8187281408)*1000})

Compruebe el valor actual del parámetro max_connections de su instancia de base de datos. Para ello, compruebe el grupo de parámetros adjunto a la instancia de base de datos o ejecute la siguiente consulta:

select @@max_connections;

El parámetro max_connections tiene las siguientes especificaciones:

  • Se puede configurar tanto en el clúster de base de datos como en el grupo de parámetros de la instancia de base de datos. Sin embargo, la configuración de parámetros en el nivel de instancia surte efecto.
  • El valor permitido es un número entero comprendido entre 1 y 16 000.
  • Es de naturaleza dinámica (no es necesario reiniciar para cambiar el valor de este parámetro).

Para obtener más información sobre el valor predeterminado de max_connections para cada clase de instancia de base de datos disponible para MySQL de Aurora, consulte Conexiones máximas a una instancia de base de datos de MySQL de Aurora.

Nota: Las instancias de base de datos de MySQL de Aurora y de MySQL de Amazon Relational Database Service (Amazon RDS) tienen distintas cantidades de sobrecarga de la memoria. El valor max_connections puede ser distinto para instancias de base de datos de MySQL de Aurora y MySQL de RDS que utilicen la misma clase de instancia. Los valores de la lista solo son aplicables a MySQL de Aurora.

Recomendaciones para ajustar el parámetro max_connections

No olvide tener en cuenta lo siguiente cuando trabaje con el parámetro max_connections para su instancia de base de datos.

  • Los límites de conexión predeterminados están ajustados para sistemas que utilizan los valores predeterminados para otros consumidores de memoria importantes, como el grupo de búferes y la caché de consultas. Si cambia esta configuración del clúster de base de datos, plantéese ajustar el límite de conexión para tener en cuenta el aumento o la disminución de la memoria disponible en las instancias de base de datos.
  • Establezca un valor de max_connections ligeramente superior al número máximo de conexiones que espera abrir en cada instancia de base de datos.
  • Si ha habilitado también performance_schema, cuidado con la configuración del parámetro max_connections. El tamaño de las estructuras de memoria del Esquema de rendimiento se ajusta automáticamente en función de las variables de configuración del servidor, como max_connections. Cuanto más alto sea el valor definido para la variable, más memoria utilizará el Esquema de rendimiento. En casos extremos, esto puede provocar problemas de falta de memoria en tipos de instancias más pequeños, como T2 y T3. Se recomienda respetar el valor predeterminado de max_connections si va a utilizar el Esquema de rendimiento. Si tiene previsto incrementar max_connections a un valor considerablemente superior al valor predeterminado, plantéese deshabilitar el Esquema de rendimiento. Nota: Si habilita Información de rendimiento para una instancia de base de datos de MySQL de Aurora, se habilitará automáticamente el Esquema de rendimiento.

También puede plantearse ajustar los siguientes parámetros de conexión de MySQL:

  • wait_timeout: número de segundos que el servidor espera a que se active una conexión de archivos TCP/IP o UNIX no interactiva antes de cerrarla.
  • interactive_timeout: número de segundos que el servidor espera a que se active una conexión interactiva antes de cerrarla.
  • net_read_timeout: número de segundos que se debe esperar para recibir más datos de una conexión TCP/IP antes de descartar la lectura.
  • net_write_timeout: número de segundos que deben transcurrir en las conexiones TCP/IP para que se escriba un bloque antes de descartar la escritura.
  • max_execution_time: tiempo de espera de ejecución de las instrucciones SELECT, en milisegundos.
  • max_connect_errors: se bloquea un host contra más conexiones si se superar este número de conexiones interrumpidas.
  • max_user_connections: cantidad máxima de conexiones simultáneas permitidas a cualquier cuenta de MySQL.

Nota: Este artículo no incluye valores recomendados ni personalizados para estos parámetros, ya que estos valores varían según el caso de uso individual.


Información relacionada

Número máximo de conexiones a una instancia de base de datos de MySQL de Aurora

¿Cómo puedo comprobar las consultas en ejecución para mi instancia de base de datos de MySQL de Amazon RDS?

Finalización de una sesión o una consulta

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 4 años