6 votes

Le journal des requêtes lentes de MySQL est activé mais ne consigne rien.

En cours d'exécution :
Ubuntu Server 10.04
Mysql 5.1.41

J'ai ce qui suit dans /etc/mysql/my.cnf

slow_query_log = 1
slow_query_log_file = /var/log/mysqld/log-slow-queries.log
long_query_time = 1

le fichier journal doit être accessible en écriture

drwxrwxrwx  2 mysql mysql    4096 2010-10-20 13:41 mysqld
-rwxrwxrwx  1 mysql mysql    0    2010-10-20 13:41 log-slow-queries.log

Rien n'apparaît dans le journal ou dans la table mysql.slow_log. On dirait que c'est activé

mysql> show variables like '%SLOW%';
+---------------------+--------------------------------------+
| Variable_name       | Value                                |
+---------------------+--------------------------------------+
| log_slow_queries    | ON                                   |
| slow_launch_time    | 2                                    |
| slow_query_log      | ON                                   |
| slow_query_log_file | /var/log/mysqld/log-slow-queries.log |
+---------------------+--------------------------------------+
4 lignes dans l'ensemble (0,00 sec)

Cela signifie-t-il que je n'ai pas de requêtes lentes ? J'ai essayé d'exécuter select sleep(3); mais cela n'apparaît pas.

Existe-t-il une requête que je peux exécuter qui apparaîtra dans le journal si tout est configuré correctement ?

5voto

tiagojco Points 161

J'ai eu le même problème. Je l'ai résolu après avoir lu ceci: https://stackoverflow.com/a/11861305/686304

Pour activer l'enregistrement des requêtes lentes, vous devez d'abord activer le journal général.

Il suffit de définir 'general_log' sur 'ON' (dans le fichier my.cnf)

general_log = 1

3voto

TravisPUK Points 405

Le journal des requêtes lentes se compose de toutes les instructions SQL qui ont pris plus de secondes à s'exécuter et (à partir de MySQL 5.1.21) nécessitaient au moins lignes à examiner.

http://dev.mysql.com/doc/refman/5.1/fr/slow-query-log.html

Quel est votre paramètre min_examined_row_limit défini à ?

3voto

Ian Gregory Points 252

Il est possible que mysql enregistre dans une table. Essayez d'exécuter

select * from mysql.slow_log;

1voto

Amy Anuszewski Points 1228

La façon la plus simple de créer une requête longue est d'utiliser une jointure cartésienne sur suffisamment de tables pour créer un grand désordre. Créez une table de test (ou localisez-en une existante) contenant environ 50 entrées. Ensuite, exécutez

SELECT t4.* FROM testtable t1, testtable t2, testtable t3, testtable t4, testtable t5 limit 312499999,1;

ce qui prendra un certain temps, puis affichera un enregistrement de la table de test et un message du type "1 ligne dans l'ensemble (1 min 31,45 sec)". La limite/décalage est pour forcer le serveur à calculer les premières 312499999 lignes mais à ne vous montrer qu'une seule ligne plutôt que les 312500000 lignes (50^5) car cela prendrait probablement quelques jours pour afficher autant de lignes de données.

Si vous n'avez pas exactement 50 lignes, réglez le décalage sur count(*)^(nombre de jointures)-1. Ne faites pas cela sur un serveur qui est activement utilisé (ou optez pour un nombre inférieur de lignes pour que cela se termine en quelques secondes plutôt que de ralentir le serveur pendant une minute et demie)

0voto

Krof Drakula Points 5065

@David, il enregistre en temps réel, mais il n'inclut pas le temps nécessaire pour obtenir des verrous de table.

Comme l'a souligné @Bryan, la requête doit examiner un certain nombre de lignes pour être enregistrée. Je suppose que c'est pourquoi sleep(3) n'a pas été enregistrée.

La configuration semble correcte. Avez-vous fait un "ls" du bon fichier ? J'ai vu que vous avez un "mysqld" dans le même répertoire que "/var/log/mysqld/log-slow-queries.log". Au fait, le fichier journal ne doit pas avoir des autorisations "777" :)

Je suis intéressé de voir comment le problème sera résolu.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X