首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 表壓縮技術深度解析:Basic vs OLTP 壓縮實測與選型指南

     編輯:Oracle 資料庫相關知識

Oracle 壓縮技術包含 Basic(基本)、OLTP、Index(索引)、HCC(混合欄式)四大類。本文聚焦最常用的 Basic 與 OLTP 壓縮,透過 6 組對照實驗量化空間節省與 DML 行為差異,提供選型決策依據。

一、壓縮核心原理(以 OLTP 為例)

資料區塊內重複值被提取至區塊頭部的符號表,原位置以較短的符號取代。符號空間遠小於原值,故壓縮率取決於資料重複度。

  • 壓縮觸發為批次事件,非逐筆即時,故一般 DML 無效能影響。
  • 壓縮時 CPU 瞬間升高,平時為零,適合 OLTP 混合負載。
  • 額外效益:減少 I/O、網路傳輸、備份空間、QA 環境複製成本。

原始資料範例

區塊內部結構

壓縮前後區塊對比

二、Basic 壓縮實驗與結果分析

6 組測試場景(5 萬筆測試資料)

編號操作語法關鍵字
1Baseline CTASCREATE TABLE t1 AS SELECT ...
2CTAS + Basic 壓縮CREATE TABLE t2 COMPRESS BASIC AS SELECT ...
3建壓縮表 + 一般 INSERTCREATE TABLE t3 COMPRESS BASIC ...; INSERT INTO t3 SELECT ...
4建壓縮表 + Direct-path INSERTCREATE TABLE t4 COMPRESS BASIC ...; INSERT /*+APPEND*/ INTO t4 SELECT ...
5CTAS 無壓縮 → ALTER TABLE COMPRESSCREATE TABLE t5 AS SELECT ...; ALTER TABLE t5 COMPRESS BASIC;
6CTAS 無壓縮 → MOVE COMPRESSCREATE TABLE t6 AS SELECT ...; ALTER TABLE t6 MOVE COMPRESS BASIC;

空間佔用統計(區塊數 / KB)

表名BlocksPCT_FREECOMPRESSIONCOMPRESS_FORSegment KB
T1 (Baseline)66610DISABLED-6144
T2 (CTAS Basic)2040ENABLEDBASIC2048
T3 (一般 INSERT)6220ENABLEDBASIC5120
T4 (Direct-path INSERT)2040ENABLEDBASIC2048
T5 (ALTER COMPRESS)66610ENABLEDBASIC6144
T6 (MOVE COMPRESS)2040ENABLEDBASIC2048

Basic 壓縮關鍵結論

  • 有效壓縮操作:CTAS、Direct-path INSERT (/*+APPEND*/)、ALTER TABLE MOVE COMPRESS。
  • 不壓縮操作:一般 INSERT、ALTER TABLE COMPRESS(僅改屬性,不重組現有資料)。
  • PCT_FREE=0 表示 Oracle 假設壓縮表極少更新,適合歷史資料、資料倉儲、唯讀報表表。

三、OLTP 壓縮實驗與結果分析

6 組測試場景(語法將 BASIC 改為 OLTP)

對應表名 T21~T26,測試邏輯同 Basic。

空間佔用統計

表名BlocksPCT_FREECOMPRESSIONCOMPRESS_FOR
T21 (Baseline)66610DISABLED-
T22 (CTAS OLTP)22510ENABLEDOLTP
T23 (一般 INSERT)37010ENABLEDOLTP
T24 (Direct-path INSERT)22510ENABLEDOLTP
T25 (ALTER COMPRESS)66610ENABLEDOLTP
T26 (MOVE COMPRESS)22510ENABLEDOLTP

OLTP 壓縮關鍵特性

  • 支援一般 DML 壓縮:T23 一般 INSERT 後區塊數 370,介於 Baseline(666) 與全壓縮(225) 之間,證實寫入時會壓縮。
  • 機制:新資料寫入時不立即壓縮,待區塊達到閾值(約滿)觸發批次壓縮,同一區塊可能多次壓縮。
  • PCT_FREE=10 保留更新空間,適合低頻更新的 OLTP 表、歷史分區。
  • 壓縮率略低於 Basic(225 vs 204 區塊),換取 DML 相容性。

OLTP 壓縮觸發機制示意

四、既有表轉為壓縮表的三種方法對照

方法語法現有資料壓縮後續 DML 壓縮鎖定行為索引影響適用場景
1. ALTER TABLE COMPRESSALTER TABLE t COMPRESS FOR OLTP;否是短暫排他鎖無僅需未來資料壓縮,歷史資料不壓
2. Online RedefinitionDBMS_REDEFINITION是是線上,短暫鎖定全域索引需重建7x24 不停機,大表轉換
3. ALTER TABLE MOVE COMPRESSALTER TABLE t MOVE COMPRESS FOR OLTP;是是排他鎖 (X),阻塞 DML索引失效需重建可接受停機窗口,欲變更表空間

五、選型決策樹

  1. 資料極少更新(歷史、日誌、歸檔)→ Basic 壓縮(空間最省)。
  2. 資料偶爾更新/插入(緩慢變維、參考表)→ OLTP 壓縮。
  3. 資料高頻 DML(核心交易表)→ 不建議壓縮,CPU 換空間不划算。
  4. 需不停機轉換大表 → DBMS_REDEFINITION。
  5. Exadata/Engineered Systems → 評估 HCC (QUERY LOW/ARCHIVE HIGH)。

六、監控與維護建議

  • 定期查詢 DBA_TABLES.COMPRESSION、COMPRESS_FOR 確認屬性生效。
  • 監控 V$SEGMENT_STATISTICS 中 logical reads vs physical reads 評估 I/O 降低幅度。
  • OLTP 表關注 PCT_FREE 與行遷移,必要時 ALTER TABLE ... MOVE 整理。
  • 備份策略調整:壓縮表備份更快、更小,可縮短備份窗口。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved