Deadlock found when trying to get lock; try restarting transaction – MySQL 1213 / 40001

1213 / 40001

MySQL ERROR 1213 indica che due o più transazioni si sono bloccate a vicenda acquisendo lock in ordine incompatibile. InnoDB annulla una transazione per sbloccare il sistema; l'applicazione deve gestire il rollback e ritentare con cautela. La diagnosi richiede SHOW ENGINE INNODB STATUS e, per eventi frequenti, il log dei deadlock, mentre la prevenzione usa transazioni brevi e ordine coerente degli aggiornamenti.

Cosa significa questo errore?

MySQL ERROR 1213 indica che due o più transazioni si sono bloccate a vicenda acquisendo lock in ordine incompatibile. InnoDB annulla una transazione per sbloccare il sistema; l'applicazione deve gestire il rollback e ritentare con cautela. La diagnosi richiede SHOW ENGINE INNODB STATUS e, per eventi frequenti, il log dei deadlock, mentre la prevenzione usa transazioni brevi e ordine coerente degli aggiornamenti.

Messaggio originale

Deadlock found when trying to get lock; try restarting transaction

Contesto e parole chiave

Alias

  • ER_LOCK_DEADLOCK
  • SQLSTATE 40001

Messaggi alternativi

  • Deadlock found when trying to get lock

Prodotti

  • MySQL InnoDB

Piattaforme

  • Linux
  • macOS
  • Windows

Parole chiave

  • innodb deadlock
  • mysql error 1213
  • sqlstate 40001

Cause possibili

Transazioni che bloccano risorse in ordine diverso

Sessioni concorrenti aggiornano le stesse righe o tabelle seguendo sequenze opposte.

comune

Diagnosi

Ultimo deadlock InnoDB

Leggere lo stato InnoDB subito dopo l'errore e confrontare transazioni e lock coinvolti.

Come leggere il risultato. La sezione LATEST DETECTED DEADLOCK mostra le query e i lock che hanno formato il ciclo.

mysql
SHOW ENGINE INNODB STATUS\G

Risoluzione

Retry dopo rollback e ordine coerente

Difficoltà: avanzataRischio: medio

Gestire SQLSTATE 40001 con rollback, backoff limitato e ordine uniforme delle operazioni.

  1. Eseguire rollback della transazione fallita.
  2. Ritentare solo le operazioni idempotenti.
  3. Uniformare l'ordine di accesso alle risorse e ridurre la durata delle transazioni.

Domande frequenti

Il deadlock significa che il database è corrotto?

No. È un conflitto temporaneo tra transazioni; InnoDB annulla una transazione, ma l'applicazione deve gestire il rollback e il retry.

Approfondimenti

Schede correlate