Guide

Comment diagnostiquer MySQL 1213 Deadlock

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.

⌚ Environ 3 min de lecture
Voir mes favoris
Base de données Intermédiaire 15-30 min

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.

Avant de commencer : adaptez toujours les commandes et manipulations à votre environnement. Sur un système de production, prévoyez une sauvegarde ou un retour arrière lorsque l’action peut modifier la configuration.

Étapes à suivre

  1. 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. 2

    Recouper le contexte technique

    SHOW ENGINE INNODB STATUS contient le dernier deadlock avec transactions, index et verrous concernés.

  3. 3

    Preuve InnoDB

    Capturer le deadlock avant qu’un incident suivant ne remplace le dernier rapport.

  4. 4

    Écarter les erreurs de diagnostic

    Augmenter lock_wait_timeout ne corrige pas un cycle de deadlock.

  5. 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.
Complément technique

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.

♡ 0