共计 2640 个字符,预计需要花费 7 分钟才能阅读完成。
本篇内容介绍了“mysql 中物化视图的快速刷新测试与物化视图日志分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、物化视图日志的介绍
1.1 物化视图快速刷新的原理:要先了解完全刷新的原理是先把物化视图的数据全部删除,然后再把基表的数据插入到物化视图中;但是当数据达到百万级别的数据时,如果源表更新了一条数据,完全刷新就得删除物化视图的所有数据再进行插入;
而快速刷新,会保留物化视图的数据,然后基表的所有数据的变更记录到物化视图日志中。这样如果源表数据还是百万级别,且这个时候更新了一条数据,物化视图刷新的过程中根据物化视图的日志,只要更新修改的那条特定记录,便可达到快速刷新的作用;
简单来讲,物化视图日志就是一个数据库引擎自动伟华的表,用来跟踪基表发生的变更;
1.2 物化视图的刷新方式:我们知道如果需要进行快速刷新,则需要建立物化视图日志。Oracle 物化视图日志根据不同物化视图的快速刷新的需要,可以建立为 ROWID 或 PRIMARY KEY 类型的。还可以选择是否包括 SEQUENCE、INCLUDING NEW VALUES 以及指定列的列表。
二、物化视图快速刷新的测试
2.1 创建一个基表
CREATE TABLE T_JOHN
(
NAME VARCHAR2(20 BYTE),
SALE VARCHAR2(20 BYTE),
)
TABLESPACE USERS
RESULT_CACHE (MODE DEFAULT)
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;
2.2 创建物化视图 MV_JOHN
CREATE MATERIALIZED VIEW MV_JOHN (NAME,SALE)
TABLESPACE USERS
PCTUSED 0
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
NOCACHE
LOGGING
NOCOMPRESS
NOPARALLEL
BUILD IMMEDIATE
USING INDEX
TABLESPACE USERS
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
REFRESH FAST ON DEMAND
WITH ROWID
AS
SELECT NAME,SALE
FROM T_JOHN;
REFRESH FAST ON DEMAND:在需要要的时候,进行快速刷新;
2.3 创建物化视图日志
CREATE MATERIALIZED VIEW LOG ON T_JOHN
TABLESPACE USERS
PCTUSED 0
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
NOCACHE
LOGGING
NOPARALLEL
WITH ROWID
EXCLUDING NEW VALUES;
WITH ROWID:通过 ROWID 的方式,刷新物化视图;
2.4 以上完成后, 便可以在基表上面进行数据的修改;
运行手工刷新后,可以查看物化视图的数据也更新了;
Begin
Dbms_mView.Refresh(MV_JOHN
End;
三、物化视图管理
3.1 ORACLE 提供了视图 USER_MVIEW_LOGS 可以查看,用户下物化视图的刷新情况
物化视图日志的名称为 MLOG$_后面跟基表的名称,如果表名的长度超过 20 位,则只取前 20 位,当截短后出现名称重复时,Oracle 会自动在物化视图日志名称后面加上数字作为序号。
3.2 MLOG$_T_WZQ
– 这是一个 primarykey 的物化视图日志:
SQL desc MLOG$_T_WZQ
Name Null? Type
————————————————- ————
GROUP_ID VARCHAR2(10)
PARENT_GROUP_ID VARCHAR2(10)
SNAPTIME$$ DATE
DMLTYPE$$ VARCHAR2(1)
OLD_NEW$$ VARCHAR2(1)
CHANGE_VECTOR$$ RAW(255)
XID$$ NUMBER
相关解释如下:
SNAPTIME$$:用于表示刷新时间。
DMLTYPE$$:用于表示 DML 操作类型,I 表示 INSERT,D 表示 DELETE,U 表示 UPDATE。
OLD_NEW$$:用于表示这个值是新值还是旧值。N(EW)表示新值,O(LD)表示旧值,U 表示 UPDATE 操作。
CHANGE_VECTOR$$:表示修改矢量,用来表示被修改的是哪个或哪几个字段。
当刷新完成后 MLOG$_T_WZQ 相应的日志也会被清除了, 因为这些日志已经没有保存的必要了
“mysql 中物化视图的快速刷新测试与物化视图日志分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!