Todos los productos
Search
Centro de documentos

ApsaraDB RDS:¿Qué hacer si el número de conexiones a una instancia de ApsaraDB RDS for MySQL alcanza el límite máximo?

Última actualización: Sep 03, 2026

Cuando el número de conexiones a una instancia de RDS for MySQL alcanza su máximo, todos los clientes —incluido Data Management (DMS) y otras herramientas— reciben el error ERROR 1040 (HY000): Too many connections. Este tema describe cómo diagnosticar la causa raíz y resolver el problema.

Diagnosticar el problema

Ejecute las siguientes consultas para comprobar el estado actual de las conexiones:

-- Check the configured maximum connections
SELECT @@max_connections;

-- Check the number of currently connected clients
SHOW STATUS WHERE `variable_name` = 'Threads_connected';

Si Threads_connected es igual o cercano a max_connections, las conexiones están agotadas.

Para identificar si el problema se debe a conexiones inactivas o activas, vaya a la página de Monitoring and Alerts en la consola de ApsaraDB RDS y revise la métrica de Session. Consulte el valor de mysql.active_session para ver cuántas sesiones están activas en comparación con las inactivas.

Resolver problemas causados por demasiadas conexiones inactivas

MySQL utiliza un hilo por cada conexión. Incluso las conexiones inactivas mantienen un hilo dedicado en el proceso de MySQL, lo que consume memoria y aumenta la sobrecarga por cambio de contexto. Una gran cantidad de conexiones inactivas puede agotar el límite de conexiones sin que exista ninguna carga de trabajo activa.

Las causas comunes de un exceso de conexiones inactivas incluyen:

  • Aplicaciones con conexiones persistentes sin pool de conexiones: Por ejemplo, una aplicación Java que usa conexiones persistentes pero no tiene configurado un pool de conexiones. Si se especifica un número inicial alto de conexiones al iniciar, la aplicación abre muchas conexiones inactivas hacia la instancia de RDS de inmediato.

  • Aplicaciones con conexiones de corta duración que no cierran las conexiones: Por ejemplo, una aplicación PHP que usa conexiones efímeras pero no las cierra explícitamente después de completar las consultas.

Paso 1: Finalizar las sesiones inactivas de inmediato

Finalice las sesiones inactivas mediante uno de los siguientes métodos:

  • Consola de ApsaraDB RDS: Vaya a la página de Session y utilice la gestión de sesiones para finalizar las sesiones inactivas.

  • DMS: Utilice la función de gestión de sesiones en DMS para identificar y finalizar las sesiones inactivas.

  • CLI de MySQL: Ejecute kill <session_id> para finalizar una sesión específica.

Paso 2: Reducir el tiempo de espera de conexiones inactivas

La instancia de RDS finaliza automáticamente las conexiones inactivas después de un período de tiempo de espera configurado:

Parámetro

Valor predeterminado

Descripción

wait_timeout

86,400 segundos (24 horas)

Tiempo de espera para conexiones en modo no interactivo

interactive_timeout

7,200 segundos (2 horas)

Tiempo de espera para conexiones en modo interactivo

Los valores predeterminados son altos. Reducirlos hace que la instancia libere antes las conexiones inactivas. Para cambiar estos parámetros, vaya a la página de Parameters en la consola de ApsaraDB RDS.

Los cambios en wait_timeout y interactive_timeout solo se aplican a las nuevas conexiones establecidas después del cambio. Las conexiones existentes conservan sus valores originales de tiempo de espera.

En la mayoría de los casos, las aplicaciones se conectan a las instancias de RDS en modo no interactivo. Si desea determinar el modo de conexión que utiliza su aplicación, revise su configuración de conexión. Para aplicaciones PHP, especifique la constante MYSQL_CLIENT_INTERACTIVE en la función mysql_connect() para habilitar el modo interactivo.

Paso 3: Corregir fugas de conexiones en la aplicación

Las conexiones inactivas suelen acumularse porque la aplicación no cierra explícitamente las conexiones después de completar las consultas. Por ejemplo, las aplicaciones PHP que usan conexiones de corta duración a veces omiten el paso de cierre de conexión, lo que deja las conexiones abiertas hasta que expiran.

Revise el código de su aplicación para asegurarse de que las conexiones se cierren explícitamente después de cada consulta u operación.

Resolver problemas causados por demasiadas conexiones activas

Una gran cantidad de conexiones activas suele indicar un cuello de botella en el rendimiento que provoca que las consultas se acumulen en la cola. Las causas comunes incluyen:

  • Alto uso de CPU

  • Consultas lentas

  • Esperas de bloqueo de InnoDB o esperas de bloqueo de metadatos

  • Alto uso de IOPS

Identifique el cuello de botella subyacente y abórdelo directamente:

Prevenir problemas de límite de conexiones

Usar un pool de conexiones (recomendado)

Un pool de conexiones gestiona un conjunto fijo de conexiones persistentes compartidas entre su aplicación, en lugar de abrir una nueva conexión por cada solicitud. Esta es la solución a largo plazo más eficaz para prevenir el agotamiento de conexiones, y es especialmente importante para aplicaciones que abren y cierran grandes cantidades de conexiones de corta duración, como funciones serverless o aplicaciones PHP.

Al configurar el tamaño máximo del pool, establézcalo en un valor menor al límite de conexiones de la instancia. Reserve como mínimo 10 conexiones para DMS y otras operaciones de gestión.

Por ejemplo, si su instancia admite 500 conexiones, establezca el máximo del pool de conexiones en 490.

Habilitar la detección y reutilización de conexiones

Habilite la detección de conexiones en su pool de conexiones para eliminar automáticamente las conexiones obsoletas. Habilite la función de reutilización para que el pool aproveche las conexiones existentes en lugar de abrir nuevas innecesariamente.

Escalar el tipo de instancia

Si la demanda de conexiones supera constantemente el límite actual, actualice a un tipo de instancia mayor que admita más conexiones.

Temas relacionados