您好,登錄后才能下訂單哦!
本篇內容介紹了“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中物化視圖的快速刷新測試與物化視圖日志分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。