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:
- 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 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)
- 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
- 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
- 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.