web-dev-qa-db-fra.com

Afficher les derniers blocages innodb

Je vois que je peux afficher le dernier blocage dans mysql/innodb, mais existe-t-il un moyen de visualiser les blocages passés? Nous avons deux problèmes d'impasse, l'un étant important et l'autre non. L'impasse moins importante se produit plusieurs fois par jour et devient ainsi la "dernière" impasse.

12
gwgeller

Il y a un paramètre qui a été introduit dans MySQL 5.5.30: innodb_print_all_deadlocks

Lorsque cette option est activée, les informations sur tous les blocages dans les transactions utilisateur InnoDB sont enregistrées dans le journal des erreurs mysqld. Sinon, vous voyez uniquement des informations sur le dernier blocage, à l'aide de la commande SHOW ENGINE INNODB STATUS. Un blocage occasionnel d'InnoDB n'est pas nécessairement un problème, car InnoDB détecte immédiatement la condition et annule automatiquement l'une des transactions. Vous pouvez utiliser cette option pour résoudre les problèmes de blocage si une application ne dispose pas d'une logique de gestion des erreurs appropriée pour détecter la restauration et réessayer son fonctionnement. Un grand nombre de blocages peut indiquer la nécessité de restructurer les transactions qui émettent des instructions DML ou SELECT ... FOR UPDATE pour plusieurs tables, afin que chaque transaction accède aux tables dans le même ordre, évitant ainsi la condition de blocage.

Ajoutez simplement ce paramètre à my.cnf

[mysqld]
innodb_print_all_deadlocks = 1

ou

[mysqld]
innodb_print_all_deadlocks = on

Vous n'avez pas besoin de redémarrer mysql. Connectez-vous simplement à mysql et exécutez

mysql> SET GLOBAL innodb_print_all_deadlocks = 1;

or

mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';

Ce paramètre est nouveau pour moi aussi.

Essayez-le et dites-nous tout ce que vous pensez !!!

15
RolandoMySQLDBA