Cómo activar el slow query log de MySQL

GuíasBases de datosLinuxMySQLProgramacionSistemasSQL

Vamos a ver cómo puedes activar el slow query log de MySQL. Una vez activado podrás ver con facilidad las consultas más lentas de cualquier base de datos, algo que podría llevarte bastante tiempo si realizas las comprobaciones manualmente.

Cómo activar el slow query log

Vamos a ver cómo activar el slow query log, pero una vez hayas hecho las comprobaciones pertinentes, es recomendable que desactives el log de nuevo para no sufrir el impacto en el rendimiento de MySQL.

Lo primero que debes hacer es abrir la terminal de comandos o, si vas a activar el log en un servidor remoto, conéctate mediante SSH.

Existen varios métodos mediante los cuales puedes activar el slow query log:

Método A: Utiliza MySQL

Para activar el log de slow query mediante la aplicación mysql, sigue estos pasos:

  1. Conéctate a MySQL, reemplazando usuario por tu nombre de usuario e introduciendo la contraseña cuando se te pida:
    mysql -u usuario -p
  2. Par activar el slow query log, ejecuta esta sentencia:
    SET GLOBAL slow_query_log = 'ON';

    Además de activar el log, también es posible que quieras configurar algunas opciones.

  3. OPCIONAL: El slow query log almacenará por defecto aquellas consultas que tarden más de 10 segundos en ejecutarse. Sin embargo, puedes cambiar este intervalo estableciendo el tiempo máximo de ejecución con el siguiente comando, reemplazando TIEMPO por el tiempo en segundos que quieras establecer:
    SET GLOBAL long_query_time = TIEMPO;
  4. OPCIONAL: Los resultados del log se almacenan por defecto en el archivo /var/lib/mysql/hostname-slow.log, pero puedes cambiar la ruta y el nombre del archivo con el siguiente comando, reemplazando ruta por la ruta absoluta hasta el archivo y archivo por el nombre que quieres que tenga el archivo de log:
    SET GLOBAL slow_query_log_file = '/ruta/archivo';
  5. Una vez hechos los cambios anteriores, sal de la aplicación mysql.

Método B: Edita el archivo my.cnf

También puedes activar el log editando directamente el archivo de configuración de MySQL. Para hacerlo, sigue estos pasos:

  1. Edita el archivo my.cnf con tu editor de textos preferido. En este ejemplo utilizaremos el editor nano. Dependiendo de tu distribución de Linux, el archivo puede estar localizado en diferentes directorios:
    • Si tu distribución es Ubuntu o Debian el archivo estará en el directorio /etc/mysql:
    • Si tu distribución es Fedora o CentOS el archivo estará en el directorio /etc.

    Sitúate en el directorio adecuado y abre el archivo:

    nano my.cnf
  2. Dentro del archivo my.cnf, busca la sección [mysqld] y agrega la siguiente línea en caso de que no esté presente:
    log_slow_queries 1

    Si la línea ya está presenta, asegúrate de su valor sea 1. Vamos a configurar también otras opciones:

  3. OPCIONAL: Si no indicamos un valor, el slow query log almacenará solamente las consultas que tarden más de 10 segundos en ejecutarse. Puedes establecer este tiempo agregando la siguiente línea, reemplazando TIEMPO por el tiempo en segundos que quieras establecer:
    long_query_time = TIEMPO
  4. OPCIONAL: También puedes configurar la ubicación del log agregando la siguiente línea, reemplazando ruta por la ruta absoluta del archivo y archivo por el nombre que quieras darle:
    slow_query_log_file = /ruta/archivo
  5. Cierra el editor guardando los cambios. Si usas nano, pulsa CTRL + X y confirma los cambios con y.
  6. Reinicia MySQL con uno de estos comandos para que se apliquen los cambios:
    • En Ubuntu o Debian:
      service mysql restart
    • En Fedora o CentOS:
      service mysqld restart

Verifica que el slow query log está activado

Para verificar que has activado el log y que funciona correctamente, ejecuta el siguiente comando, reemplazando TIEMPO por un valor superior al tiempo que has establecido en la opción long_query_time:

SELECT SLEEP(TIEMPO);

Esta consulta debería aparecer en el log, así que ábrelo y compruébalo.

Desactiva el slow query log

Una vez hayas realizado todos los cambios, es importante que lo desactives. Puedes hacerlo mediante uno de estos dos métodos:

Método A: Utiliza MySQL

Para desactivar el log mediante mysql, conéctate a MySQL y ejecuta este comando:

SET GLOBAL slow_query_log = 'OFF';

 

Método B: Edita el archivo my.cnf

Al igual que antes, también puedes activar el log editando el archivo my.cnf. Para ello, abre el archivo y elimina la siguiente línea o establece el valor de log_slow_queries como 0:

log_slow_queries 0

Cierra el editor guardando los cambios. Si usas nano, pulsa CTRL + X y confirma los cambios con y.

Reinicia MySQL con uno de estos comandos para que se apliquen los cambios:

  • En Ubuntu o Debian:
    service mysql restart
  • En Fedora o CentOS:
    service mysqld restart