Oracleデータベースでは、ストレージコスト削減やI/O効率の向上を目的として、表領域レベルでのデータ圧縮機能が提供されています。特にOracle Advanced Compressionライセンスを活用することで、OLTP処理向けの圧縮やアーカイブデータ向けの高度な圧縮が可能です。
この記事では、Oracleの表領域圧縮機能について、基本的な仕組みとOLTP圧縮・ARCHIVE圧縮の違い、適用方法や注意点を解説します。
Oracleにおける表領域圧縮とは
Oracleでは、表領域またはテーブル単位でデータの物理格納を圧縮し、ディスク使用量を削減する機能が提供されています。圧縮されたデータは、圧縮前と同様にSQLでアクセスできますが、内部的にはブロック単位で圧縮・伸張されて処理されます。
圧縮モードは主に次の2種類に分類されます。
- OLTP圧縮: 更新頻度の高い業務テーブル向け。Advanced Compressionオプションが必要。
- ARCHIVE圧縮: 読み取り専用に近い長期保存データ向け。最大限の圧縮率が得られる。
圧縮モードの違い
OLTP圧縮
OLTP圧縮は、トランザクション処理が多い表に対しても圧縮を適用できるように最適化されたモードです。更新やINSERT操作を考慮して圧縮されるため、性能劣化を最小限に抑えつつ圧縮効果を得ることができます。
特徴:
- 更新・挿入処理に対応
- データアクセス頻度が高いテーブルにも使用可
- Oracle Enterprise Edition + Advanced Compressionのライセンスが必要
ARCHIVE圧縮
ARCHIVE圧縮は、アクセス頻度が非常に低い履歴データやバックアップ目的のデータ向けです。最大限の圧縮率を実現する代わりに、アクセス時には伸張処理の負荷が大きくなります。
特徴:
- 読み取り専用のデータに最適
- 最も高い圧縮率を実現
- 再アクセス頻度が低いデータ領域での利用が推奨
表領域に圧縮を適用する方法
圧縮は表領域を作成する際、またはテーブルを作成/移動する際に指定できます。以下は表領域に圧縮属性を指定する例です。
CREATE TABLESPACE comp_tbs
DATAFILE '/u01/app/oracle/oradata/ORCL/comp01.dbf' SIZE 1G
DEFAULT COMPRESS FOR OLTP; -- OLTP圧縮を指定
テーブル作成時に直接圧縮を指定することも可能です。
-- OLTP圧縮
CREATE TABLE sales (
sale_id NUMBER,
amount NUMBER
)
TABLESPACE comp_tbs
COMPRESS FOR OLTP;
-- ARCHIVE圧縮
CREATE TABLE sales_archive (
sale_id NUMBER,
amount NUMBER
)
TABLESPACE comp_tbs
COMPRESS FOR ARCHIVE LOW;
ARCHIVE LOW
やARCHIVE HIGH
などの圧縮レベル指定も可能です。
既存テーブルに圧縮を適用する方法
既存のテーブルに対してはMOVE
やALTER TABLE ... COMPRESS
を利用して圧縮を適用します。
ALTER TABLE employees MOVE COMPRESS FOR OLTP;
圧縮後は、インデックスが無効になるため、再作成する必要があります。
圧縮の効果と注意点
圧縮によって期待できる効果は以下の通りです。
- ストレージ使用量の削減(30~70%程度)
- フルスキャン時のI/O削減
- バックアップサイズの削減
一方で、次の点に注意が必要です。
- 圧縮・伸張処理によりCPU使用率が上昇する可能性
- OLTP圧縮はライセンス対象機能であり、事前に確認が必要
- データのアクセス頻度に応じて適切な圧縮方式を選択すること
まとめ
Oracleの表領域圧縮機能は、適切に活用すればストレージ効率を大きく向上させる強力な手段です。特にOLTP圧縮とARCHIVE圧縮は用途が明確に分かれているため、業務データの特性を考慮して最適なモードを選びましょう。
圧縮の導入は、テスト環境で効果と影響を検証した上で段階的に進めることが推奨されます。