El parámetro max_user_connections define el número máximo de conexiones permitidas para una base de datos en una instancia de ApsaraDB RDS for MySQL. Cuando un intento de conexión genera alguno de los siguientes errores, significa que la base de datos alcanzó su límite de conexiones:
has more than 'max_user_connections' active connectionsUser 'xxx' has exceeded the 'max_user_connections' resource
Diagnóstico del problema
Dado que ya se alcanzó el límite de conexiones, es posible que no se puedan abrir nuevas sesiones. Si cuenta con una sesión activa en Data Management Service (DMS), utilícela para ejecutar las consultas a continuación. De lo contrario, conéctese mediante una instancia de Elastic Compute Service (ECS). Para obtener instrucciones de conexión, consulte How do I connect to an ApsaraDB RDS instance? o Use DMS to log on to an ApsaraDB RDS for MySQL instance.
Ejecute estas dos consultas para conocer el estado actual:
-- Check the current connection limit for this database user
show variables like 'max_user_connections';
-- List all active sessions and their source IP addresses (Host column)
SHOW PROCESSLIST;
SHOW PROCESSLIST enumera todas las conexiones abiertas. Para resumir las conexiones por cliente en lugar de revisar la lista completa, ejecute una consulta agregada:
SELECT user, host, count(*) as ct
FROM information_schema.processlist
WHERE user NOT IN ('aliyun_root','aurora','replicator','system user','event_scheduler')
GROUP BY user, host
ORDER BY ct DESC;
Esta consulta excluye las cuentas internas del sistema y agrupa las sesiones restantes por usuario y dirección IP de origen (columna host), de modo que el cliente con más conexiones aparece primero.
Como alternativa, use la consola de ApsaraDB RDS:
Inicie sesión en la consola de ApsaraDB RDS. En la barra de navegación superior, seleccione la región donde reside su instancia. Localice la instancia y haga clic en su ID.
En el panel de navegación izquierdo, elija Autonomy Services > Diagnostics.
En la página Diagnostics, haga clic en la pestaña Session Management para consultar todas las sesiones y sus detalles, incluidos User, Hostname, Execution Duration (s) y Status.
Para obtener un registro de auditoría detallado sobre qué cuentas y direcciones IP abrieron conexiones, utilice la función SQL Explorer and Audit (Autonomy Services > SQL Explorer and Audit). Si aún no ha habilitado esta función, hágalo primero. Para obtener más información, consulte Use the SQL Explorer and Audit feature.
La función SQL Explorer and Audit tiene una facturación independiente. Para consultar los detalles de precios, consulte Billing rules .
Resolución del problema
Elija la solución que corresponda a lo encontrado durante el diagnóstico.
Exceso de sesiones inactivas o de larga duración
Si SHOW PROCESSLIST muestra muchas sesiones en estado Sleep o sesiones con tiempos de ejecución anormalmente largos, los espacios de conexión están ocupados por subprocesos inactivos o bloqueados. Finalice las sesiones problemáticas desde la pestaña Session Management en la consola o termínelas mediante SQL. Para obtener instrucciones paso a paso, consulte Session management.
Límite de conexiones demasiado bajo
Si el recuento de sesiones activas es legítimamente alto y el valor actual de max_user_connections resulta demasiado restrictivo, aumente el límite:
Confirme que su instancia tiene memoria suficiente para admitir más conexiones. Cada conexión consume memoria y establecer este valor demasiado alto puede provocar presión de memoria en la instancia.
-
Tras confirmar que la memoria es suficiente, actualice el valor del parámetro. Para obtener instrucciones, consulte Modify the parameters that specify the maximum number of connections. Para consultar el valor actual antes de modificarlo:
En la consola de ApsaraDB RDS, vaya a la página de detalles de la instancia.
En el panel de navegación izquierdo, haga clic en Parameters.
En la pestaña Modifiable Parameters, busque
max_user_connections.
El problema persiste después de los pasos anteriores
Si el límite de conexiones sigue siendo un problema recurrente:
Investigue problemas de conexión más amplios. Consulte What do I do if the number of connections to an ApsaraDB RDS for MySQL instance reaches the upper limit?
Como solución temporal, reinicie la instancia para liberar todas las conexiones existentes. El reinicio provoca una breve interrupción. Consulte Restart an ApsaraDB RDS instance.