【发布时间】:2017-12-15 22:21:57
【问题描述】:
我有一个大型应用程序,其中 4 个节点使用石英来安排作业。
我经常收到来自我们数据库团队的邮件
'SELECT * FROM QRTZ_LOCKS WHERE LOCK_NAME='TRIGGER_ACCESS' FOR UPDATE'
阻塞 15-20 分钟。有时几个小时。 而且我看到我的工作也卡在等待锁定。
我们使用的是相当旧的 Quartz 1.8.3 版本。这是我正在使用的石英设置
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 25
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreCMT
org.quartz.jobStore.driverDelegateClass=com.xyx.abc.common.scheduler.impl.CDAJDBCDelegate
org.quartz.jobStore.useProperties=false
org.quartz.jobStore.tablePrefix=QRTZ_
org.quartz.jobStore.isClustered=true
org.quartz.jobStore.clusterCheckinInterval = 20000
# these 3 are required by customSchedulerFactory class
org.quartz.dataSource.myDS.connectionProvider.class=com.xyz.abc.common.scheduler.impl.CustomPoolingConnectionProvider
org.quartz.jobStore.dataSource=myDS
org.quartz.jobStore.nonManagedTXDataSource=myDS
我尝试为 Quartz 启用调试日志。但并没有从中得到什么。
有没有人遇到过类似的问题?如何确保“选择更新”查询快速执行?
【问题讨论】:
-
SELECT FOR UPDATE 查询锁定 QRTZ_LOCKS 表中的行,因此如果在该表中的相同行上存在并发 SELECT FOR UPDATE 查询,那么这些并发查询将等待第一个 SELECT FOR UPDATE 查询在执行前通过提交或回滚来释放对这些行的锁定。
-
同意@ivanzg。您的问题与 Quartz 无关,看起来您对数据库的锁定有问题。
-
这个问题解决了吗?
标签: java oracle quartz-scheduler