sql >> Base de Datos >  >> RDS >> Mysql

Excepción CannotAcquireLockException (Spring, Hibernate, MySQL)

Este es un punto muerto definitivo situación. Esto está más relacionado con un error de MySQL que con un problema de Hibernate con tus clases. Primero, revisemos la definición de un interbloqueo :

Consulte esta página para obtener más información:http://en.wikipedia.org/wiki/Deadlock

¿Cómo lidias con esta situación? Bueno, debe leer el siguiente artículo:Interbloqueos en InnoDB . Contiene la mayor parte de la información que necesita. Este artículo explica en detalle cómo rastrear y tratar los interbloqueos. Es una lectura obligada.

Esencialmente, deberá realizar los siguientes pasos según la información anterior:

  1. Cree un seguimiento de MySQL:realice un seguimiento de todas las consultas que se ejecutan en el servidor MySQL.
  2. Obtenga la información de rastreo de punto muerto
  3. Haga coincidir el seguimiento de interbloqueo y el seguimiento de MySQL entre sí para determinar la causa del interbloqueo.

El artículo sobre InnoDB también tiene una lista de remedios, así que no los voy a reiterar aquí. Solo tenga en cuenta los interbloqueos no es un error fatal, solo necesita manejarlo. Entonces, tal vez detecte la excepción y vuelva a intentar la transacción. También asegúrese de que sus consultas generadas por Hibernate sean óptimas en el sentido de que están usando índices donde puedan, etc. Otra cosa que podría intentar es hacer lotes la transacción en Hibernate y ejecutándose en lote .

Estoy seguro de que con los dos enlaces anteriores podrá manejar el problema y será una experiencia valiosa para usted resolverlo usted mismo. Si encuentra algún elemento en particular con el que tiene problemas, agréguelo a la pregunta y lidiemos con eso.