Lock wait timeout exceeded; try restarting transaction – MySQL 1205

1205

MySQL ERROR 1205 compare quando una transazione resta in attesa di un lock oltre innodb_lock_wait_timeout. A differenza del deadlock, il ciclo di attesa non viene necessariamente rilevato: una transazione lunga, una transazione dimenticata aperta o un aggiornamento senza indice può mantenere il blocco. Bisogna identificare il blocco e chiudere o correggere la transazione responsabile prima di aumentare il timeout.

Cosa significa questo errore?

MySQL ERROR 1205 compare quando una transazione resta in attesa di un lock oltre innodb_lock_wait_timeout. A differenza del deadlock, il ciclo di attesa non viene necessariamente rilevato: una transazione lunga, una transazione dimenticata aperta o un aggiornamento senza indice può mantenere il blocco. Bisogna identificare il blocco e chiudere o correggere la transazione responsabile prima di aumentare il timeout.

Messaggio originale

Lock wait timeout exceeded; try restarting transaction

Contesto e parole chiave

Alias

  • ER_LOCK_WAIT_TIMEOUT

Messaggi alternativi

  • Lock wait timeout exceeded

Prodotti

  • MySQL InnoDB

Piattaforme

  • Linux
  • macOS
  • Windows

Parole chiave

  • innodb lock
  • lock wait timeout
  • mysql error 1205

Cause possibili

Transazione concorrente aperta troppo a lungo

Una sessione mantiene un lock mentre attende input, rete o un'elaborazione non necessaria.

comune

Diagnosi

Sessioni e transazioni attive

Elencare processlist e stato InnoDB per individuare il thread che blocca.

Come leggere il risultato. Il confronto tra thread in attesa e transazione attiva individua la sorgente del lock.

mysql
SHOW FULL PROCESSLIST;\nSHOW ENGINE INNODB STATUS\G

Risoluzione

Riduzione della durata della transazione

Difficoltà: avanzataRischio: medioRichiede amministratore

Chiudere rapidamente la transazione e correggere l'operazione che trattiene il lock.

  1. Identificare la sessione responsabile.
  2. Valutare rollback o commit secondo il caso applicativo.
  3. Correggere l'ordine e la durata delle operazioni.

Terminare una sessione può annullare il lavoro non committato.

Domande frequenti

Aumentare innodb_lock_wait_timeout risolve il problema?

Può solo spostare il sintomo. Prima bisogna trovare la transazione che mantiene il lock e ridurne durata o ambito.

Approfondimenti

Schede correlate