Siempre nos preocupa el rendimiento de nuestras aplicaciones web y siempre llegamos a esta pregunta ¿Cómo detectar consultas lentas en Mysql? La respuesta nunca es sencilla, se pueden realizar varias técnicas tanto del lado del servidor como del lado de la web para detectar cual de las muchas consultas SQL es la que ocasiona la lentitud en el sistema. Ahora bien comencemos a atacar las consultas lentas.
3 Pasos para detectar consultas lentas en Mysql
1. En un principio debemos tratar de capturar las consultas lentas, esto se logra cambiando la configuración de nuestro servidor de base de datos MySQL para que guarde en un archivo log las consultas lentas.
2. Instalar un monitor de querys en vivo en nuestro servidor llamado Mytop, con esta herramienta podemos ver cada query que se esté ejecutando en nuestro servidor Mysql, seguramente los más lentos se quedarán más tiempo en pantalla que los rápidos.
3. Cambios en nuestras consultas SQL para mejorar la velocidad de respuesta.
Modificar en My.conf el parámetro slow-query-log
Con esta modificación podemos cumplir con el primer paso
Ubicamos nuestro archivo my.conf
nano -w /etc/mysql/my.cnf
Y colocamos la siguiente configuración
slow-query-log = 1 slow-query-log-file = /var/log/mysql/mysql-slow.log long_query_time = 1 log-queries-not-using-indexes
Reiniciamos nuestro servicio de Mysql
service mysql restart
Ahora podemos ver nuestros log de querys lentos con el siguiente comando
tail -f /var/log/mysql/mysql-slow.log
Instalar Mytop en Centos / Debian / Ubuntu
Ahora procedemos con la instalación de nuestra herramienta Mytop que nos permitirá ver cuales son los querys que se ejecutan en vivo en nuestro servidor Mysql.
Instalación para Centos
yum install mytop
Instalación para Ubuntu y Debian
apt-get install mytop
Ejecutar Mytop, nos solicitará nuestra clave de root de Mysql
mytop --prompt
Optimizar consultas SQL en General
1. Utiliza Limit en cada consulta, este parámetro es muy importante ya que no deja que una consulta traiga todos los registros de una tabla.
2. Disminuye la utilización del select * es mejor para las consultas traer sólo los campos necesarios, con esto ganas memoria del lado de php o de tu backend.
3. Es mejor realizar 100 selects pequeños que 1 súper select, esta técnica la utilizan todos los frameworks conocidos. Ya que cada query pequeño dura menos de 2 milisegundos y es mejor para cachear.
4. Utilizar Join hace mucho más ordenado el select a la hora de programar las condiciones.
5. La falla más común es no crear índices en nuestras tablas más consultadas. Muy importante crear índices para cuando se hacen condiciones múltiples sobre la misma tabla.
Esperamos sus comentarios en este interesante tema.