Activer les slow logs MySQL

Dans la vie d'un site web en production, le temps de réponse à la base peut augmenter pour divers raisons.

Pour identifier les requêtes il existe deux méthodes.

Méthode à chaud

Connectez vous à votre base de donnée avec des droits avancé (si possible root).

Activez les slow logs

SET GLOBAL slow_query_log = 'ON';

Definissez le temps d'execution qu'une requête peut avoir avant d'être considéré comme lente

SET GLOBAL long_query_time = 5;

En remplaçant 5 par la valeur que vous souhaitez en seconde.

Choississez dans quel dossier doit être écrit ces logs

SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';

Puis testez

SELECT SLEEP(10);

Vous devriez avoir le résultat dans le fichier /var/log/mysql/mysql-slow.log.

Pour le désactivez passer la variable slow_query_log à OFF

SET GLOBAL slow_query_log = 'OFF';

Méthode à froid

Éditez le fichier /etc/mysql/my.cnf

Ajoutez les lignes ci dessous :

slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 5

slow_query_log Active les slow query slow_query_log_file Définie le chemin dans lequel MySQL va écrire ces logs long_query_time Définie le temps d'execution qu'une requête peut avoir avant d'être considéré comme lente

Relancez MySQL

systemctl restart mysql

Pour testez, connectez vous sur votre base de données puis tapez la commande suivante

SELECT SLEEP(10);

Vous devriez voir une occurence appraitre dans le fichier /var/log/mysql/mysql-slow.log

Pour désactivez ça, retirez les directives ajoputé dans /etc/mysql/my.cnf et redémarrez MySQL.