Comment éviter le délai d'attente de verrouillage dépassé exception.
java.sql.SQLException: Lock wait timeout exceeded; try restarting tra
nsaction at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2648)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.ja
va:2077)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:
2228)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:
208)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1812)
at org.hibernate.loader.Loader.doQuery(Loader.java:697)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Lo
ader.java:259)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1885)
... 131 more
Je suis répété de verrouillage de délai d'attente dépassé exception alors que j'ai mis à jour les enregistrements.
Je suis à l'aide de Java Struts 2.1 Hibernate.
DB Utilisé est MYSQL.
Ce que quelqu'un sait comment le résoudre..??
source d'informationauteur Dileep
Vous devez vous connecter pour publier un commentaire.
Voici quelques suggestions:
Assurez-vous que la base de données des tableaux sont en utilisant le moteur de stockage MyISAM et de LECTURE validée niveau d'isolation de transaction.
Vous pouvez le vérifier en
SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
sur console mysql.Si elle n'est pas définie en LECTURE COMMIS alors vous devez le configurer. Assurez-vous avant que vous avez SUPER privilèges dans mysql.
Vous pouvez prendre l'aide de http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html.
Par la définition de cette, je pense que votre problème va être résolu.
Merci.
Il pourrait être causé par la mauvaise utilisation de l'annotation suivante, comme cette StackOverflow article:
(Respectueusement ignorant DB réponses spécifiques)
Lors de l'utilisation d'un officiel CRUD schéma avec toutes les DB trafic canalisé par une classe Singleton, vous pouvez encore rencontrer fil de verrouillage. Cela se produit souvent due à une méprise entre vous, un collège, et l'équipe d'Hibernate. Par conséquent, il est plus rapide à l'examen de votre propre code pour les bugs -- en accordant une attention particulière à hibernate de base de règles.
Normalement un CRUD interface a public 'Créer', 'Lire', 'mise à Jour' et 'Supprimer' méthodes qui partagent les mêmes privé méthodes. Ceci est fait pour SEC meilleures pratiques. Cependant, en agissant de la sorte, ces méthodes fonctionnent sans problème la plupart du temps, mais pas tout le temps.
Donc, comment tester et résoudre fil de verrouillage?
Assurer:
session.save(myObj)
actions vérifiez d'abord sur la pharmacocinétique de l'unicitéTous
uniqueResult()
requêtes en effet de retour 1 le résultat, Et;(Important!) L'accent cas de Test:
Enfin, l'utilisation
@AfterSuite
(TestNG) pour supprimer toutes les entrées de la table. Toute mise en œuvre insuffisante donnera un autre fil de verrouillage sur le fonctionnement précédents ... sinon, vous êtes de l'or.Vérifier si votre clause where est optimisé.. c'est à dire à l'aide de la clé primaire et/ou index
Si tout ce qui précède ne fonctionne pas, vérifiez le message d'erreur de mysql journal. Si elle mentionne à propos de la taille du fichier journal, vous avez besoin d'augmenter dans la configuration et redémarrer le serveur mysql.