您好,登錄后才能下訂單哦!
調(diào)研背景
因?yàn)樵跍y(cè)試procedure+dbms_job組合的任務(wù)時(shí),調(diào)用失?。粗褪侨蝿?wù)沒跑)。經(jīng)過查詢數(shù)據(jù)庫參數(shù),發(fā)現(xiàn)是JOB_QUEUE_PROCESS的值為0。
調(diào)研內(nèi)容
本次調(diào)研數(shù)據(jù)主要來源為Oracle官方文檔和MOS,以條目的形式展示JOB_QUEUE_PROCESS參數(shù)相關(guān)的資料。下面查看展示的條目。
參數(shù)的作用
JOB_QUEUE_PROCESS指定了Oracle數(shù)據(jù)庫的每個(gè)instance在執(zhí)行 DBMS_JOB和 DBMS_SCHEDULER任務(wù)時(shí),能夠創(chuàng)建的最大的子任務(wù)數(shù)量。
參數(shù)允許的數(shù)值范圍
在 12.1及之前版本, 參數(shù)允許的默認(rèn)值是0到1000。在12.2及18c版本中,參數(shù)允許的默認(rèn)值是0到4000。
參數(shù)在不同版本中的默認(rèn)值
在9i和10g中,默認(rèn)值是0;在11g和12cR1版本中,默認(rèn)值為1000,在12cR2和18c版本中,默認(rèn)值為4000。
這里就很尷尬了,誰把我的數(shù)據(jù)庫參數(shù)改成0的(數(shù)據(jù)庫版本是11.2.0.4 )
修改參數(shù)值的方法
job_queue_processes參數(shù)值可以動(dòng)態(tài)修改,默認(rèn)是scope=both
alter system set job_queue_processes=<integer>;
在RAC數(shù)據(jù)庫中,執(zhí)行命令
alter system set job_queue_processes=<integer> sid='*';
參數(shù)值為0的情況
在10g和11gR1中,將JOB_QUEUE_PROCESSES設(shè)置為0只會(huì)導(dǎo)致DBMS_JOB作業(yè)無法運(yùn)行,但DBMS_SCHEDULER作業(yè)未受影響且仍將運(yùn)行。
從11gR2開始,將JOB_QUEUE_PROCESSES設(shè)置為0會(huì)導(dǎo)致DBMS_SCHEDULER和DBMS_JOB作業(yè)都無法運(yùn)行。
將JOB_QUEUE_PROCESS設(shè)置為0將禁用下列功能以及使用Oracle Scheduler或DBMS_JOB的任何其他功能或特性:
高級(jí)復(fù)制(Advanced Replication)使用Oracle Scheduler進(jìn)行數(shù)據(jù)刷新。
Oracle AQ( Oracle Streams Advanced Queuing )使用Oracle Scheduler進(jìn)行消息傳播。
物化視圖(Materialized Views)使用Oracle Scheduler進(jìn)行自動(dòng)刷新。
注意:Oracle數(shù)據(jù)庫在升級(jí)模式下會(huì)覆蓋job queue設(shè)置,以禁用調(diào)度任務(wù)。 因此,升級(jí)Oracle數(shù)據(jù)庫時(shí)無需更改參數(shù)設(shè)置。
確保參數(shù)的合理性
如果需要將JOB_QUEUE_PROCESSES設(shè)置為較低的值,則應(yīng)考慮以下因素:
理想情況下,JOB_QUEUE_PROCESSES值應(yīng)大于數(shù)據(jù)庫中運(yùn)行的所有并發(fā)作業(yè)。讓JOB_QUEUE_PROCESSES大于調(diào)度的作業(yè)總數(shù)(使用scheduler + dbms_job)是個(gè)好主意。這將確保即使某些作業(yè)超過其常規(guī)運(yùn)行持續(xù)時(shí)間,我們也不會(huì)耗盡JOB_QUEUE_PROCESSES。
另外,由下列方法生成的調(diào)度程序作業(yè),也可能會(huì)產(chǎn)生相應(yīng)的進(jìn)程開銷:
任何高級(jí)復(fù)制(Advanced Replication )刷新
Oracle AQ流式消息 傳輸
物化視圖(Materialized Views) 刷新
DBMS_REDEFINITION數(shù)據(jù)表重定義
除此之外,可能還有一些可以手動(dòng)或通過某些第三方工具在數(shù)據(jù)庫中執(zhí)行的臨時(shí)作業(yè)。 JOB_QUEUE_PROCESSES也應(yīng)該滿足這些。
多租戶數(shù)據(jù)庫的參數(shù)特性
在12.1.0.1中,job_queue_process是容器數(shù)據(jù)庫(CDB)可修改參數(shù)(全局級(jí)別)。
在12.1.0.2中,job_queue_process參數(shù)不是CDB可修改的; 相反的,它是PDB可以修改的,但是每個(gè)pdb都無法正確使用自己的job_queue_processes值。
從12.2開始,JOB_QUEUE_PROCESSES是PDB可修改的:
如果ROOT中的job_queue_processes為0,則在所有PDB中禁用Scheduler,包括ROOT。
如果在除ROOT之外的特定PDB中將job_queue_processes設(shè)置為0,則僅在該P(yáng)DB中禁用Scheduler。
調(diào)研結(jié)果
如果要保證系統(tǒng)高峰期Oracle也能運(yùn)行各種任務(wù),那么需要將JOB_QUEUE_PROCESS參數(shù)設(shè)置為一個(gè)合理值。采用“技術(shù)手段獲取”+“經(jīng)驗(yàn)判斷”相結(jié)合的方式,是一種不錯(cuò)的solution。
各位讀者朋友也可關(guān)注作者微信公眾號(hào)“IT技術(shù)佳肴”,與作者交流。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。