Mysql
 sql >> Database >  >> RDS >> Mysql

CannotAcquireLockException (primavera, ibernazione, MySQL)

Questo è un preciso stallo situazione. Questo è più correlato a un errore MySQL che a un problema di ibernazione con le tue classi. Per prima cosa esaminiamo la definizione di stallo :

Vedere questa pagina per ulteriori informazioni:http://en.wikipedia.org/wiki/Deadlock

Come affronti questa situazione. Bene, devi leggere il seguente articolo:Deadlocks in InnoDB . Contiene la maggior parte delle informazioni di cui hai bisogno. Questo articolo spiega in dettaglio come tracciare e gestire i deadlock, è assolutamente da leggere.

In sostanza, dovrai eseguire i seguenti passaggi in base alle informazioni di cui sopra:

  1. Crea una traccia MySQL:traccia tutte le query eseguite sul server MySQL.
  2. Ottieni le informazioni sulla traccia del deadlock
  3. Abbina la traccia dead lock e la traccia MySQL tra loro per determinare la causa del deadlock.

L'articolo su InnoDB ha anche un elenco di rimedi, quindi non li ripeterò qui. Tieni solo a mente punti di stallo non è un errore fatale, devi solo gestirlo. Quindi forse prendi l'eccezione e riprova la transazione. Assicurati inoltre che le query generate da Hibernate siano ottimali, nel senso che utilizzano indici dove possono ecc. Un'altra cosa che potresti provare è batching la transazione su Hibernate e l'esecuzione in batch .

Sono sicuro che con i due link sopra sarai in grado di gestire il problema e sarà un'esperienza preziosa per te risolverlo da solo. Se trovi qualche oggetto in particolare con cui hai problemi aggiungilo alla domanda e affrontiamolo.