| MySQL lento, demora al conectar |
|
|
Hace un tiempo tuve un problema con MySQL
Un programa que yo hice (que trabaja con una base de datos MySQL), algunas veces demoraba entre 2 y 30 segundos en completar las consultas a la base de datos... después de hacer cambios en el equipo servidor, programa, red, equipos cliente el problema continuaba; incluso había días en que la demora se producía pocas veces y era muy corta y otros días era muy frecuente. Ni se imaginan la vergüenza que me daba al ver que mi programa "se quedaba pegado". mysql> show processlist; ¡¡¡Eso es lo primero que debería haber hecho!!!. Cuando se producía la demora, se podía ver en la lista de procesos, una o varias líneas que como usuario ponía: "unauthenticated user"... esa fue la palabra mágica que me ayudo a encontrar el problema y la solución.
Cuando un usuario se conecta, MySQL además de comprobar el nombre de usuario y la contraseña también comprueba el host, osea, resuelve a través del servicio DNS (ya sea local o remoto) la IP y/o dominio desde donde se realiza la conexión... es aquí donde se produce el problema: si el servicio DNS no responde con la rapidez necesaria (algo muy común) se retrasa el login y todo lo demás (consulta, ejecución o lo que sea que se quiera hacer en el servidor).
Para evitar este problema (la "incompetencia" del servicio DNS) simplemente le decimos a MySQL que NO intente resolver IP y/o dominio, para esto agregamos "skip-name-resolve" al archivo de configuración de MySQL (/etc/mysql/my.cnf) o lanzamos el servicio mysqld con la opción --skip-name-resolve.
Es importante mencionar que solo se podrán usar IPs como host de usuarios.
Ahí por fin pude demostrarle al cliente que mis programas y un servidor Linux con MySQL son una maravilla jajaja...
Aquí hay mas información sobre como "tunear" MySQL: How To: Optimize MySQL response time 10 tips para Optimizar consultas MySQL |