石英+;mysql-原因:java.sql.SQLException:超过锁等待超时;尝试重新启动事务

石英+;mysql-原因:java.sql.SQLException:超过锁等待超时;尝试重新启动事务,mysql,quartz-scheduler,Mysql,Quartz Scheduler,我在quartz+mysql+Tomcat7中遇到了一个超过锁等待超时的问题。当我使用一台服务器进行开发和质量保证时,我所面临的问题没有出现,但在部署之后,我开始在生产环境(有两台服务器)中看到一个问题 org.quartz.JobPersistenceException: Couldn't store trigger 'trigger1355274000000' for '1355274000000' job:Lock wait timeout exceeded; try restarting

我在quartz+mysql+Tomcat7中遇到了一个超过锁等待超时的问题。当我使用一台服务器进行开发和质量保证时,我所面临的问题没有出现,但在部署之后,我开始在生产环境(有两台服务器)中看到一个问题

org.quartz.JobPersistenceException: Couldn't store trigger 'trigger1355274000000' for '1355274000000' job: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.JobStoreSupport.storeTrigger(JobStoreSupport.java:1270) 
at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggerFired(JobStoreSupport.java:2961) 
at org.quartz.impl.jdbcjobstore.JobStoreSupport$38.execute(JobStoreSupport.java:2871) 
at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3788) 
at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggerFired(JobStoreSupport.java:2865) 
at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:319) 
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:3515) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3447) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1951) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2554) 
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1761) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2046) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1964) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1949) 
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102) 
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102) 
at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.updateTrigger(StdJDBCDelegate.java:1295) 
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeTrigger(JobStoreSupport.java:1256) 
这是我的石英配置

org.quartz.scheduler.instanceName = ApplicationDemoScheduler
org.quartz.scheduler.instanceId = AUTO

org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
org.quartz.scheduler.threadsInheritContextClassLoaderOfInitializer=true
org.quartz.jobStore.misfireThreshold=180000

org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties=false
org.quartz.jobStore.dataSource=qzDS
org.quartz.jobStore.tablePrefix=QRTZ_
org.quartz.jobStore.isClustered=true
org.quartz.jobStore.selectWithLockSQL=select LOCK_NAME from QRTZ_LOCKS where LOCK_NAME=?
org.quartz.jobStore.clusterCheckinInterval = 20000

org.quartz.scheduler.dbFailureRetryInterval=15000


org.quartz.dataSource.qzDS.jndiURL=java:comp/env/jdbc/appDemoJndi
这个数据源引用的是Tomcat中配置的数据源

 <Resource name="jdbc/appDemoJndi" auth="Container" type="javax.sql.DataSource"
          username="testuser" password="test_pswd"
          url="jdbc:mysql://localhost/testuser"
          driverClassName="com.mysql.jdbc.Driver"
          initialSize="20" maxWait="5000"
          maxActive="40" maxIdle="5"
         testWhileIdle="true"
          testOnBorrow="true"
          defaultAutoCommit="false"
          maxOpenPreparedStatements="20" 
          validationQuery="select 1"
          poolPreparedStatements="true"/>

我不依赖任何冬眠或任何东西。我不太确定这个错误是否与任何quartz配置或MYSQL配置有关

有没有人遇到过同样的问题并解决了?请帮忙


谢谢。

同样的问题最终增加了事务锁 [mysqld]
innodb_lock_wait_timeout=120

在mysql中检查挂起的锁是否来自mysql。访问这些表时是否还有其他可能导致锁定的内容?QRTZ_锁中是否有奇怪的东西?此代码仅用于后端区域。因此,据我所知,我不认为这张表是从其他地区使用的。我想知道这是否是因为其他服务器具有相同的配置。在锁表中,我看到日历锁、作业访问、缺火访问、状态访问、触发访问。您找到解决方案了吗?