5/12/12

Mejorar el tiempo de respuesta de MySQL


Muchas veces, a pesar de que el sistema operativo se encuentre con una carga de trabajo normal, MySQL puede mostrarse algo lento.
Hay muchas formas para mejorar el tiempo de respuesta del servidor MySQL, aquí nos enfocaremos en dos formas:
  • Deshabilitar la resolución de nombre
  • Modificar el tamaño de la cache
La primera opción es deshabilitar la resolución de nombres, de esta forma el servidor no pierde tiempo intentando convertir nombres de dominio a IP. El único inconveniente será que deberás usar solamente direcciones IP para definir los permisos.
Además, por una cuestión de seguridad no se recomienda usar nunca nombres de dominio o hostnames en la autenticación de MySQL.
Para deshabilitar la resolución de nombres de dominio debes correr el daemon de mysql (mysqld) con el argumento –skip-name-resolve, o bien, en el archivo de configuración /etc/my.cnf agregar la entrada skip-name-resolve.
[mysqld]…..……skip-name-resolve
Observa los resultados del siguiente sencillo benchmark:
  • Con resolución de nombres, el servidor se tarda entre dos y tres segundos en responder:
date; mysql -u root -h 192.168.1.4 ;
dateFri Jul 21 23:56:58 CEST 2006ERROR 1130 (00000):
Host ’192.168.1.3′ is not allowed to connect to this MySQL server
Fri Jul 21 23:57:00 CEST 2006
  • Sin resolución de nombres, el servidor responde instantáneamente:
date; mysql -u root -h 192.168.1.4 ;
dateFri Jul 21 23:56:37 CEST 2006ERROR 1130 (00000):
Host ’192.168.1.3′ is not allowed to connect to this MySQL server
Fri Jul 21 23:56:37 CEST 2006
La segunda recomendación es activar la cache de consultas (query chache). La cache de consultas guarda el texto de un SELECT junto al resultado que fue enviado al cliente. Si después se recibe una consulta idéntica el servidor recupera los datos de la cache en vez de ejecutar la consulta nuevamente.
Para chequear la query chache ejecuta:
mysql> SHOW STATUS LIKE ‘Qcache%’;
Para ver el estado de la misma:
mysql> SHOW VARIABLES LIKE ‘%query_cache%’;
Para cambiar el tamaño de la misma:
mysql> SET GLOBAL query_cache_size = 52428800;
Para mantener la configuración de la misma, hay que modificar el archivo /etc/my.cnf:
[mysqld]query_cache_size = 52428800query_cache_type = 1