|
某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
|