我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Oracle】简单参数也有讲究,JOB_QUEUE_PROCESS参数调研

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Oracle】简单参数也有讲究,JOB_QUEUE_PROCESS参数调研

调研背景



因为在测试procedure+dbms_job组合的任务时,调用失败(看着就是任务没跑)。经过查询数据库参数,发现是JOB_QUEUE_PROCESS的值为0。



调研内容



本次调研数据主要来源为Oracle官方文档和MOS,以条目的形式展示JOB_QUEUE_PROCESS参数相关的资料。下面查看展示的条目。


参数的作用



JOB_QUEUE_PROCESS指定了Oracle数据库的每个instance在执行  DBMS_JOB和 DBMS_SCHEDULER任务时,能够创建的最大的子任务数量。


参数允许的数值范围



在 12.1及之前版本, 参数允许的默认值是0到1000。在12.2及18c版本中,参数允许的默认值是0到4000。


参数在不同版本中的默认值



在9i和10g中,默认值是0;在11g和12cR1版本中,默认值为1000,在12cR2和18c版本中,默认值为4000。

    

【Oracle】简单参数也有讲究,JOB_QUEUE_PROCESS参数调研 这里就很尴尬了,谁把我的数据库参数改成0的(数据库版本是11.2.0.4 )


修改参数值的方法



job_queue_processes参数值可以动态修改,默认是scope=both

alter system set job_queue_processes=<integer>;


在RAC数据库中,执行命令

alter system set job_queue_processes=<integer> sid='*';


参数值为0的情况



在10g和11gR1中,将JOB_QUEUE_PROCESSES设置为0只会导致DBMS_JOB作业无法运行,但DBMS_SCHEDULER作业未受影响且仍将运行。


从11gR2开始,将JOB_QUEUE_PROCESSES设置为0会导致DBMS_SCHEDULER和DBMS_JOB作业都无法运行。


将JOB_QUEUE_PROCESS设置为0将禁用下列功能以及使用Oracle Scheduler或DBMS_JOB的任何其他功能或特性:

  • 高级复制(Advanced Replication)使用Oracle Scheduler进行数据刷新。

  • Oracle AQ( Oracle Streams Advanced Queuing )使用Oracle Scheduler进行消息传播。

  • 物化视图(Materialized Views)使用Oracle Scheduler进行自动刷新。 


注意:Oracle数据库在升级模式下会覆盖job queue设置,以禁用调度任务。 因此,升级Oracle数据库时无需更改参数设置。


确保参数的合理性



如果需要将JOB_QUEUE_PROCESSES设置为较低的值,则应考虑以下因素:


理想情况下,JOB_QUEUE_PROCESSES值应大于数据库中运行的所有并发作业。让JOB_QUEUE_PROCESSES大于调度的作业总数(使用scheduler + dbms_job)是个好主意。这将确保即使某些作业超过其常规运行持续时间,我们也不会耗尽JOB_QUEUE_PROCESSES。


另外,由下列方法生成的调度程序作业,也可能会产生相应的进程开销:

  • 任何高级复制(Advanced Replication )刷新

  • Oracle AQ流式消息 传输

  • 物化视图(Materialized Views) 刷新

  • DBMS_REDEFINITION数据表重定义


除此之外,可能还有一些可以手动或通过某些第三方工具在数据库中执行的临时作业。 JOB_QUEUE_PROCESSES也应该满足这些。


多租户数据库的参数特性



在12.1.0.1中,job_queue_process是容器数据库(CDB)可修改参数(全局级别)。

在12.1.0.2中,job_queue_process参数不是CDB可修改的; 相反的,它是PDB可以修改的,但是每个pdb都无法正确使用自己的job_queue_processes值。

从12.2开始,JOB_QUEUE_PROCESSES是PDB可修改的:

  • 如果ROOT中的job_queue_processes为0,则在所有PDB中禁用Scheduler,包括ROOT。

  • 如果在除ROOT之外的特定PDB中将job_queue_processes设置为0,则仅在该PDB中禁用Scheduler。


调研结果



如果要保证系统高峰期Oracle也能运行各种任务,那么需要将JOB_QUEUE_PROCESS参数设置为一个合理值。采用“技术手段获取”+“经验判断”相结合的方式,是一种不错的solution。



各位读者朋友也可关注作者微信公众号“IT技术佳肴”,与作者交流。

【Oracle】简单参数也有讲究,JOB_QUEUE_PROCESS参数调研

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【Oracle】简单参数也有讲究,JOB_QUEUE_PROCESS参数调研

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

目录