sql >> Database >  >> RDS >> Mysql

CannotAcquireLockException (Spring, Hibernate, MySQL)

Dit is een duidelijke impasse situatie. Dit heeft meer te maken met een MySQL-fout dan met een Hibernate-probleem met je klassen. Laten we eerst eens kijken naar de definitie van een deadlock :

Zie deze pagina voor meer informatie:http://en.wikipedia.org/wiki/Deadlock

Hoe ga je om met deze situatie. Welnu, je moet het volgende artikel lezen:Deadlocks in InnoDB . Het bevat de meeste informatie die je nodig hebt. Dit artikel legt in detail uit hoe u impasses kunt opsporen en aanpakken. Het is een must om te lezen.

In wezen moet u de volgende stappen uitvoeren op basis van de bovenstaande informatie:

  1. Maak een MySQL-tracering:traceer alle query's die op de MySQL-server worden uitgevoerd.
  2. Verkrijg de impasse traceerinformatie
  3. Overeenkomen met de dead lock-tracering en MySQL-tracering met elkaar om de oorzaak van de deadlock te bepalen.

Het artikel over InnoDB's heeft ook een lijst met remedies, dus ik ga ze hier niet herhalen. Houd rekening met impasses is geen fatale fout, je moet er gewoon mee omgaan. Dus misschien vang je de uitzondering en probeer je de transactie opnieuw. Zorg er ook voor dat uw zoekopdrachten die worden gegenereerd door Hibernate optimaal zijn in die zin dat ze indexen gebruiken waar ze kunnen etc. Een ander ding dat je zou kunnen proberen is batchen de transactie op Hibernate en uitvoeren in batch .

Ik ben er zeker van dat je met de twee bovenstaande links in staat zult zijn om het probleem aan te pakken en het zal waardevolle ervaring voor je zijn om dit zelf te verwerken. Als je een bepaald item vindt waar je problemen mee hebt, voeg het dan toe aan de vraag en laten we dat afhandelen.



  1. SQL Server-index opnieuw opbouwen en reorganiseren

  2. Uitzondering in JPA bij gebruik van seed-bestand voor PostgreSQL

  3. Verbinding maken met de PostgreSQL-database via SSH-tunneling in Python

  4. Een overzicht van PostgreSQL-querycaching en taakverdeling