Transazioni
Lock wait timeout exceeded; try restarting transaction – MySQL 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 transactionContesto 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.
comuneDiagnosi
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.
SHOW FULL PROCESSLIST;\nSHOW ENGINE INNODB STATUS\GRisoluzione
Riduzione della durata della transazione
Chiudere rapidamente la transazione e correggere l'operazione che trattiene il lock.
- Identificare la sessione responsabile.
- Valutare rollback o commit secondo il caso applicativo.
- 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
- Deadlocks in InnoDB - MySQL Reference Manual manuale_ufficiale