Ce guide montre comment diagnostiquer MySQL 1213 Deadlock à partir de vérifications ciblées et d’une validation explicite, sans multiplier les changements inutiles. InnoDB détecte un cycle de verrous et choisit une transaction victime à rollback pour permettre aux autres de continuer.
Étapes à suivre
-
1
Identifier les critères déterminants
InnoDB détecte un cycle de verrous et choisit une transaction victime à rollback pour permettre aux autres de continuer.
-
2
Recouper le contexte technique
SHOW ENGINE INNODB STATUS contient le dernier deadlock avec transactions, index et verrous concernés.
-
3
Preuve InnoDB
Capturer le deadlock avant qu’un incident suivant ne remplace le dernier rapport.
-
4
Écarter les erreurs de diagnostic
Augmenter lock_wait_timeout ne corrige pas un cycle de deadlock.
-
5
Valider le résultat
Le scénario concurrent est rejoué et le taux de deadlock retombe à un niveau acceptable. L’ordre des opérations/index réduit les verrous et les transactions restent courtes.
Commandes utiles
SHOW ENGINE INNODB STATUS;
SHOW ENGINE INNODB STATUS\G
SET GLOBAL innodb_print_all_deadlocks = ON;
À retenir
- Réduire durée des transactions et garder un ordre d’accès cohérent aux lignes/tables limite les deadlocks.
- Un retry applicatif est utile mais ne doit pas remplacer l’analyse d’un deadlock fréquent.
- L’ordre des opérations/index réduit les verrous et les transactions restent courtes.
MySQL 1213 : un deadlock est un cycle de verrous, pas une simple lenteur
Repères techniques
- InnoDB détecte un cycle de verrous et choisit une transaction victime à rollback pour permettre aux autres de continuer.
- SHOW ENGINE INNODB STATUS contient le dernier deadlock avec transactions, index et verrous concernés.
- Réduire durée des transactions et garder un ordre d’accès cohérent aux lignes/tables limite les deadlocks.
Preuve InnoDB
Capturer le deadlock avant qu’un incident suivant ne remplace le dernier rapport.
SHOW ENGINE INNODB STATUS\G
SET GLOBAL innodb_print_all_deadlocks = ON;Pièges spécifiques
- Augmenter lock_wait_timeout ne corrige pas un cycle de deadlock.
- Un retry applicatif est utile mais ne doit pas remplacer l’analyse d’un deadlock fréquent.
Comment valider
- Le scénario concurrent est rejoué et le taux de deadlock retombe à un niveau acceptable.
- L’ordre des opérations/index réduit les verrous et les transactions restent courtes.
Preuves et vérifications
InnoDB détecte un cycle de verrous et choisit une transaction victime à rollback pour permettre aux autres de continuer. SHOW ENGINE INNODB STATUS contient le dernier deadlock avec transactions, index et verrous concernés.
Contrôle de résultat
Le scénario concurrent est rejoué et le taux de deadlock retombe à un niveau acceptable. L’ordre des opérations/index réduit les verrous et les transactions restent courtes.
Point d’attention
Augmenter lock_wait_timeout ne corrige pas un cycle de deadlock. Réduire durée des transactions et garder un ordre d’accès cohérent aux lignes/tables limite les deadlocks.
Concepts liés
Référence primaire : MySQL Reference Manual — InnoDB deadlocks.