Analyser les interblocages InnoDB et les journaliser tous
MySQLPerformancesCommande
-- Latest deadlock: LATEST DETECTED DEADLOCK section (only the most recent is kept)
SHOW ENGINE INNODB STATUS\G
-- Total deadlock counter
SELECT NAME, COUNT FROM information_schema.INNODB_METRICS WHERE NAME = 'lock_deadlocks';
-- Write every deadlock to the error log (logged at Note level, needs verbosity 3)
SET PERSIST innodb_print_all_deadlocks = ON;
SET PERSIST log_error_verbosity = 3;Ce que fait la commande
Montre les deux transactions de l'interblocage, le verrou que chacune détient et attend (index, lock_mode, enregistrement) et celle qu'InnoDB a annulée ; le compteur suit la fréquence et le journal d'erreurs conserve les interblocages passés.
Quand l'utiliser
Quand l'application reçoit l'erreur 1213 'Deadlock found when trying to get lock' ou que les alertes d'interblocage augmentent.
Attention
LATEST DETECTED DEADLOCK ne conserve que le dernier événement et est perdu au redémarrage. Le nom d'index et le lock_mode (X, S, gap, insert intention) des lignes 'HOLDS THE LOCK(S)' / 'WAITING FOR THIS LOCK TO BE GRANTED' expliquent la cause ; 'WE ROLL BACK TRANSACTION (n)' indique la victime. Sur 1213, l'application doit rejouer toute la transaction. Correctifs durables : accéder aux lignes dans un ordre cohérent, garder les transactions courtes, utiliser le bon index pour réduire les gap locks et READ COMMITTED quand c'est approprié. log_error_verbosity=3 active aussi tous les messages Note ; surveillez la croissance du journal d'erreurs. La variable de statut Innodb_deadlocks n'existe pas dans MySQL Community ; utilisez INNODB_METRICS pour le compteur.
Voir aussi
- Trouver les requêtes les plus coûteuses (digest performance_schema)
- Ce qui s'exécute en ce moment : sessions actives, latence, verrous et transactions (sys.session)
- Diagnostiquer 'Waiting for table metadata lock' et trouver le vrai bloqueur
- Transactions longues et history list length (retard de purge)
- Capturer un slow log complet de courte durée et l'analyser avec pt-query-digest
- Déboguer un mauvais plan avec EXPLAIN ANALYZE et l'optimizer trace