Mysql
 sql >> Base de données >  >> RDS >> Mysql

CannotAcquireLockException (Spring, Hibernate, MySQL)

C'est une impasse définitive situation. Ceci est plus lié à une erreur MySQL qu'à un problème d'hibernation avec vos classes. Examinons d'abord la définition d'un impasse :

Consultez cette page pour plus d'informations :http://en.wikipedia.org/wiki/Deadlock

Comment gérez-vous cette situation. Eh bien, vous devez lire l'article suivant :Interblocages dans InnoDB . Il contient la plupart des informations dont vous avez besoin. Cet article explique en détail comment tracer et traiter les blocages, c'est une lecture incontournable.

Vous devrez essentiellement suivre les étapes suivantes en fonction des informations ci-dessus :

  1. Créer une trace MySQL :tracez toutes les requêtes en cours d'exécution sur le serveur MySQL.
  2. Obtenir les informations de suivi des interblocages
  3. Mettez en correspondance la trace de blocage et la trace MySQL pour déterminer la cause du blocage.

L'article sur InnoDB contient également une liste de remèdes, je ne vais donc pas les répéter ici. Gardez simplement à l'esprit les impasses n'est pas une erreur fatale, il vous suffit de la gérer. Alors peut-être attraper l'exception et réessayer la transaction. Assurez-vous également que vos requêtes générées par Hibernate sont optimales dans le sens où elles utilisent des index où ils peuvent etc. Une autre chose que vous pourriez essayer est de regrouper la transaction sur Hibernate et s'exécutant en batch .

Je suis sûr qu'avec les deux liens ci-dessus, vous serez en mesure de gérer le problème et ce sera une expérience précieuse pour vous de résoudre ce problème vous-même. Si vous trouvez un élément particulier avec lequel vous avez des problèmes, ajoutez-le à la question et traitons-le.