首页 技术 正文
技术 2022年11月16日
0 收藏 953 点赞 3,965 浏览 3441 个字

由于物化视图定义为on commit导致update更新基表慢的解决方案
以下是模拟和解决测试过程:

(模拟update慢的过程)

1、首先基于基表创建物化视图日志:

create materialized view log on scott.emp with rowid;

2、首先基于scott用户下emp创建物化视图:

create materialized view mv_emp

REFRESH FAST on commit

as

select * from scott.emp;

3、通过oracle 10046 查看update语句执行过程:

(1)sql>alter session set sql_trace=true;

(2)sql>alter session set tracefile_identifier=’lzq’;

(3)sql>alter session set events ‘10046 trace name context forever, level 1’;

(4)sql>update scott.emp set sal=1450 where empno=7934;

(5)sql>alter session set events ‘10046 trace name context off’;

(6)sql>show parameter user_dump_dest

(7)cd 到user_dump_dest查看trace文件被标识为lzq的trace 文件.

(8)格式化trace文件方便查看,tkprof prod2_ora_8623_lzq.trc prod2_ora_8623_lzq.out

(9)查看生成的prod2_ora_8623_lzq.out文件并查找跟物化视图mv_emp执行相关的信息见如下:

(生产环境中update一条语句真正执行的时间为1分多,而其中此处merger into “SCOTT”.”MV_EMP” 占了1分左右

,而物化视图真正是给日报、月报、年报来用的跟客户沟通不用更新基表的时候就立即更新物化视图,物化视图

可以抛弃on commit时候就刷新,可以采取定时更新即可,从而可以避免update更新基表慢的问题。)

MERGE INTO “SCOTT”.”MV_EMP” “SNA$” USING (SELECT CURRENT$.”EMPNO”,

  CURRENT$.”ENAME”,CURRENT$.”JOB”,CURRENT$.”MGR”,CURRENT$.”HIREDATE”,

  CURRENT$.”SAL”,CURRENT$.”COMM”,CURRENT$.”DEPTNO” FROM (SELECT “EMP”.”EMPNO” 

  “EMPNO”,”EMP”.”ENAME” “ENAME”,”EMP”.”JOB” “JOB”,”EMP”.”MGR” “MGR”,

  “EMP”.”HIREDATE” “HIREDATE”,”EMP”.”SAL” “SAL”,”EMP”.”COMM” “COMM”,

  “EMP”.”DEPTNO” “DEPTNO” FROM “EMP” “EMP”) CURRENT$, (SELECT DISTINCT 

  MLOG$.”EMPNO” FROM “SCOTT”.”MLOG$_EMP” MLOG$ WHERE “XID$$” = :1      AND 

  (“DMLTYPE$$” != ‘D’)) LOG$ WHERE CURRENT$.”EMPNO” = LOG$.”EMPNO”)”AV$” ON 

  (“SNA$”.”EMPNO” = “AV$”.”EMPNO”) WHEN MATCHED THEN UPDATE  SET 

  “SNA$”.”EMPNO” = “AV$”.”EMPNO”,”SNA$”.”ENAME” = “AV$”.”ENAME”,”SNA$”.”JOB” =

   “AV$”.”JOB”,”SNA$”.”MGR” = “AV$”.”MGR”,”SNA$”.”HIREDATE” = 

  “AV$”.”HIREDATE”,”SNA$”.”SAL” = “AV$”.”SAL”,”SNA$”.”COMM” = “AV$”.”COMM”,

  “SNA$”.”DEPTNO” = “AV$”.”DEPTNO” WHEN NOT MATCHED THEN INSERT  

  (SNA$.”EMPNO”,SNA$.”ENAME”,SNA$.”JOB”,SNA$.”MGR”,SNA$.”HIREDATE”,SNA$.”SAL”,

  SNA$.”COMM”,SNA$.”DEPTNO”) VALUES (AV$.”EMPNO”,AV$.”ENAME”,AV$.”JOB”,

  AV$.”MGR”,AV$.”HIREDATE”,AV$.”SAL”,AV$.”COMM”,AV$.”DEPTNO”)

call     count       cpu    elapsed       disk      query    current        rows

——- ——  ——– ———- ———- ———- ———-  ———-

Parse        1      0.00       0.00          0          0          0           0

Execute      1      0.01       0.08          2         20          5           1

Fetch        0      0.00       0.00          0          0          0           0

——- ——  ——– ———- ———- ———- ———-  ———-

total        2      0.01       0.08          2         20          5           1

(模拟update慢的解决方案:)

1、首先删除之前创建的物化视图(先做个备份)

drop  MATERIALIZED VIEW mv_emp;

2、创建物化视图

CREATE MATERIALIZED VIEW mv_emp 

  AS SELECT * FROM scott.emp;

3、建立一个用来刷新物化视图的存储过程:

CREATE OR REPLACE PROCEDURE auto_refresh_mview_job_proc 

AS 

BEGIN 

  dbms_mview.REFRESH(‘mv_emp’); 

END;

4、用ORACLE 10g的scheduler每天12:00和19:00定期刷新物化视图(时间可以根据需求定义)

BEGIN 

DBMS_SCHEDULER.CREATE_JOB( 

job_name => ‘auot_refresh_mview_job’, 

job_type => ‘STORED_PROCEDURE’, 

job_action => ‘scott.auto_refresh_mview_job_proc’, 

start_date => SYSDATE, 

repeat_interval => ‘FREQ=DAILY; BYHOUR=12,19’, 

enabled => TRUE, 

comments => ‘Refresh materialized view mv_emp’ 

); 

END;

5、通过oracle 10046 查看update语句执行过程:

(1)sql>alter session set sql_trace=true;

(2)sql>alter session set tracefile_identifier=’lzq’;

(3)sql>alter session set events ‘10046 trace name context forever, level 1’;

(4)sql>update scott.emp set sal=1450 where empno=7934;

(5)sql>alter session set events ‘10046 trace name context off’;

(6)sql>show parameter user_dump_dest

(7)cd 到user_dump_dest查看trace文件被标识为lzq的trace 文件.

(8)格式化trace文件方便查看,tkprof prod2_ora_8623_lzq.trc prod2_ora_8623_lzq.out

(9)查看生成的prod2_ora_8623_lzq.out文件并查找报告中是否还存在MERGE INTO “SCOTT”.”MV_EMP”更新物化视图的信息,

此时因为已经定时为定时刷新,从而可以提高update语句的时间,从而优化过程完成。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,556
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898