MySQL 1213 — Deadlock found apparaît lorsque deux transactions détiennent des verrous dont chacune attend la libération par l’autre. InnoDB détecte ce cycle, choisit une transaction comme victime et l’annule afin que le système puisse continuer.
Que signifie cette erreur ?
Des transactions se bloquent mutuellement et l’une doit être annulée.
Causes probables
Augmenter un timeout ne corrige pas un deadlock, car le problème est un cycle de verrous, pas une simple attente longue. Évitez aussi de désactiver les transactions ou d’élargir les verrous sans comprendre la concurrence. Des transactions trop longues, un ordre d’accès différent entre deux chemins de code et des index insuffisants sont des causes fréquentes.
Vérifications et résolution
Commencez par capturer le deadlock avec les informations InnoDB disponibles, puis identifiez les deux transactions, les tables, index et requêtes impliqués. Comparez l’ordre dans lequel elles verrouillent les lignes et vérifiez si un index manquant élargit inutilement le nombre de lignes parcourues. La fréquence est importante : un deadlock occasionnel n’a pas le même impact qu’une boucle permanente.
Comment valider la correction — MySQL 1213 — Deadlock found
Réduisez la durée des transactions, faites accéder les chemins concurrents aux ressources dans un ordre cohérent et améliorez les index lorsque le plan de requête verrouille trop de lignes. L’application doit également savoir retenter proprement une transaction victime. Après correction, reproduisez la charge et vérifiez que le taux de deadlocks diminue sans dégrader la cohérence des données.
FAQ — MySQL 1213 — Deadlock found
MySQL choisit-il automatiquement une transaction à annuler ?
Oui, InnoDB détecte le cycle et annule une victime pour libérer les autres transactions.
Un timeout plus long résout-il le problème ?
Non. Un deadlock est un cycle de verrous et nécessite de corriger l’ordre, la durée ou le périmètre des transactions.
L’application doit-elle gérer l’erreur 1213 ?
Oui, une logique de retry bornée est généralement nécessaire pour la transaction annulée.