Hoy la web vuelve a estar atascada y se encuentra un gran número de personas dormidas
Causas del sueño:
1 El programa cliente no llamó a mysql_close() antes de salir.
2 El cliente había estado dormido más de wait_timeout o interactive_timeout segundos sin emitir ninguna solicitud al servidor.
3 El programa cliente terminó abruptamente en medio de una transferencia de datos
Si el número de procesos de suspensión en el mismo periodo es demasiado alto y el número total de conexiones en otros estados supera el valor de max_connection, entonces MySQL ya no puede procesar ninguna solicitud excepto el usuario raíz, no puede establecer conexión con ninguna petición o se queda colgado directamente
Solución:
1. Primero, comprueba si tu programa utiliza el método pconnect y, segundo, si el mysql_close() se llama a tiempo antes de ejecutar la página. Intenta no usar el método pconnect, es decir, usa mysql_connect. Cuando se ejecuta el programa, el mysql_close debe invocarse explícitamente
2. Añade wait_timeout y interactive_timeout a my.cnf, pon el valor más pequeño, por defecto el valor de wait_timeout es 8 horas, puedes cambiarlo a 1 hora o media hora. De esta manera, mysql matará las conexiones muertas más rápido. Evitar que el número total de conexiones supere el valor de max_connection.
wait_timeout demasiado grande hará que se liberen un gran número de procesos SLEEP en MySQL con el tiempo, lo que ralentiza el rendimiento del sistema, pero si la configuración es demasiado pequeña, puedes encontrarte con problemas como "MySQL ha desaparecido"
Pon el valor de max_connection en un valor más alto, pero obviamente esto no es apropiado; cuantas más conexiones tengas, más estrés supone en tu servidor. De hecho, esas conexiones son redundantes, y eliminarlas cuanto antes es la mejor política.
3. Analizar la consulta SQL del sistema paso a paso, encontrar el SQL que es demasiado lento y optimizarlo
1)interactive_timeout: Significado del parámetro: El número de segundos que el servidor espera una actividad antes de apagar la conexión interactiva. Un cliente interactivo se define como un cliente que utiliza CLIENT_INTERACTIVE opción en mysql_real_connect(). Parámetro por defecto: 28800 segundos (8 horas)
(2)wait_timeout: Significado del parámetro: El número de segundos que el servidor espera la actividad antes de cerrar la conexión no interactiva. Cuando el hilo inicia, el valor de wait_timeout sesión se inicializa en función del valor global de wait_timeout o global de interactive_timeout, dependiendo del tipo de cliente (definido CLIENT_INTERACTIVE las opciones de conexión de mysql_real_connect()). Parámetro por defecto: 28800 segundos (8 horas)
Existe un límite superior al número máximo de conexiones que MySQL Server puede soportar, ya que cada conexión se establece y consume memoria, por lo que esperamos que los clientes se desconecten y liberen la memoria ocupada tras conectarse a MySQL Server para gestionar la operación correspondiente. Si tu MySQL Server tiene un gran número de conexiones inactivas, no solo consumirán memoria en vano, sino que si las conexiones siguen acumulándose y abriéndose, eventualmente alcanzarán el número máximo de conexiones en MySQL Server, lo que reportará el error de 'demasiadas conexiones'. La fijación de valores del wait_timeout debe evaluarse según el funcionamiento del sistema. Después de que el sistema haya estado funcionando durante un tiempo, puedes comprobar el estado de la conexión del sistema actual mediante el comando mostrar la lista de procesos; si encuentras un gran número de procesos conectados en estado de suspensión, significa que el ajuste de parámetros es demasiado grande y puedes hacer ajustes apropiados para hacer ajustes más pequeños.
Comando SQL:
Este método de modificación está enTras reiniciar el servicio mysql, será inválido, por lo que lo mejor es configurar estas dos propiedades en el archivo de configuración mysql.
Modifica el archivo my.cnf en Linux:
|