Processes,job_queue_processes和物化视图

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:41   2636   0

某oracle sharding环境catalog端创建的duplicated table,是通过dblink和物化视图同步到shard端的,默认建立的物化视图是60s刷新一次。当前catalog端有1000多个复制表,导致分片端有1000多个物化视图刷新

这些物化视图刷新通过DBMS_SCHEDULER发起的job队列,依次执行

1. job_queue_processes

(1)job_queue_processes取值范围为0到4000(12c以上),总共可创建多少个job进程由job_queue_processes参数来决定

(2)当job_queue_processes大于1时,且并行执行job时,至少一个为协调进程。其总数不会超出job_queue_processes的值

(3)job_queue_processes参数的值为且DBMS_JOB与DBMS_SCHEDULER共享

(4)job_queue_processes参数,当设定该值为0的时候则任意方式创建的job都不会运行

2. 物化视图刷新

(1)物化视图刷新job是由DBMS_SCHEDULER发起的

可以通过视图user_scheduler_jobs来查询job名、job执行的动作、job间隔、下次执行时间,是否enable等

select JOB_NAME,JOB_TYPE,JOB_ACTION,REPEAT_INTERVAL,ENABLED,NEXT_RUN_DATE from user_scheduler_jobs where job_name='MV_RF$J_0_S_10';

(2)通过DBMS_SCHEDULER修改job属性

exec DBMS_SCHEDULER.SET_ATTRIBUTE ( name => 'MV_RF$J_0_S_10', attribute => 'repeat_interval', value => '(SYSDATE+(20/86400))');

exec dbms_scheduler.enable('MV_RF$J_0_S_10');

exec dbms_scheduler.disable('MV_RF$J_0_S_10');

(3)当job_queue_processes很小时,1000多个物化视图排队等待刷新,当job_queue_processes增大时,物化视图刷新较快

(4)针对手动建立的物化视图刷新,也会通过DBMS_SCHEDULER发起job,所以对于现场物化视图较多的库,需要适当调整job_queue_processes和process的值

CREATE MATERIALIZED VIEW LOG ON "APP_SCHEMA"."TEST1";

CREATE MATERIALIZED VIEW "APP_SCHEMA"."TEST1_1" ("ID") REFRESH FAST ON DEMAND START WITH sysdate+0 NEXT (SYSDATE+(60/86400)) enable query rewrite AS SELECT "TEST1"."ID" "ID" FROM "APP_SCHEMA"."TEST1";

3. processes

processes的值我们一般设为5000,对于大多数环境是够用的

但是由于sharding环境物化视图刷新job占用process,需适量扩大分片库的process值

查询当前所有跑着的job

select PNAME,PROGRAM from v$process where pname like 'J%' order by pname;

印尼现场的ORA-00020: maximum number of processes (5000) exceeded,可以通过job_queue_processes改为0或增大processes值解决

若oracle hang住,无法登录,可以sqlplus -prelim / as sysdba登录,重启数据库

sqlplus -prelim / as sysdba
shutdown abort

sqlplus / as sysdba

startup

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP