mardi, janvier 10 2017

MySQL : Identifier les transactions lentes ou causant un crash

Certains comportements de MySQL/MariaDB/Galera/Percona sont parfois difficiles à investiguer.

C'est le cas notamment de :

  • un crash provoqué par une certaine requête
  • des requêtes bloquées par des transactions en cours (une transaction pouvant locker des lignes/index, sans qu'aucune requête ne sois visible ni dans le full processlist, ni dans le engine innodb status pendant le blocage).

mysql_analyse_general_log permet de diagnostiquer plus facilement ce type de problème, en analysant le log general de MySQL (toute les requêtes), pour en extraire toutes les transactions, et les requêtes de chaque transaction.

Celà permet notamment de filtrer :

  • les transactions qui étaient en cours à l'heure d'un crash
  • les transactions ayant duré plus de N secondes

Et donc de diagnostiquer facilement ces deux types de problèmes.