Oracle 11g Advanced Compression(上)
隨著海量資料時代的到來,TB和EB級別的資料庫已經出現在很多企業系統中。相對幾何級別增長的資料量,儲存似乎是一個水漲船高不能填滿的空洞。資料表級別的壓縮,是一定程度上緩解海量資料儲存的一個解決方案。
在Oracle的產品發展歷程中,資料表壓縮compress技術,一直是一個不斷提高和進化的方面。在Oracle 11g中,Advanced Compression技術的推出,就是Oracle壓縮技術成熟的重要標誌。
1、Oracle 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操作開啟了壓縮功能;
2、Advanced Compression適應範圍
Oracle 11g的Advaced Compression元件適應範圍較廣,幾乎涉及到所有空間儲存物件。
ü OLTP資料表壓縮
Oracle最早從9i版本中,提供了壓縮compression功能。早期的compression允許資料表在進行批次載入操作(bulk load operation)是對資料進行壓縮,比如direct path load(sql loader)、create table as select…操作(CTAS)。這種方式適應資料倉儲(Data warehouse)型別系統。
Advanced Compression技術元件提供了對各種型別操作進行壓縮的技術,包括了常規的DML insert和update操作。具體包括下列操作:
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 dump是Oracle 10g推出的替代原來imp/exp工具的高效能資料備份還原工具。使用資料泵將資料export匯出的時候,data dump comprssion就將資料表壓縮後儲存在DMP檔案中。在匯入的時候,資料泵會自動將壓縮的表資料進行解壓。
ü RMAN壓縮
RMAN是Oracle主推的備份還原工具在寫入磁碟disk或者磁帶tape之前,就已經是壓縮過的備份資料。在進行還原操作的時候,是不要進行顯示的解壓工作。這樣對於儲存的完全、增量備份集合set來說,是非常好的優質特性。
ü DataGuard Network Compress
DataGuard是Oracle HA(High Availability)的重要組成部分。Primary Database和Standby 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
4、Compress 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 11g Advanced Compression(下)Oracle
- Oracle Database Compression 2 - Advanced/OLTP CompressionOracleDatabase
- Advanced Index CompressionIndex
- Oracle Database Compression 1 - Basic CompressionOracleDatabase
- Oracle Database 11g 第2版中的 Oracle Advanced SecurityOracleDatabase
- Oracle Database Compression 3 - Hybrid Columnar CompressionOracleDatabase
- Oracle Advanced SecurityOracle
- zt:Different type of RMAN backup compression in 11G
- [20181127]12c Advanced Index Compression.txtIndex
- [20181127]12c Advanced Index Compression 2.txtIndex
- [20190311]12cR2 Advanced index compression.txtIndex
- Oracle Index Key Compression索引壓縮OracleIndex索引
- 在 Red Hat Advanced Server 4 上安裝 Oracle 10.2.0.1 RAC (zt)ServerOracle
- Oracle Advanced Security Frequently Asked QuestionsOracle
- Oracle Advanced Performance Tuning ScriptsOracleORM
- Solaris 10上安裝Oracle 11gOracle
- Oracle 11g DRCP配置與使用(上)Oracle
- Oracle Advanced Performance Tuning Scripts(轉)OracleORM
- 10G、11G expdp的compression引數的區別
- Unused Block Compression和Null Block CompressionBloCNull
- 聊聊Oracle 11g中的Reference Partition(上)Oracle
- 在oracle linux 5.6上安裝oracle 11g RACOracleLinux
- oracle10g,11g中的exp,expdp引數compress, compression完全不同的定義Oracle
- oracle 10g advanced replication of basic multimasterOracle 10gAST
- centos7.3上安裝oracle xe 11gCentOSOracle
- 【配置上線】Oracle靜默建庫 for 11gOracle
- 聊聊Oracle 11g的Snapshot Standby Database(上)OracleDatabase
- Oracle Hybrid Columnar Compression(HCC) 混合列壓縮Oracle
- Oracle 表壓縮(Table Compression)技術介紹Oracle
- Oracle OCP 1Z0-053(Rman Compression Algorithm)OracleGo
- 在RedHat Advanced Server4.0 update1上安裝Oracle 10g Release 2RedhatServerOracle 10g
- 簡化 Oracle Linux 6 上的 Oracle Database 11g 安裝OracleLinuxDatabase
- oracle 11g之在REDHAT5上的安裝OracleRedhat
- RHEL6 上安裝Oracle 11g軟體Oracle
- Oracle 高階佇列(AQ Advanced Queueing)Oracle佇列
- 【EXPDP】11g版本EXPDP 的COMPRESSION引數壓縮比堪比“gzip -9”
- 【OGG】Oracle GoldenGate 11g (二) GoldenGate 11g 單向同步配置 上OracleGo
- oracle 11g 之linux redhat 5.5上的安裝OracleLinuxRedhat