Oracle 11g Advanced Compression(上)

realkid4發表於2011-09-12

 

隨著海量資料時代的到來,TBEB級別的資料庫已經出現在很多企業系統中。相對幾何級別增長的資料量,儲存似乎是一個水漲船高不能填滿的空洞。資料表級別的壓縮,是一定程度上緩解海量資料儲存的一個解決方案。

 

Oracle的產品發展歷程中,資料表壓縮compress技術,一直是一個不斷提高和進化的方面。在Oracle 11g中,Advanced Compression技術的推出,就是Oracle壓縮技術成熟的重要標誌。

 

1Oracle Compression壓縮

 

簡單的說,Oracle壓縮採用的是“重複值消除”(Eliminating Duplicate Values)演算法。在資料庫塊級別,Oracle將壓縮資料儲存在資料塊block中,解壓資料使用的所有資訊也都儲存在各自的資料塊內。如果存在資料行或者資料列重複的情況,只在塊頭儲存一次。這些只儲存一次的資料,稱為“symbol table for that block”(該資料塊的符號表)。每個資料行如果使用這些符號表重複資料,只需要儲存一個符號表記錄的“short reference”。

 

Compression型別上,Oracle根據資料表的操作型別,提供兩種型別的壓縮:

 

ü        Compress for direct_load operation:直接路徑壓縮,也是預設的壓縮方式。該選項適合於Data warehouse型別系統,該型別系統沒有很頻繁的DML操作,資料載入方式也大都是使用批次載入;

ü        Compress for all operation:是Advanced Compression的一個特點。通常的壓縮技術對於DML操作的影響是巨大的。Advanced Compression的這個選擇型別,就是為OLTP系統準備。該選項為所有的DML操作開啟了壓縮功能;

 

 

2Advanced Compression適應範圍

 

Oracle 11gAdvaced Compression元件適應範圍較廣,幾乎涉及到所有空間儲存物件。

 

ü        OLTP資料表壓縮

 

Oracle最早從9i版本中,提供了壓縮compression功能。早期的compression允許資料表在進行批次載入操作(bulk load operation)是對資料進行壓縮,比如direct path loadsql loader)、create table as select…操作(CTAS)。這種方式適應資料倉儲(Data warehouse)型別系統。

 

Advanced Compression技術元件提供了對各種型別操作進行壓縮的技術,包括了常規的DML insertupdate操作。具體包括下列操作:

 

1)        直接路徑載入,如sql loader

2)        Create table xxx as select xx操作(CTAS);

3)        並行parallel(或者序列使用append提示的插入)語句;

4)        單行或者多行插入;

5)        單行或者多行更新;

 

在使用一些資料管理語句,如move操作的時候,在執行階段就會對資料表加以exclusive級別資料鎖,禁止進行DML操作。操作結束時,資料表還是能夠保證壓縮狀態。

 

對壓縮資料表,進行DML操作的效能損耗可以做到最小。這也是Advanced Compression最大特色。

 

ü        Secure File壓縮和消重複(Compression and DeDuplication

 

Secure File Deduplication是用於消除重複Secur File資料的智慧化技術。Oracle可以將重複的多份Secure File資料只儲存一份,其他儲存都是對該檔案的一個映象引用。這樣做就可以大大減少空間佔用。

 

ü        Data Dump資料泵壓縮

 

資料泵data dumpOracle 10g推出的替代原來imp/exp工具的高效能資料備份還原工具。使用資料泵將資料export匯出的時候,data dump comprssion就將資料表壓縮後儲存在DMP檔案中。在匯入的時候,資料泵會自動將壓縮的表資料進行解壓。

 

ü        RMAN壓縮

 

RMANOracle主推的備份還原工具在寫入磁碟disk或者磁帶tape之前,就已經是壓縮過的備份資料。在進行還原操作的時候,是不要進行顯示的解壓工作。這樣對於儲存的完全、增量備份集合set來說,是非常好的優質特性。

 

ü        DataGuard Network Compress

 

DataGuardOracle HAHigh Availability)的重要組成部分。Primary DatabaseStandby Database之間,透過網路建立實時連線。Primary Database的任何資料變化,都會以redo log的方式持續傳入到standby database上,進行apply應用過程。最終實現一致性。

 

使用Oracle Advanced Compression技術,可以對網路中傳輸的redo data進行壓縮,從而減少redo gap。最終讓standby database可以更快的進行同步,實現HA目標。

 

 

最後特別說一下關於Advanced Compression lisence問題,在11g之前使用Compress是不需要單獨的許可費用的。從11g開始,Advanced Compression需要單獨許可使用,額外進行收費。

 

下面我們透過一系列實驗來演示table compression的使用。

 

3、實驗環境準備

 

首先我們準備實驗環境,構建一個相對較大的資料表。

 

 

SQL> select * from v$version;

 

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE     11.2.0.1.0       Production

 

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 – Production

 

SQL> select * from v$option where parameter='Advanced Compression';

 

PARAMETER            VALUE

-------------------- ----------------------------------------------------------------

Advanced Compression TRUE

 

 

構建資料表t_ori,其中包括21萬餘條資料。

 

 

SQL> create table t_ori as select * from dba_objects;

Table created

 

SQL> select count(*) from t_ori;

  COUNT(*)

----------

    217731

 

SQL> exec dbms_stats.gather_table_stats(user,'T_ORI',cascade => true);

PL/SQL procedure successfully completed

 

 

從資料字典中,我們可以清晰的看到資料表空間分配。

 

 

SQL> select segment_name, count(*) extents, sum(blocks) blocks,sum(bytes)/1024/1024 MBs from dba_extents where wner='SYS' and segment_name='T_ORI' group by segment_name;

 

SEGMENT_NAME            EXTENTS     BLOCKS        MBS

-------------------- ---------- ---------- ----------

T_ORI                        40       3200         25

 

 

SQL> SELECT table_name, compression, compress_for FROM dba_tables where table_name='T_ORI';

 

TABLE_NAME                     COMPRESSION COMPRESS_FOR

------------------------------ ----------- ------------

T_ORI                          DISABLED   

 

 

4Compress For Direct_Load Operation

 

首先我們使用compress常規選項。

 

 

SQL> create table t_compress compress as select * from t_ori where 1=0;

 

Table created

 

SQL> SELECT table_name, compression, compress_for FROM dba_tables where table_name in ('T_ORI','T_COMPRESS');

 

TABLE_NAME                     COMPRESSION COMPRESS_FOR

------------------------------ ----------- ------------

T_ORI                          DISABLED   

T_COMPRESS                     ENABLED     BASIC

 

 

在建立資料表時,使用compress子句,就可以建立出具有壓縮功能的資料表。從資料字典看,T_COMPRESS開啟了壓縮功能,是Basic型別。

 

Compress對應的就是compress for direct_load operations壓縮型別。使用傳統的壓縮方式,適合data warehouse型別。

 

 

SQL> create table t_compdir compress for direct_load operations as select * from t_ori;

 

Table created

 

Executed in 0.829 seconds

 

 

SQL> SELECT table_name, compression, compress_for FROM dba_tables where table_name in ('T_ORI','T_COMPRESS', 'T_COMPDIR');

 

TABLE_NAME                     COMPRESSION COMPRESS_FOR

------------------------------ ----------- ------------

T_COMPDIR                      ENABLED     BASIC

T_ORI                          DISABLED   

T_COMPRESS                     ENABLED     BASIC

 

 

如果對資料表使用append方式新增資料,是使用direct load載入資料。

 

 

SQL> insert /*+append */into t_compress select * from t_ori;

217731 rows inserted

 

Executed in 0.563 seconds

 

SQL> commit;

Commit complete

 

Executed in 0 seconds

 

SQL> select segment_name, count(*) extents, sum(blocks) blocks,sum(bytes)/1024/1024 MBs from dba_extents where wner='SYS' and segment_name in ('T_ORI','T_COMPRESS','T_COMPDIR') group by segment_name;

 

SEGMENT_NAME            EXTENTS     BLOCKS        MBS

-------------------- ---------- ---------- ----------

T_COMPDIR                    22        896          7

T_COMPRESS                   37       2816         22

T_ORI                        40       3200         25

 

Executed in 0.078 seconds

 

 

上面實驗,我們可以對比出在進行不同操作時advanced compression的特性。對於compress for direct_load operations操作,使用CTAS操作的壓縮率較高。原資料表大小為25M,使用CTAS操作生成的資料表T_COMPDIR大小隻有7M,壓縮率僅三分之二。

 

但是,如果使用append提示進行插入操作,雖然也會有壓縮效果,但是壓縮效果遠不如CTAS,壓縮後的資料表為22M

 

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

相關文章