mysql中物化视图的快速刷新测试与物化视图日志分析

网友投稿 626 2023-12-24

mysql中物化视图的快速刷新测试与物化视图日志分析

本篇内容介绍了“mysql中物化视图的快速刷新测试与物化视图日志分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

mysql中物化视图的快速刷新测试与物化视图日志分析

一、物化视图日志的介绍

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中物化视图的快速刷新测试与物化视图日志分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:vuex一般用在什么地方?
下一篇:vue添加属性(vue新增属性功能)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~