物化檢視的快速重新整理測試與物化檢視日誌

wzq609發表於2014-11-12

前言:一般在建立物化檢視的時候,在資料量不大的時候,重新整理的方式都是採用完全重新整理的。隨著系統的使用一些物化檢視的源表的資料量在不斷的增長,原本採用完全方式幾秒就能重新整理完成的物化檢視,現在需要等待很久的時間才能重新整理完成。其實物化檢視從一開始就幫我們想好了解決方法:透過物化檢視日誌來實現物化檢視的快速重新整理;

 

一、物化檢視日誌的介紹

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相應的日誌也會被清除了,因為這些日誌已經沒有儲存的必要了;

 

四、總結:物化檢視是一把利器,在調優的過程中會經常用到,快速重新整理也只是物化檢視眾多功能中很小的一個,隨著業務場景的增加和資料量的增長相信用到物化檢視的地方也會越來越多;

 

*********************************************************************************************************************

本文作者:JOHN QQ:1916066696 (請備註資料庫)

ORACLE技術部落格:ORACLE 獵人筆記 http://blog.itpub.net/12679300/

請掃描加微訊號!

******************************************************************************************************************

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12679300/viewspace-1330064/,如需轉載,請註明出處,否則將追究法律責任。

相關文章