我的申请在过去两个月一直运作良好。上周用户数增加了一倍,因此我们开始在日志中看到此错误:
“获取数据库行锁定失败:超时已到期。操作完成前经过的超时时间或服务器没有响应。”
当用户活动数量下降时,问题会自行解决。
由于这两个查询,锁定正在发生:
SELECT * FROM QRTZ_LOCKS WITH(UPDLOCK,ROWLOCK)WHERE SCHED_NAME = 'QuartzScheduler'AND LOCK_NAME = @lockName
(@ lockName nvarchar(14))SELECT * FROM QRTZ_LOCKS WITH (UPDLOCK,ROWLOCK)WHED SCHED_NAME ='QuartzScheduler'AND LOCK_NAME = @lockName
我尝试的事情:
系统: 我们正在使用Quartz 2.3.1 我们在2个不同的服务器上有2个石英服务,访问一个石英数据 触发器是从3个不同的Web应用程序创建的。
Quartz配置:
<add key="quartz.scheduler.instanceName" value="QuartzScheduler" /> <add key="quartz.scheduler.instanceId" value="AUTO" /> <add key="quartz.scheduler.jobFactory.type" value="Quartz.Server.Bootstrap.QuartzUnityJobFactory, Quartz.Server"/> <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" /> <add key="quartz.threadPool.threadCount" value="30" /> <add key="quartz.threadPool.threadPriority" value="Normal" /> <add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" /> <add key="quartz.jobStore.useProperties" value="false" /> <add key="quartz.jobStore.dataSource" value="default" /> <add key="quartz.jobStore.tablePrefix" value="QRTZ_" /> <add key="quartz.jobStore.clustered" value="true" /> <add key="quartz.jobStore.misfireThreshold" value="176400000" /> <!-- 49 hours --> <add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" /> <add key="quartz.dataSource.default.connectionString" value="*****" /> <add key="quartz.dataSource.default.provider" value="SqlServer-20" /> <add key="quartz.jobStore.acquireTriggersWithinLock" value="true" /> <add key="quartz.scheduler.batchTriggerAcquisitionMaxCount" value="10" />
任何想法?