Skip to content

MySql: Slow queries, controlling optimize queries

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ónno admitidosantes de declarar una consulta comolentao 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 ‘\hfor help. Type ‘\cto 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 ‘\hfor help. Type ‘\cto 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 [file], donde x es el tiempo mínimo de la consulta. Example:

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

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

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

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

 

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