溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mysql中物化視圖的快速刷新測(cè)試與物化視圖日志分析

發(fā)布時(shí)間:2021-11-18 15:46:41 來(lái)源:億速云 閱讀:789 作者:iii 欄目:MySQL數(shù)據(jù)庫(kù)

本篇內(nèi)容介紹了“mysql中物化視圖的快速刷新測(cè)試與物化視圖日志分析”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、物化視圖日志的介紹

1.1 物化視圖快速刷新的原理:要先了解完全刷新的原理是先把物化視圖的數(shù)據(jù)全部刪除,然后再把基表的數(shù)據(jù)插入到物化視圖中;但是當(dāng)數(shù)據(jù)達(dá)到百萬(wàn)級(jí)別的數(shù)據(jù)時(shí),如果源表更新了一條數(shù)據(jù),完全刷新就得刪除物化視圖的所有數(shù)據(jù)再進(jìn)行插入;

而快速刷新,會(huì)保留物化視圖的數(shù)據(jù),然后基表的所有數(shù)據(jù)的變更記錄到物化視圖日志中。這樣如果源表數(shù)據(jù)還是百萬(wàn)級(jí)別,且這個(gè)時(shí)候更新了一條數(shù)據(jù),物化視圖刷新的過(guò)程中根據(jù)物化視圖的日志,只要更新修改的那條特定記錄,便可達(dá)到快速刷新的作用;

簡(jiǎn)單來(lái)講,物化視圖日志就是一個(gè)數(shù)據(jù)庫(kù)引擎自動(dòng)偉華的表,用來(lái)跟蹤基表發(fā)生的變更;

1.2 物化視圖的刷新方式:我們知道如果需要進(jìn)行快速刷新,則需要建立物化視圖日志。Oracle物化視圖日志根據(jù)不同物化視圖的快速刷新的需要,可以建立為ROWID或PRIMARY KEY類型的。還可以選擇是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。

二、物化視圖快速刷新的測(cè)試

2.1 創(chuàng)建一個(gè)基表

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 創(chuàng)建物化視圖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:在需要要的時(shí)候,進(jìn)行快速刷新;

2.3 創(chuàng)建物化視圖日志

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:通過(guò)ROWID的方式,刷新物化視圖;

2.4 以上完成后,便可以在基表上面進(jìn)行數(shù)據(jù)的修改;

運(yùn)行手工刷新后,可以查看物化視圖的數(shù)據(jù)也更新了;

Begin

    Dbms_mView.Refresh('MV_JOHN');

End;

三、物化視圖管理

3.1 ORACLE提供了視圖USER_MVIEW_LOGS可以查看,用戶下物化視圖的刷新情況

mysql中物化視圖的快速刷新測(cè)試與物化視圖日志分析

物化視圖日志的名稱為MLOG$_后面跟基表的名稱,如果表名的長(zhǎng)度超過(guò)20位,則只取前20位,當(dāng)截短后出現(xiàn)名稱重復(fù)時(shí),Oracle會(huì)自動(dòng)在物化視圖日志名稱后面加上數(shù)字作為序號(hào)。

3.2 MLOG$_T_WZQ

--這是一個(gè)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

相關(guān)解釋如下:

SNAPTIME$$:用于表示刷新時(shí)間。

DMLTYPE$$:用于表示DML操作類型,I表示INSERT,D表示DELETE,U表示UPDATE。
OLD_NEW$$:用于表示這個(gè)值是新值還是舊值。N(EW)表示新值,O(LD)表示舊值,U表示UPDATE操作。

CHANGE_VECTOR$$:表示修改矢量,用來(lái)表示被修改的是哪個(gè)或哪幾個(gè)字段。

mysql中物化視圖的快速刷新測(cè)試與物化視圖日志分析

 當(dāng)刷新完成后MLOG$_T_WZQ相應(yīng)的日志也會(huì)被清除了,因?yàn)檫@些日志已經(jīng)沒(méi)有保存的必要了

“mysql中物化視圖的快速刷新測(cè)試與物化視圖日志分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI