【COMPRESS】11g中表壓縮技術的長足進步

secooler發表於2010-05-05
曾經在《【表壓縮】使用表壓縮技術將表所佔用空間降低到最小》(http://space.itpub.net/519536/viewspace-621766)這篇文章中談到了10g中有關表壓縮的一些知識。此文將給大家介紹一下11g在表壓縮領域的長足發展。

Oracle在11g之前版本中的壓縮技術應用場景非常的有限,多用於只讀的資料庫倉庫中,要求表中的資料是隻讀的。因此在OLTP的環境中很少見到資料壓縮技術的身影。
11g推出的資料壓縮技術已經打破了這個束縛,Oracle透過只儲存在儲存壓縮後設資料的特定表(符號表,symbol table)中有重複的列值的單個副本,消除了塊中所有重複的值。得益於此項技術,訪問壓縮資料時的I/O也大大減少,進而,壓縮技術延展到了OLTP領域。

透過實驗,簡單窺探一下此技術的使用方法。

1.確認作業系統版本
sys@secooler> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit 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

2.建立大約128M的測試用普通表T
sec@secooler> create table t as select * from all_objects;

Table created.

sec@secooler> insert into t select * from t;

71327 rows created.

sec@secooler> /

142654 rows created.

sec@secooler> /

285308 rows created.

sec@secooler> commit;

Commit complete.

sec@secooler> insert into t select * from t;

570616 rows created.

sec@secooler> commit;

Commit complete.

sec@secooler> select segment_name,bytes/1024/1024 MB from user_segments;

SEGMENT_NAME                           MB
------------------------------ ----------
T                                     128

3.使用“compress for all operations”選項建立壓縮表
sec@secooler> create table T_COM_FOR_ALL_OPERATIONS compress for all operations as select * from T;

Table created.

4.普通表與壓縮表佔用空間大小比較
sec@secooler> select segment_name,bytes/1024/1024 MB from user_segments;

SEGMENT_NAME                           MB
------------------------------ ----------
T                                     128
T_COM_FOR_ALL_OPERATIONS               44

可見,幾乎節省了2/3的儲存空間,現在的大小(44M)是原先大小(128M)的1/3!
的確是一個非常大的壓縮比例。Oracle號稱可以達到“3.5:1”的壓縮比。

5.嘗試更新操作,看一下更新的效率
sec@secooler> set timing on
sec@secooler> update t set object_id=1;

1141232 rows updated.

Elapsed: 00:00:58.59
sec@secooler> update t_com_for_all_operations set object_id=1;

1141232 rows updated.

Elapsed: 00:00:47.61
sec@secooler> select segment_name,bytes/1024/1024 MB from user_segments;

SEGMENT_NAME                           MB
------------------------------ ----------
T                                     128
T_COM_FOR_ALL_OPERATIONS               45

Elapsed: 00:00:00.70

因為操作的資料集合較小,所以資料的總體更新時間有所下降。

6.Oracle 11R2中關於compress引數語法定義



{ COMPRESS [ FOR { ALL | DIRECT_LOAD } OPERATIONS ]
| NOCOMPRESS
}

7.小結
因為11g中提供的壓縮技術可以直接讀取壓縮資料而無需解壓縮資料塊,因此在OLTP環境下使用這樣的壓縮技術基本上沒有效能上的損失。
技術永遠向前發展,贊。


Good luck.

secooler
10.05.05

-- The End --

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

相關文章