您好,登錄后才能下訂單哦!
本篇內(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可以查看,用戶下物化視圖的刷新情況
物化視圖日志的名稱為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è)字段。
當(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í)用文章!
免責(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)容。