Es probable que más de una vez, mirando los consumos de MySQL, hayas visto que alguna base de datos tenía una consulta (o tal vez varias a la vez) en estado «sleep» y la misma tardaba muchos segundos en completarse. Las consultas que se quedan «dormidas» suelen provocar un consumo excesivo de recursos en el servidor, lo cual obviamente puede llegar a generar problemas.
Una consulta típica de una base de datos MySQL no debe tardar más de 1 segundo en completarse. Si lo hace, es porque definitivamente hay algo, lo cual por supuesto no son buenas noticias. Aquí te mostramos algunas soluciones para las consultas SQL en estado sleep.
La solución más obvia de todas es mejorar las consultas a nivel de código. Esta tarea debe llevarla a cabo un programador por supuesto, optimizando el tiempo de consulta de la base de datos todo lo posible.
Otra posible solución es reducir los timeouts de MySQL. Hay dos variables importantes a configurar que son wait_timeout y también interactive_timeout. Esta última trabaja a nivel de consultas interactivas, mientras la primera lo hace con las no interactivas. Una buena medida es reducir ambas a unos 20 segundos.
Como tercera solución tenemos la restricción de las conexiones, de forma tal que un usuario no pueda abusar de las conexiones. Hacer esto desde la consola MySQL es muy fácil, solamente debemos correr la siguiente línea:
GRANT ALL PRIVILEGES ON nombre_de_la_bd.* TO 'nombre_de_usuario'@'localhost' WITH MAX_USER_CONNECTIONS = 25; |
Y para terminar:
flush privileges; |