4 votes

journal des requêtes lentes tuées avant la fin

Apparemment, un de mes collègues a tué un serveur web qui bloquait MySQL (en bloquant d'autres requêtes), plutôt que de tuer la requête spécifique, et il a pris grand soin d'oublier tous les détails de la requête qui bloquait le reste. J'aimerais pouvoir dire que c'est la première fois que cela se produit, mais c'est environ tous les 2 à 4 mois (intervalles irréguliers malheureusement, pas d'info là-dessus), et j'aimerais beaucoup pouvoir enregistrer les requêtes qui prennent beaucoup de temps, qu'elles soient terminées ou non.

Maintenant, pour les requêtes réussies, nous avons le journal des requêtes lentes qui fonctionne parfaitement, mais il ne se retrouve là qu'à la fin, et non pas s'il est tué pendant la requête. Existe-t-il une solution intégrée pour enregistrer les requêtes pendant qu'elles sont en cours d'exécution ? Pour l'instant, j'ai recours à l'exécution d'un daemon/script qui interroge le système toutes les 10 secondes :

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST 
WHERE TIME > 30 
AND USER != 'replication'
AND USER != 'system user'
AND USER != 'DELAYED'
AND COMMAND != 'Sleep'
AND ID != CONNECTION_ID();

... mais ça fait un peu pirate, et je me demande s'il n'y a pas une possibilité intégrée que j'ai négligée ?

2voto

Alex Points 7759

Essayez pt-query-digest --processlist h=host1 --print --no-report comme décrit ici . Je n'ai jamais essayé de faire un condensé sur un serveur en direct et je l'ai seulement utilisé pour traiter un journal lent existant mais cela semble être l'outil dont vous avez besoin. Vous devrez installer Percona Toolkit.

0 votes

Hm, "pt-query-digest parcourt et analyse les fichiers journaux MySQL. Sans FILE, ou lorsque FILE est -, il lit l'entrée standard." Je n'ai PAS de fichier journal, donc cela ne semble pas fonctionner.

1 votes

Une citation de pt-query-digest manuel : Watch SHOW FULL PROCESSLIST and output a log in slow query log format: pt-query-digest --processlist h=host1 --print --no-report

0 votes

Je viens d'essayer pt-query-digest --processlist sur l'un de mes hôtes de production, il n'a pas besoin d'un fichier journal pour fonctionner, il surveille le serveur en direct et enregistre les requêtes de l'utilisateur. SHOW FULL PROCESSLIST à la place. Il imprime les requêtes sur la sortie standard, donc si vous le redirigez vers un fichier, vous obtiendrez une sorte de journal lent.

1voto

asdmin Points 1990

Bien que cela implique l'utilisation d'un deuxième logiciel (du même fournisseur cependant), vous devriez envisager de mettre un Proxy MySQL devant votre serveur, et en utilisant les capacités très étendues de celui-ci pour enregistrer les heures de début et de fin des requêtes, même si elles sont annulées par le serveur.

1 votes

Faites attention lorsque vous utilisez MySQL Proxy. Il est terriblement lent.

0 votes

Hm, cela semble intéressant en effet, mais la performance est la clé ici. Je vais faire quelques tests et voir ce que ça donne.

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