获取db行锁失败

时间:2017-04-18 17:15:28

标签: sql-server quartz.net

我的申请在过去两个月一直运作良好。上周用户数增加了一倍,因此我们开始在日志中看到此错误:

“获取数据库行锁定失败:超时已到期。操作完成前经过的超时时间或服务器没有响应。”

当用户活动数量下降时,问题会自行解决。

由于这两个查询,锁定正在发生:

  

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

我尝试的事情:

  1. 我尝试重新启动服务,但这没有帮助。
  2. 我在quarts_trigger表中添加了索引,但没有帮助。
  3. 我将并行度的数据库成本阈值更改为50和Max 并行度达到4并没有帮助。
  4. 系统: 我们正在使用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" />
    

    任何想法?

0 个答案:

没有答案