[20230225]12c Real-time materialized view 实时物化视图的应用.txt --//http://www.ludatou.com/?p=3101 在12.2之前,如果你想获得实时的数据,那么在利用query rewrite前,你必须得用on commit的刷新方式刷新物化视图。但是on commit 的刷新方式有众多限制。所以,以往的方式中需要采用on command的方式来进行刷新(不管是全量刷新还是增量刷新)。 在使用on command刷新的时候,通过设置job来定时的刷新物化视图,一次job运行之后,下一次job到来之前,如果基表有数据变化是不 会体现到物化视图的查询结果里的,实时物化视图就是解决这种问题的,实时获取数据而且免去频繁刷新mv。 1.环境: SCOTT@test01p> @prxx_win.sql ============================== PORT_STRING : IBMPC/WIN_NT64-9.1.0 VERSION : 12.2.0.1.0 BANNER : Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production CON_ID : 0 PL/SQL procedure successfully completed. SCOTT@test01p> show parameter rewrite PARAMETER_NAME TYPE VALUE ----------------------- ------ -------- query_rewrite_enabled string TRUE query_rewrite_integrity string enforced 2.测试例子: SCOTT@test01p> create table t2 (x not null primary key, y not null) tablespace users as select rownum x, mod(rownum, 10) y from dual connect by level <= 1e5 ; Table created. --//分析表. @ gts lis.t2 '' '' '' SCOTT@test01p> create materialized view log on t2 with rowid (x, y) including new values; Materialized view log created. create materialized view mv_new refresh fast on demand enable on query computation enable query rewrite as select y , count(*) c1 from t2 group by y; SCOTT@test01p> select y as y_new_parse1, count(*) from t2 group by y; Y_NEW_PARSE1 COUNT(*) ------------ ---------- 1 10000 6 10000 2 10000 4 10000 5 10000 8 10000 3 10000 7 10000 9 10000 0 10000 10 rows selected. SCOTT@test01p> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID bns44pywqdv33, child number 0 ------------------------------------- select y as y_new_parse1, count(*) from t2 group by y Plan hash value: 496717744 ---------------------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | ---------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 3 (100)| | | 1 | MAT_VIEW REWRITE ACCESS FULL| MV_NEW | 10 | 60 | 3 (0)| 00:00:01 | ---------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$E1B4E35D / MV_NEW@SEL$DB93197A Note ----- - Warning: basic plan statistics not available. These are only collected when: * hint 'gather_plan_statistics' is used for the statement or * parameter 'statistics_level' is set to 'ALL', at session or system level 24 rows selected. --//查询直接视图物化视图. SCOTT@test01p> insert into t2 select 1e5+rownum, mod(rownum, 3) from dual connect by level <= 999; 999 rows created. SCOTT@test01p> commit ; Commit complete. 3.继续测试: SCOTT@test01p> select y as y_new_parse1, count(*) from t2 group by y; Y_NEW_PARSE1 COUNT(*) ------------ ---------- 6 10000 4 10000 5 10000 8 10000 3 10000 7 10000 9 10000 1 10333 2 10333 0 10333 10 rows selected. SCOTT@test01p> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID bns44pywqdv33, child number 1 ------------------------------------- select y as y_new_parse1, count(*) from t2 group by y Plan hash value: 1607751112 ------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | OMem | 1Mem | Used-Mem | ------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 22 (100)| | | | | | 1 | VIEW | | 12 | 312 | 22 (14)| 00:00:01 | | | | | 2 | UNION-ALL | | | | | | | | | |* 3 | VIEW | VW_FOJ_0 | 10 | 290 | 9 (12)| 00:00:01 | | | | |* 4 | HASH JOIN FULL OUTER | | 10 | 240 | 9 (12)| 00:00:01 | 2078K| 2078K| 899K (0)| | 5 | VIEW | | 1 | 7 | 6 (17)| 00:00:01 | | | | | 6 | HASH GROUP BY | | 1 | 22 | 6 (17)| 00:00:01 | 1214K| 1214K| 707K (0)| |* 7 | TABLE ACCESS FULL | MLOG$_T2 | 999 | 21978 | 5 (0)| 00:00:01 | | | | | 8 | VIEW | | 10 | 170 | 3 (0)| 00:00:01 | | | | | 9 | MAT_VIEW ACCESS FULL | MV_NEW | 10 | 60 | 3 (0)| 00:00:01 | | | | | 10 | VIEW | | 2 | 52 | 13 (16)| 00:00:01 | | | | | 11 | UNION-ALL | | | | | | | | | |* 12 | FILTER | | | | | | | | | | 13 | NESTED LOOPS OUTER | | 1 | 32 | 6 (17)| 00:00:01 | | | | | 14 | VIEW | | 1 | 26 | 6 (17)| 00:00:01 | | | | |* 15 | FILTER | | | | | | | | | | 16 | HASH GROUP BY | | 1 | 22 | 6 (17)| 00:00:01 | 1214K| 1214K| 754K (0)| |* 17 | TABLE ACCESS FULL| MLOG$_T2 | 999 | 21978 | 5 (0)| 00:00:01 | | | | |* 18 | INDEX UNIQUE SCAN | I_SNAP$_MV_NEW | 1 | 6 | 0 (0)| | | | | |* 19 | HASH JOIN | | 1 | 35 | 7 (15)| 00:00:01 | 1743K| 1743K| 659K (0)| | 20 | VIEW | | 1 | 29 | 6 (17)| 00:00:01 | | | | | 21 | HASH GROUP BY | | 1 | 22 | 6 (17)| 00:00:01 | 1214K| 1214K| 756K (0)| |* 22 | TABLE ACCESS FULL | MLOG$_T2 | 999 | 21978 | 5 (0)| 00:00:01 | | | | | 23 | MAT_VIEW ACCESS FULL | MV_NEW | 1 | 6 | 1 (0)| 00:00:01 | | | | ------------------------------------------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SET$1 / from$_subquery$_003@SEL$1 2 - SET$1 3 - SEL$EC770CBB / from$_subquery$_009@SEL$7 4 - SEL$EC770CBB 5 - SEL$EC77BF7C / AV$0@SEL$2 6 - SEL$EC77BF7C 7 - SEL$EC77BF7C / MAS$@SEL$5 8 - SEL$F065AEA4 / SNA$0@SEL$2 9 - SEL$F065AEA4 / MV_NEW@SEL$3 10 - SET$2 / from$_subquery$_011@SEL$8 11 - SET$2 12 - SEL$0A26C4AD 14 - SEL$196A2F92 / AV$0@SEL$2 15 - SEL$196A2F92 17 - SEL$196A2F92 / MAS$@SEL$5 18 - SEL$0A26C4AD / MV_NEW@SEL$3 19 - SEL$0B44CC95 20 - SEL$7286615E / AV$0@SEL$2 21 - SEL$7286615E 22 - SEL$7286615E / MAS$@SEL$5 23 - SEL$0B44CC95 / MV_NEW@SEL$3 Predicate Information (identified by operation id): --------------------------------------------------- 3 - filter("AV$0"."OJ_MARK" IS NULL) 4 - access(SYS_OP_MAP_NONNULL("SNA$0"."Y")=SYS_OP_MAP_NONNULL("AV$0"."GB0")) 7 - filter("MAS$"."SNAPTIME$$">TO_DATE(' 2023-02-24 21:49:03', 'syyyy-mm-dd hh24:mi:ss')) 12 - filter(CASE WHEN ROWID IS NOT NULL THEN 1 ELSE NULL END IS NULL) 15 - filter(SUM(1)>0) 17 - filter("MAS$"."SNAPTIME$$">TO_DATE(' 2023-02-24 21:49:03', 'syyyy-mm-dd hh24:mi:ss')) 18 - access("MV_NEW"."SYS_NC00003$"=SYS_OP_MAP_NONNULL("AV$0"."GB0")) 19 - access(SYS_OP_MAP_NONNULL("Y")=SYS_OP_MAP_NONNULL("AV$0"."GB0")) filter("MV_NEW"."C1"+"AV$0"."D0">0) 22 - filter("MAS$"."SNAPTIME$$">TO_DATE(' 2023-02-24 21:49:03', 'syyyy-mm-dd hh24:mi:ss')) Note ----- - dynamic statistics used: dynamic sampling (level=2) - this is an adaptive plan - Warning: basic plan statistics not available. These are only collected when: * hint 'gather_plan_statistics' is used for the statement or * parameter 'statistics_level' is set to 'ALL', at session or system level 82 rows selected. --//Real time mv利用原来的已经stale的物化视图,结合mv log,通过计算后,帮你获取实时的数据。即能获得实时数据,又避免频繁的刷 --//新mv。 SCOTT@test01p> select mview_name,staleness,REFRESH_METHOD from user_mviews where MVIEW_NAME='MV_NEW'; MVIEW_NAME STALENESS REFRESH_ -------------------- ------------------- -------- MV_NEW STALE FAST --//我定义的物化视图不会自动刷新. SCOTT@test01p> exec dbms_mview.refresh(list=>'MV_NEW',method=>'F'); PL/SQL procedure successfully completed. SCOTT@test01p> select mview_name,staleness,REFRESH_METHOD from user_mviews where MVIEW_NAME='MV_NEW'; MVIEW_NAME STALENESS REFRESH_ -------------------- ------------------- -------- MV_NEW FRESH FAST SCOTT@test01p> select y as y_new_parse1, count(*) from t2 group by y; Y_NEW_PARSE1 COUNT(*) ------------ ---------- 1 10333 6 10000 2 10333 4 10000 5 10000 8 10000 3 10000 7 10000 9 10000 0 10333 10 rows selected. SCOTT@test01p> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID bns44pywqdv33, child number 0 ------------------------------------- select y as y_new_parse1, count(*) from t2 group by y Plan hash value: 496717744 ---------------------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | ---------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 3 (100)| | | 1 | MAT_VIEW REWRITE ACCESS FULL| MV_NEW | 10 | 60 | 3 (0)| 00:00:01 | ---------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$E1B4E35D / MV_NEW@SEL$DB93197A Note ----- - Warning: basic plan statistics not available. These are only collected when: * hint 'gather_plan_statistics' is used for the statement or * parameter 'statistics_level' is set to 'ALL', at session or system level 24 rows selected. --//刷新后不再访问mv log. --//修改为1分钟刷新1次. SCOTT@test01p> alter materialized view mv_new refresh start with sysdate next sysdate + interval '1' minute; Materialized view altered. SCOTT@test01p> delete from t2 where y=0 and rownum<=333; 333 rows deleted. SCOTT@test01p> commit ; Commit complete. --//第一次看结合mv log,执行计划不再贴出. --//等上一段时间.执行计划就仅仅访问物化视图了. SCOTT@test01p> select * from user_mviews where MVIEW_NAME='MV_NEW' 2 @ prxx_win ============================== OWNER : SCOTT MVIEW_NAME : MV_NEW CONTAINER_NAME : MV_NEW QUERY : select y , count(*) c1 from t2 group by y QUERY_LEN : 41 UPDATABLE : N UPDATE_LOG : MASTER_ROLLBACK_SEG : MASTER_LINK : REWRITE_ENABLED : Y REWRITE_CAPABILITY : GENERAL REFRESH_MODE : DEMAND REFRESH_METHOD : FAST BUILD_MODE : IMMEDIATE FAST_REFRESHABLE : DIRLOAD_DML LAST_REFRESH_TYPE : FAST LAST_REFRESH_DATE : 2023-02-24 22:15:31 LAST_REFRESH_END_TIME : 2023-02-24 22:15:31 STALENESS : FRESH AFTER_FAST_REFRESH : FRESH UNKNOWN_PREBUILT : N UNKNOWN_PLSQL_FUNC : N UNKNOWN_EXTERNAL_TABLE : N UNKNOWN_CONSIDER_FRESH : N UNKNOWN_IMPORT : N UNKNOWN_TRUSTED_FD : N COMPILE_STATE : VALID USE_NO_INDEX : N STALE_SINCE : NUM_PCT_TABLES : 0 NUM_FRESH_PCT_REGIONS : NUM_STALE_PCT_REGIONS : SEGMENT_CREATED : YES EVALUATION_EDITION : UNUSABLE_BEFORE : UNUSABLE_BEGINNING : DEFAULT_COLLATION : USING_NLS_COMP ON_QUERY_COMPUTATION : Y PL/SQL procedure successfully completed.
[20230225]12c Real-time materialized view 实时物化视图的应用.txt
来源:这里教程网
时间:2026-03-03 18:26:34
作者:
编辑推荐:
- [20230225]12c Real-time materialized view 实时物化视图的应用.txt03-03
- [20230226]探究v$session.SQL_EXEC_ID在共享池(windows).txt03-03
- [20230227]tuned-adm简单介绍.txt03-03
- [20230227][20230109]Oracle Global Temporary Table ORA-01555 and Undo Retention.t03-03
- “奖牌”快跑,keep翻身?03-03
- [20230227]探究v$session.SQL_EXEC_ID在共享池(补充).txt03-03
- alter system set event和set events的区别03-03
- 通过集成行业的光纤认证功能实现光纤认证智能化03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- “奖牌”快跑,keep翻身?
“奖牌”快跑,keep翻身?
26-03-03 - 通过集成行业的光纤认证功能实现光纤认证智能化
通过集成行业的光纤认证功能实现光纤认证智能化
26-03-03 - 使用如今更智能的光纤测试工具执行专家级光纤测试和认证
使用如今更智能的光纤测试工具执行专家级光纤测试和认证
26-03-03 - 基于19C PDB创建方式汇总 标准化文档
基于19C PDB创建方式汇总 标准化文档
26-03-03 - VIAVI唯亚威WAN性能测试
VIAVI唯亚威WAN性能测试
26-03-03 - 利用云端来合理管理您的网线光纤测试认证项目解决方案
利用云端来合理管理您的网线光纤测试认证项目解决方案
26-03-03 - Oracle 19c安装GI(Standalone Oracle Restart)
- Oracle DB replay性能测试
Oracle DB replay性能测试
26-03-03 - 甲骨文与红帽扩大合作,将Red Hat Enterprise Linux引入 Oracle Cloud Infrastructure
- 甲骨文发布 2023 年云计算领域的五大预测
甲骨文发布 2023 年云计算领域的五大预测
26-03-03
