Quartz.net调度程序数据库噪声查询

时间:2014-06-04 10:49:57

标签: quartz-scheduler

所有

我们配置了Quartz.net调度程序。其配置如下:

<add key="quartz.scheduler.instanceId" value="Some_Id" />
<add key="quartz.scheduler.instanceName" value="Some_Name" />
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
<add key="quartz.jobStore.dataSource" value="default" />
<add key="quartz.dataSource.default.connectionString" value="Some_ConString" />
<add key="quartz.dataSource.default.provider" value="SqlServer-20" />

在分析数据库时,我们注意到每23-27秒执行以下流量:

exec sp_executesql N'SELECT TRIGGER_NAME, TRIGGER_GROUP, NEXT_FIRE_TIME, PRIORITY FROM QRTZ_TRIGGERS WHERE SCHED_NAME = ''Some_Name'' AND TRIGGER_STATE = @state AND NEXT_FIRE_TIME <= @noLaterThan AND (MISFIRE_INSTR = -1 OR (MISFIRE_INSTR <> -1 AND NEXT_FIRE_TIME >= @noEarlierThan)) ORDER BY NEXT_FIRE_TIME ASC, PRIORITY DESC',N'@state nvarchar(7),@noLaterThan bigint,@noEarlierThan bigint',@state=N'WAITING',@noLaterThan=635374746823951132,@noEarlierThan=635374745923951132

以下流量每分钟执行一次:

exec sp_executesql N'SELECT COUNT(TRIGGER_NAME) FROM QRTZ_TRIGGERS WHERE SCHED_NAME = ''Some_Name'' AND MISFIRE_INSTR <> -1 AND NEXT_FIRE_TIME < @nextFireTime AND TRIGGER_STATE = @state1',N'@nextFireTime bigint,@state1 nvarchar(7)',@nextFireTime=635374746017864938,@state1=N'WAITING'

任何人都可以解释这次投票检查的内容吗? 这些是默认设置,因为我们没有配置来扫描数据库中的更新吗?

1 个答案:

答案 0 :(得分:3)

第一个语句是quartz服务器轮询数据库以查找将被触发但不受任何misfire policies

的触发器的触发器

Re:第二个声明,这是直接来自Quartz.net source code的方法评论:

            // Before we make the potentially expensive call to acquire the 
            // trigger lock, peek ahead to see if it is likely we would find
            // misfired triggers requiring recovery.

所以这是石英检查以查看自上次检查以来是否有任何触发器失效,因此它可以恢复它们。

这是直接写入引擎的默认行为,但您可以在配置文件中使用此条目控制第二个语句的频率。

 <add key="quartz.jobStore.misfireThreshold" value="60000" />