Dépannage cohérente “SQLException: Verrouillage de délai d'attente dépassé”

J'ai une application en cours d'exécution Quartz 1.6.1 w/travail persistant en magasin, avec MySQL 5.1 dans la DB. Cette application utilisé pour le démarrage d'accord dans Tomcat6. À un certain moment, il a commencé à lancer l'exception suivante à CHAQUE démarrage:

- MisfireHandler: Error handling misfires: Failure obtaining db row lock: Lock wait timeout exceeded; try restarting transaction
org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: Lock wait timeout exceeded; try restarting transaction [See nested exception: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction]
at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:112)
at org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:112)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.doRecoverMisfires(JobStoreSupport.java:3075)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.manage(JobStoreSupport.java:3838)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.run(JobStoreSupport.java:3858)
Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
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:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1885)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)
at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:92)
... 4 more

Je dois mentionner que cette application utilise également JPA w/Hibernate en utilisant C3P0 pour la connexion de source de données de la mutualisation. Cette exception est toujours jeté directement après JPA termine la mise à jour de mon schéma.

Tout d'abord, j'ai mis à Quartz 1.6.5 et l'exception est allé loin, mais l'application semble figé. La dernière chose dans les journaux -, où l'exception a utilisé pour être - est:

...hbm2ddl stuff...
2969 [Thread-1] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - schema update complete
- Handling 6 trigger(s) that missed their scheduled fire-time.

Avec rien après, et la webapp de ne pas traiter les demandes; ils ont juste accrocher indéfiniment.

Quand je lance mysql client en ligne de commande avec SHOW INNODB STATUS juste après l'exception, il n'a toujours montrer deux opérations douteuses:

----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 49, signal count 49
Mutex spin waits 0, rounds 2100, OS waits 0
RW-shared spins 115, OS waits 49; RW-excl spins 0, OS waits 0
------------
TRANSACTIONS
------------
Trx id counter 0 165688
Purge done for trx's n:o < 0 165685 undo n:o < 0 0
History list length 12
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0 0, not started, OS thread id 5012
MySQL thread id 8, query id 1798 localhost 127.0.0.1 root
SHOW INNODB STATUS
---TRANSACTION 0 165687, ACTIVE 300 sec, OS thread id 3772
2 lock struct(s), heap size 320, 1 row lock(s)
MySQL thread id 30, query id 1795 localhost 127.0.0.1 my_app
---TRANSACTION 0 165685, ACTIVE 360 sec, OS thread id 5460
2 lock struct(s), heap size 320, 1 row lock(s), undo log entries 1
MySQL thread id 34, query id 1680 localhost 127.0.0.1 my_app

Je suis à la recherche de conseils sur la façon de continuer à étudier cette question. Peut-être que si j'arrivais à identifier les propriétaires de ces deux opérations, ou de quelles ressources ils sont de verrouillage?

Mise à jour: j'ai supprimé toutes les lignes de la qrtz_simple_triggers table sans problème. J'ai ensuite essayé de faire la même chose sur le qrtz_triggers table et mon client MySQL a jeté un "Verrouillage de délai d'attente dépassé" erreur. À ce stade, j'ai arrêté ma (toujours suspendu) et a ensuite été en mesure de supprimer toutes les lignes de la qrtz_triggers table. Une fois que cela a été fait, j'ai pu réussir de démarrage de mon application.

Il semble-je besoin pour ouvrir une session un nouveau Quartz de bug, mais j'aimerais être en mesure de leur donner plus d'informations sur ce qui est réellement hapenning ici. Donc, comme pour la question initiale, comment puis-je résoudre ces types de problèmes?