Saltar al contenido

MySql: Slow queries, controlando las consultas a optimizar

En MySQL existe un parámetro que habilita el registro de las consultas que tardan mas de x segundos en ejecutarse, las llamadas Slow Queries. Básicamente lo que hace es meterlas en un fichero de log  para luego consultarlo con mysqldumpslow. Este mecanismo nos puede ser útil para mejorar el rendimiento global de la base de datos si reducimos  el valor de forma progresiva para los tiempos de ejecución «no admitidos» antes de declarar una consulta como «lenta» o slow query.

Para activarlo debemos:

  1. Comprobar que no este ya activo desde el cliente mysql
    # mysql -u root -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 77
    Server version: 5.0.32-Debian_7etch11-log Debian etch distributionType ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
    mysql> show variables like ‘%slow%’;
    +————————-+———–+
    | Variable_name    | Value   |
    +————————-+———–+
    | log_slow_queries | OFF    |
    | slow_launch_time |           |
    +————————-+———–+
    2 rows in set (0.00 sec)
  2. Modificar el fichero de configuración my.cnf (normalmente en /etc/mysql/my.cnf), descomentando los siguientes parámetros.[mysqld]
    log-slow-queries=/var/log/mysql-slow-queries.log
    long_query_time = 1
    log-queries-not-using-indexes
  3. Creamos el fichero de log y reiniciamos el servidor.#touch /var/log/mysql-slow-queries.log
    #chown mysql.root /var/log/mysql-slow-queries.log
    #/etc/init.d/mysql stop
    #/etc/init.d/mysql start
  4. Comprobamos que el cambio se haya realizado correctamente:# mysql -u root -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 77
    Server version: 5.0.32-Debian_7etch11-log Debian etch distribution
    Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
    mysql> show variables like ‘%slow%’;
    +————————-+———–+
    | Variable_name    | Value    |
    +————————-+———–+
    | log_slow_queries | ON       |
    | slow_launch_time|          1 |
    +————————-+———–+
    2 rows in set (0.00 sec)

Para consultarlo podemos usar mysqldumpslow -t x [fichero], donde x es el tiempo mínimo de la consulta. Ejemplo:

# mysqldumpslow  /var/log/mysql/mysql-slow.log

Reading mysql slow query log from /var/log/mysql/mysql-slow.log

Count: 1  Time=9.00s (9s)  Lock=0.00s (0s)  Rows=459887.0 (459887), root[root]@localhost  select * from table1

Usando esta herramienta también detectaremos las “malas artes” de algunos cuando construyen sus consultas…  o también podemos completar nuestro checklist diario y anexarlo.

 

FUENTE: http://www.dataprix.com/blogs/il-masacratore/mysql-slow-querys-controlando-las-consultas-optimizar