2009年2月23日星期一

关于JOB的一点问题

今天有人在群里问:

有个JOB,定时执行,每5秒执行一次。现在如果有一次它执行时间超过5秒,还没执行完毕,会怎么样?

关于这个问题,我的解释是:
排队执行,等着。
当第n次执行到第5秒时,如果新加JOB,数据库会另起一个进程或者线程来执行第N+1个JOB,如果碰上N+2...则依次类推,一直到达到数据库参数里设定的JOB进程数的最大值。

设置初始化参数 job_queue_processes可以调整JOB进程数的最大值(最大只能为1000)。
sql> alter system set job_queue_processes=n;

由于ORACLE采取了这样的方式处理JOB,增加了并发能力。但是针对实际情况还要考虑到MVCC带来的问题。

没有评论: