Oracle Job调度优先级排队规则(oracle job排队)

Oracle Job调度:优先级排队规则

在企业级应用中,我们时常需要完成定时任务调度的功能,Oracle Job是一种常见的任务调度方式,可以通过它实现周期性的批处理任务,例如报表生成、数据清理等。然而,在任务并发较高的场景下,如何保证任务顺利运行和优化资源利用,就需要借助于Oracle Job的优先级排队规则。

在Oracle数据库中,创建Job的基本语法为:

DBMS_JOB.SUBMIT(  
job OUT BINARY_INTEGER, -- 任务ID
what IN VARCHAR2, -- 任务要做的操作
next_date IN DATE DEFAULT SYSDATE, -- 任务开始时间
interval IN VARCHAR2 DEFAULT 'null', -- 任务执行周期
no_parse IN BOOLEAN DEFAULT FALSE, -- 禁止语法校验标志
instance IN BINARY_INTEGER DEFAULT ANY_INSTANCE,
force IN BOOLEAN DEFAULT FALSE); -- 是否将任务置为FORCED状态

其中,最重要的是interval参数,它决定了Job的执行频率和时间间隔,可以采用以下方式指定:

* 使用数字:例如’30’代表每30秒执行一次;

* 使用字符串:例如’TRUNC(SYSDATE+15/1440)+15/1440’,代表每15分钟执行一次。

在我们使用协调定时(Job Scheduler)服务时,通常会遇到如下两种场景:

* 不同的任务有不同的执行频率,有些任务需要较高的优先级以确保及时执行;

* 同时启动的多个任务可能会暂时竞争执行资源,需要合理地规划任务队列,以确保高优先级任务不受影响。

基于这些需求,我们可以使用一些高级技术,比如Oracle Job优先级和规则控制来调整任务执行顺序。针对上述场景,我们可以设计如下优先级制度:

1. 所有默认的Job都以20的优先级排成队列;

2. 当有多个任务同时提交时,最高优先级的任务会被取出执行,同时其他任务被排入20的队列等待下一次运行;

3. 对于高优先级的任务,我们设置较小的间隔,并确保他们及时执行;

4. 对于低优先级的任务,我们设置较大的间隔,并适当考虑任务的复杂度和资源占用情况。

针对以上的任务优先级和任务控制方案,我们可以使用如下的存储过程实现:

CREATE OR REPLACE PROCEDURE submit_job (  
job_what IN VARCHAR2,
job_when IN VARCHAR2,
job_priority IN NUMBER DEFAULT 20)
IS
l_jobno number;
BEGIN
DBMS_JOB.SUBMIT (
job => l_jobno,
what => job_what,
next_date => job_when,
interval => null,
no_parse => false,
instance => null
);
IF job_priority != 20 THEN
DBMS_JOB.CHANGE_PRIORITY (
job => l_jobno,
priority => job_priority
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
RSE;
END;

使用如下代码测试我们刚刚编写的Job规则:

BEGIN  
submit_job ('dbms_stats.gather_schema_stats(''SCOTT'',CASCADE=>TRUE)', 'SYSDATE-1/24', 30);
submit_job ('dbms_stats.gather_table_stats(''SCOTT'',''EMP'',CASCADE=>TRUE)', 'SYSDATE+1/24', 20);
submit_job ('dbms_stats.gather_index_stats(''SCOTT'',''EMP_PK'')', 'SYSDATE+1/24*2', 20);
submit_job ('dbms_stats.gather_index_stats(''SCOTT'',''EMP_IDX'')', 'SYSDATE+1/24*3', 20);
END;

通过使用以上代码,我们可以实现定时任务的优先级排队规则,确保任务在高并发场景下执行的顺畅和准确性。在日常开发过程中,我们还需要注意一些问题,如尽可能避免在数据库中提交长时间运行的任务,以及使用TO_DATE函数确保Job的精确时间安排。


数据运维技术 » Oracle Job调度优先级排队规则(oracle job排队)