¿Tu página web empieza a ir lenta? Una de las causas pueden ser las consultas lentas. Te enseño como activarlas y su posterior análisis.
¿Qué es el Slow Query Log?
El Slow Query log
es un fichero de log de linux que almacena todas aquellas consultas lentas que superen un límite de tiempo establecido por la variable de sistema long_query_time
Para filtrar y depurar aún más estas consultas lentas, podemos usar la variable de sistema min_examined_row_limit
indicando el número mínimo de filas que debería devolver para ser considerada lenta.
Activación de Slow Queries
Por defecto las slow querys están desactivadas. Para activarlas buscaremos y editaremos el fichero my.cnf
.
- En Debian/Ubuntu está localizado en /etc/mysql/
- En Centos/RHEL está localizado en /etc/
Debemos establecer la variable de sistema slow_query_log
a 1 en la sección [mysqld] del fichero my.cnf
1 2 3 4 5 |
[mysqld] slow_query_log = 1 log-slow-queries = /var/log/mysql-slow.log long_query_time = 2 min_examined_row_limit = 100 |
La variable de sistema long_query_time
establece el tiempo en segundos para que una consulta sea considerada lenta. Por lo que podemos incluir un valor entre 0 y 10 segundos incluyendo también microsegundos si fuera necesario.
Hay que tener en cuenta que todas aquellas Querys que sean administrativas no serán guardadas. En caso de necesitar incluirlas tendremos que usar las variables de sistema log_slow_admin_statements y log_queries_not_using_indexes.
La variable de sistema log-slow-queries
nos permite indicar la localización donde se guardarán las consultas. En caso de que necesitar un fichero de log personalizado lo crearemos y le asignaremos permisos de usuario y grupo mysql.
1 2 |
# touch /var/log/mysql-slow.log # chown mysql:mysql /var/log/mysql-slow.log |
Para finalizar reinicamos el servicio MySQL
1 |
# service mysql restart |
Monitorización y Análisis
Para analizar las consultas lentas en tiempo real podemos ejecutar desde shell.
1 |
# tail -f /var/log/mysql-slow.log |
Para analizar el fichero también podemos usar el comando mysqldumpslow
que permite visualizar un resumen de las consultas
1 |
# mysqldumpslow -a /var/log/mysql-slow.log |
Para chequear más opciones del comando mysqldumpslow haz clic aquí.