Author |
Message |
12/03/2009 08:05:12
|
sesker
neo
Joined: 12/03/2009 08:00:26
Messages: 3
Offline
|
We have an application that has around 60-70 quartz jobs defined and executing, many concurrently. The problem is we have an administration ui for the quartz job and when we attempt to retrieve all the jobs, via the prescribed way:
1. get all job groups names
2. get job names for group
3. get all job details for each name in group
The system hangs for many seconds while fetching the information. I have looked at the database logs, etc, and it looks like the is contention while quartz is updating job information and other things. Has anyone run into this? Is there a better method for getting all the jobs and their job details?
|
|
|
01/12/2010 04:34:05
|
apaliwal
praetor
Joined: 01/05/2010 20:52:24
Messages: 223
Offline
|
Can you provide more information like which version of Quartz you are using, hardware configuration etc.
Also, whenever you execute the Admin UI, please take Thread dumps while executing the fetch operation. Thread dumps may provide useful information.
thanks
ashish
|
cheers
ashish
|
|
|
01/16/2010 09:16:36
|
jhouse
seraphim
Joined: 11/06/2009 15:29:56
Messages: 1703
Offline
|
Have you built indexes on the quartz tables?
Also, as ashish suggested, thread dumps may be useful.
|
|
|
01/21/2010 06:35:47
|
sesker
neo
Joined: 12/03/2009 08:00:26
Messages: 3
Offline
|
No indexes... I used the standard DDL that was included with the product, and that had no indexes.. I will look into indexing the tables, but with 60-100 jobs, I wouldn't think that would make that big of difference...
|
|
|
01/21/2010 06:41:27
|
sesker
neo
Joined: 12/03/2009 08:00:26
Messages: 3
Offline
|
What tables do you suggest to index, and on what columns?
|
|
|
01/21/2010 20:13:29
|
jhouse
seraphim
Joined: 11/06/2009 15:29:56
Messages: 1703
Offline
|
The documentation suggests these indexes at a minimum (note this is oracle syntax):
Code:
create index idx_qrtz_j_req_recovery on qrtz_job_details(REQUESTS_RECOVERY);
create index idx_qrtz_t_next_fire_time on qrtz_triggers(NEXT_FIRE_TIME);
create index idx_qrtz_t_state on qrtz_triggers(TRIGGER_STATE);
create index idx_qrtz_t_nft_st on qrtz_triggers(NEXT_FIRE_TIME,TRIGGER_STATE);
create index idx_qrtz_t_volatile on qrtz_triggers(IS_VOLATILE);
create index idx_qrtz_ft_trig_name on qrtz_fired_triggers(TRIGGER_NAME);
create index idx_qrtz_ft_trig_group on qrtz_fired_triggers(TRIGGER_GROUP);
create index idx_qrtz_ft_trig_nm_gp on qrtz_fired_triggers(TRIGGER_NAME,TRIGGER_GROUP);
create index idx_qrtz_ft_trig_volatile on qrtz_fired_triggers(IS_VOLATILE);
create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(INSTANCE_NAME);
create index idx_qrtz_ft_job_name on qrtz_fired_triggers(JOB_NAME);
create index idx_qrtz_ft_job_group on qrtz_fired_triggers(JOB_GROUP);
create index idx_qrtz_ft_job_stateful on qrtz_fired_triggers(IS_STATEFUL);
create index idx_qrtz_ft_job_req_recovery on qrtz_fired_triggers(REQUESTS_RECOVERY);
|
|
|
|