In breve: MySQL Error 1213 Deadlock: Errore 1213 indica un ciclo di attese tra transazioni. InnoDB annulla una transazione; l’applicazione deve poter ritentare e le query devono acquisire lock in ordine coerente.
MySQL Error 1213 Deadlock: che cosa significa
Errore 1213 indica un ciclo di attese tra transazioni.
Procedura dettagliata
L’ errore MySQL 1213 “Deadlock found when trying to get lock” indica un ciclo di attesa: due o più transazioni possiedono lock necessari alle altre e nessuna può proseguire. InnoDB rileva il deadlock, sceglie una transazione vittima e la annulla per liberare i lock.
I deadlock non significano necessariamente che il database sia danneggiato. In sistemi concorrenti possono verificarsi, ma l’applicazione deve ridurne la probabilità e saper ripetere in sicurezza l’intera transazione annullata.
Un caso tipico si verifica quando la transazione A aggiorna prima la riga 1 e poi la riga 2, mentre la transazione B aggiorna prima la riga 2 e poi la riga 1. Ciascuna attende un lock posseduto dall’altra.
La differenza rispetto all’errore 1205 è che nel 1213 esiste un ciclo; nel 1205 una richiesta ha semplicemente atteso oltre il limite.
La sezione LATEST DETECTED DEADLOCK riporta transazioni, query e lock coinvolti. Su un server amministrato è possibile abilitare temporaneamente la registrazione di tutti i deadlock:
Questa impostazione aumenta i messaggi nel log: usala per un periodo controllato e disattivala dopo la raccolta.
Guide Xlogic correlate
- MySQL Error 1205: Lock wait timeout exceeded
- MySQL Error 1406: Data too long for column
- MySQL Error 1114: The table is full