MySql: Slow queries, controlant les consultes a optimitzar

 

En MySQL esisteix un paràmetre que habilita el registre de les consultes que triguen més de x segons a executar-se, les anomenades Slow Queries. Bàsicament el que fa és ficar-les en un fitxer de log per després consultar-ho amb mysqldumpslow. Aquest mecanisme ens pot ser útil per millorar el rendiment global de la base de dades si reduïm el valor de forma progressiva per als temps d'execució "no admesos" abans de declarar una consulta com "lenta" o slow query.

Per activar-ho farem:

  1. Comprovar que no estigui ja actiu des del client 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 distribution

    Type '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 fitxer de configuració my.cnf (normalment a / etc / mysql / my.cnf), tragueu els següents paràmetres.

    [mysqld]
    log-slow-queries=/var/log/mysql-slow-queries.log
    long_query_time = 1
    log-queries-not-using-indexes
     

  3. Creem el fitxer de log i reiniciem 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. Comprovem que el canvi s'ha realitzat correctament:

    # 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)

Per consultar podem usar mysqldumpslow-tx [fitxer], on x és el temps mínim de la consulta. Exemple:

# 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

Usant aquesta eina també detectarem les "males arts" d'alguns quan construeixen les seves consultes ... o també podem completar el nostre checklist diari  iannex. Més informació aquí sobre slow querys.