Как следует устранять неполадки и / или предотвращать безудержные таймауты блокировки UDB из удалений из таблицы кварцевого планировщика для кластерного планировщика с одним узлом?
Среда:
Websphere 8.5, Java SE7, Quartz 2.2.3, Java, UDB 10.5 FP 8
Планировщик:
Кластерный планировщик с 1 узлом в кластере
Кварц Свойства:
# Configure Main Scheduler Properties
#============================================================================
org.quartz.scheduler.instanceName = MyClusteredScheduler
org.quartz.scheduler.instanceId = AUTO
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure JobStore
#============================================================================
org.quartz.jobStore.misfireThreshold = 60000
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 = myDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 15000
#============================================================================
# Configure Datasources
#============================================================================
org.quartz.dataSource.myDS.driver = com.ibm.db2.jcc.DB2Driver
org.quartz.dataSource.myDS.URL = jdbc:db2://server:port/dbname
org.quartz.dataSource.myDS.maxConnections = 10
org.quartz.dataSource.myDS.validationQuery=VALUES current date
Сценарий:
- Планировщик планирует ~3 тыс. Заданий с помощью SimpleTrigger примерно за одно и то же время, примерно через полчаса + n секунд после запланированного последнего задания.
- Все задания запускаются во время запуска + n секунд (например, 11:30: сс)
Код строительного задания:
JobBuilder jobBuilder = newJob(jobClassFor(jobClassName));
jobBuilder.usingJobData(new JobDataMap(jobParameters));
JobDetail job = jobBuilder.build();
Триггер строительный код:
//1 trigger per job
triggers.add(newTrigger().forJob(job).startAt(triggerDate).build());
Код планировщика:
scheduler.scheduleJob(job, triggers, true);
Задание публикует сообщение MQ, используя данные из JobExecutionContext.jobDataMap, поэтому оно должно выполняться довольно быстро. У меня нет инструкций по обработке пропусков зажигания, настроенных явно в триггере.
Индексы БД:
QRTZ_JOB_DETAILS: +SCHED_NAME+JOB_NAME+JOB_GROUP
QRTZ_TRIGGERS: +SCHED_NAME+TRIGGER_NAME+TRIGGER_GROUP
QRTZ_SIMPLE_TRIGGERS: +SCHED_NAME+TRIGGER_NAME+TRIGGER_GROUP
QRTZ_CRON_TRIGGERS: +SCHED_NAME+TRIGGER_NAME+TRIGGER_GROUP
QRTZ_SIMPROP_TRIGGERS: +SCHED_NAME+TRIGGER_NAME+TRIGGER_GROUP
QRTZ_BLOB_TRIGGERS: +SCHED_NAME+TRIGGER_NAME+TRIGGER_GROUP
QRTZ_CALENDARS: +CALENDAR_NAME
QRTZ_FIRED_TRIGGERS: +SCHED_NAME+ENTRY_ID
QRTZ_PAUSED_TRIGGER_GRPS: +SCHED_NAME+TRIGGER_GROUP
QRTZ_SCHEDULER_STATE: +SCHED_NAME+INSTANCE_NAME
QRTZ_LOCKS: +SCHED_NAME+LOCK_NAME
QRTZ_TRIGGERS: +NEXT_FIRE_TIME
QRTZ_TRIGGERS: +TRIGGER_STATE
QRTZ_TRIGGERS: +TRIGGER_STATE+NEXT_FIRE_TIME
QRTZ_FIRED_TRIGGERS: +TRIGGER_NAME
QRTZ_FIRED_TRIGGERS: +TRIGGER_GROUP
QRTZ_FIRED_TRIGGERS: +TRIGGER_NAME+TRIGGER_GROUP
QRTZ_FIRED_TRIGGERS: +INSTANCE_NAME
QRTZ_FIRED_TRIGGERS: +JOB_NAME
QRTZ_FIRED_TRIGGERS: +JOB_GROUP
QRTZ_TRIGGERS: +MISFIRE_INSTR+NEXT_FIRE_TIME
QRTZ_TRIGGERS: +MISFIRE_INSTR+NEXT_FIRE_TIME+TRIGGER_STATE
QRTZ_TRIGGERS: +MISFIRE_INSTR+NEXT_FIRE_TIME+TRIGGER_GROUP+TRIGGER_STATE
Поведение:
QRTZ_ * удаляет, а обновления блокируются блокировками удалений для QRTZ_TRIGGER, QRTZ_SIMPLE_TRIGGER и QRTZ_JOB_DETAILS. Влияние на 3 тыс. Заданий занимает чуть более 1 часа.
Вопрос:
Как мне начать устранение неполадок и / или исправление этого поведения?