Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

CannotAcquireLockException (Spring, Hibernate, MySQL)


Este é um impasse definitivo situação. Isso está mais relacionado a um erro do MySQL do que a um problema do Hibernate com suas classes. Primeiro vamos rever a definição de um deadlock :

Consulte esta página para obter mais informações:http://en.wikipedia.org/wiki/Deadlock

Como você lida com essa situação. Bem, você precisa ler o seguinte artigo:Deadlocks in InnoDB . Ele contém a maioria das informações que você precisa. Este artigo explica em detalhes como rastrear e lidar com impasses é uma leitura obrigatória.

Essencialmente, você precisará executar as seguintes etapas com base nas informações acima:
  1. Crie um MySQL Trace:rastreie todas as consultas que estão sendo executadas no servidor MySQL.
  2. Obtenha as informações de rastreamento de impasse
  3. Faça a correspondência entre o rastreamento de dead lock e o rastreamento do MySQL para determinar a causa do dead lock.

O artigo sobre o InnoDB também tem uma lista de remédios, então não vou reiterá-los aqui. Lembre-se de impasses não é um erro fatal, você só precisa lidar com isso. Então, talvez pegue a exceção e tente novamente a transação. Certifique-se também de que suas consultas geradas pelo Hibernate sejam ótimas no sentido de que estão usando índices onde eles podem etc. Outra coisa que você pode tentar é agrupar a transação no Hibernate e executando em lote .

Tenho certeza de que com os dois links acima você será capaz de lidar com o problema e será uma experiência valiosa para você trabalhar com isso sozinho. Se você encontrar algum item específico com o qual tenha problemas, adicione-o à pergunta e vamos lidar com isso.