Este tema describe las causas de un alto recuento de hilos activos en una instancia de ApsaraDB RDS for MySQL y proporciona soluciones.
Contexto
El número de hilos activos (también conocidos como conexiones activas) es una métrica clave para medir la carga de trabajo de una instancia de MySQL. En una instancia con buen funcionamiento, este valor suele ser inferior a 10. Para instancias de altas especificaciones y QPS elevado, puede alcanzar 20 o 30. Si el recuento llega a varios cientos o incluso miles, indica que las consultas SQL se están acumulando y los tiempos de respuesta aumentan. En casos graves, la instancia deja de responder y ya no procesa solicitudes SQL.
Comprobación de hilos activos
La consola de ApsaraDB RDS ofrece varios métodos para consultar el número de hilos activos:
-
Monitoring and Alerts
En la página Monitoring and Alerts de la consola, haga clic en la pestaña Standard Monitoring y luego en Standard View para consultar las métricas de hilos activos de la instancia.
-
Database Autonomy Service (DAS)
En la página de la consola, haga clic en la pestaña Dashboard para consultar el estado de conexión de las sesiones. Un número excesivo de hilos indica que las sesiones de la instancia están bloqueadas.
Acumulación de SQL lento
-
Síntoma
Si el monitoreo muestra un aumento en los hilos activos, ejecute primero el comando
show processlist;para comprobar si existen consultas SQL lentas. Una gran cantidad de consultas que analizan demasiadas filas suele provocar el incremento de hilos activos.Consulte la información sobre SQL lento en la página de la consola.
-
Solución
Use la función SQL throttling o finalice las sesiones para reducir el impacto de las consultas SQL lentas.
Problemas con la caché de tablas
-
Síntoma
Si la caché de tablas es insuficiente, muchas instrucciones SQL permanecen en el estado
Opening table. Esto ocurre comúnmente cuando el QPS es alto o cuando existe una gran cantidad de tablas. -
Solución
Aumente el valor del parámetro table_open_cache (no requiere reiniciar la instancia) y del parámetro table_open_cache_instances (requiere reiniciar la instancia).
Problemas con bloqueos de metadatos (MDL)
-
Síntoma
Cuando ocurre un bloqueo de metadatos (MDL), muchas consultas SQL entran en el estado
Waiting for table metadata lock. Durante las fasesprepareycommit, una instrucción DDL debe adquirir un MDL. Si la tabla tiene transacciones sin confirmar o consultas SQL lentas, la operación DDL se bloquea. Esto, a su vez, bloquea otras consultas SQL y finalmente aumenta el número de hilos activos. -
Solución
Para resolver este problema, finalice las transacciones sin confirmar, las consultas SQL lentas o la instrucción DDL en ejecución.
Conflictos de bloqueos de fila
-
Síntoma
Los conflictos de bloqueos de fila se manifiestan con un aumento en las métricas innodb_row_lock_waits e innodb_row_lock_time.
En la página de la consola, haga clic en la pestaña Dashboard para consultar los elementos de monitoreo en row lock.
-
Solución
Ejecute el comando
show engine innodb status;para comprobar si un gran número de sesiones se encuentra en el estadoLock wait. De ser así, la contención de bloqueos de fila es grave. Para reducirla, optimice las actualizaciones de puntos críticos, disminuya el tamaño de las transacciones y confirme las transacciones de inmediato.