[Database] Oracle Database Compression Technologies

お客様のリクエストを反映して、Oracle Database 11gR2の最新のバージョンには、RACやシングルノード、Oracle Exadata Database Machine version v2およびx2で、何らかのデータ圧縮のオプションを利用できるようになっています。ご存知のように、IT部門にとって、運用中の本番環境のデータや、履歴データのデータウェアハウスやDSS(Decision Support System)のデータをメンテナンスするコストは増大しています。対して、古いデータを分析したり検索することはあらゆる企業にとって必須の要件でもあります。
OracleはInformation Companyとして、コスト削減しつつ、上記のようなデータへアクセスする際の性能を向上させるということを長年にわたって進めてきました。DSSのようなデータウェアハウスの圧縮にはじまり、今では運用中のトランザクション表やパーティショニングもOracle Databaseで可能になっています。2000年の早い時期に、あまりアクセスされないデータを低コストのストレージに移動するという要件を解決するとともに、Oracleは、お客様に対し、途切れない情報ライフサイクルを提示し始めました。

どのお客様も自社のデータベースのサイズが小さくできるなら大歓迎でしょ?
2007年、Oracle Database 11gR1とともに、Oracleは "Advanced Compression Option" をリリースしました。これはOLTPデータの圧縮だけでなく、バックアップ、つまり待機系DBのためのアーカイブログや、エクスポートしたダンプファイルの圧縮をも可能にしたものです。
600ギガバイトの本番データベースが、Advanced CompressionのOLTP表圧縮機能を使うと、250~300GBに減るのです。データの内容によりますが、この技術で、2倍から4倍の圧縮率が実現できます。

OLTP圧縮のメリットは?
  • 運用中のOLTPデータ量を削減できる
  • バックアップのデータ量を削減できる
  • 災害対策や待機系のデータベースサイズを小さくできる
  • エクスポートするダンプファイルを小さくできる
  • データブロックを読んでいるときのディスクI/Oを削減できる(読み出している際のオーバーヘッドがない)
  • アーカイブログをDisaster Recoveryサイトに配信する際のネットワークトラフィックを削減できる
ほとんどの場合、技術者は特に、性能面のオーバーヘッドに関する質問をしてきます。当然ながら、この質問は想定済みです。Oracleは、新しいバッチのアルゴリズムを開発し、OLTP圧縮されたテーブルへの書き込みの影響を最小限に抑えるようにしています。

OLTP圧縮表を作成する例
CREATE TABLE emp (
emp_id NUMBER,
first_name VARCHAR2(128),
last_name VARCHAR2(128) )
COMPRESS FOR ALL OPERATIONS;
履歴データはどうだろう?
特に、Oracle Exadata Database Machineソリューションにより、大規模サイズのデータを格納し、維持するという問題の解決の選択肢が増えています。従来からあるDSS型のデータウェアハウスの圧縮アルゴリズムに加えて、履歴データ用の比類のないExadataの圧縮技術があります。

DSS(意思決定支援システム)の表のための、伝統的な圧縮タイプの場合の構文を思い出してみましょう。
CREATE TABLE old_data  ... COMPRESS BASIC;
CREATE TABLE old_data ... COMPRESS;
COMPESSまたはCOMPRESS BASIC(Enterprise Editionの10gおよびそれ以降のバージョンで使用可能)で圧縮された表のデータブロックを圧縮し続けますが、新しいレコードやデータブロックを圧縮するため場合、以下のような方法でインサートする必要があります。

次のダイレクトパスinsertを使います。
  • ダイレクトパス SQL*Loader
  • CTAS - CREATE TABLE AS SELECT 文
  • パラレル INSERT 文
  • APPENDヒント句がついた、INSERT文
Oracle Databaseに組み込まれている基本的な圧縮方法が拡張されて、Oracle Advanced Compressionオプションや先に説明したOLTP圧縮のタイプになっています。

Oracle Exadataのユニークな機能の一つ、Hybrid Columnar Compression
11gR2で、Oracle Exadata上で実行するだけではなく、BASICとCOMPRESS FOR ALL(OLTP)のオプションに加えて、データ圧縮の新しい技術を用意しました。
Exadata Hybrid Columnar Compressionの詳細と利点を説明する前に、簡単に Exadata Hybrid Columnar Compressionのアプローチについてご紹介しましょう。
ご存知のように、Oracleは行形式でデータブロック内にデータを保持します。行のすべてのデータが連続して保存されているので、さまざまなデータ型が高圧縮率の限界まで隣同士に並びます。Hybrid Columnar Compressionテクノロジーにより、Oracleは同じデータブロックに別の行の同じ列の値を保持し始めました。

このアプローチには、巨大なテーブル内の単一の行または少数の行を読み込むという欠点があります。この性能問題を回避するため、Oracleは、新しい論理的な「Compression Unit(圧縮単位)」を使って、同じ行列を同じ圧縮単位のブロックに結合するようにしました。これにより、単一ブロックI/Oで行の全データを取得することができます。Exadata Hybrid Columnar Compressionには、2つの圧縮タイプがあります。一つは圧縮された表での性能を狙ったもの、もう一つは、可能な限り圧縮して、ストレージ容量を最大限節約することを狙ったものです。

このテクノロジーは、Warehouse Compression(ウェアハウス圧縮)、Archive Compression(アーカイブ圧縮)と呼ばれます。

Warehouse Compression(ウェアハウス圧縮)
  • 平均で10倍の圧縮率
  • スキャンI/Oが10分の1
  • クエリーのスピードを重視
Exadata Hybrid Columnar Compression / ウェアハウス圧縮の構文
CREATE TABLE emp (
emp_id NUMBER ,
first_name VARCHAR2(128) ,
last_name VARCHAR2(128) )
COMPRESS FOR QUERY [ LOW | HIGH ];
Archive Compression(アーカイブ圧縮)
  • 平均で15倍の圧縮率
  • コールド、履歴データ向け
  • データ圧縮を重視
Exadata Hybrid Columnar Compression / アーカイブ圧縮の構文
CREATE TABLE emp ( 
emp_id NUMBER ,
first_name VARCHAR2(128),
last_name VARCHAR2(128))
COMPRESS FOR ARCHIVE [ LOW | HIGH ];
Oracle Exadata Hybrid Columnar Compression という、このhybrid columnar compressionという新しい技術について解説している、フリップチャートの動画が参考になると思います。

これらのテクノロジーのキーポイント
  • Decompression of data with EHCC (Exadata Hybrid Columnar Compressionの略) を使ったデータの復元は、Exadataストレージセルにオフロードするので、CPUやメモリの観点で、データベースサーバのオーバーヘッドは最小になります。
  • クライアントが問い合わせた列と行だけがメモリ内に解凍されます。
  • OLTP圧縮は、Advanced Compressionオプションの一部ゆえ、Enterprise EditionとAdvanced Compressionオプションのライセンスが必要です。
  • Basic圧縮は、Enterprise Editionで無料で利用できます。
  • EHCCの機能は、Exadataで無料で利用できます。
ラージオブジェクト向けのキーポイント
11gR1以降では、 ( Oracle SecureFiles の) Secure Files形式でラージオブジェクト(画像、スプレッドシート、XMLファイルなど)を保存できるようになりました。

SecureFilesのベンチマークの結果によると、非構造化データをデータベース外部に保存せずに、安全で信頼性の高い、高い可用性に加えて、ファイルシステムよりも性能がいいOracle Database内に保存することができます。

SecureFilesは、Oracle Database 11gの新機能であり、それはStandard EditionとEnterprise Editionのライセンスで無料なので、古いBasicFileやとLOBをSECUREFILE形式で保存する意味が出てくるでしょう。

Oracle Database Enterprise Editionをお持ちで、加えてAdvanced Compressionオプションのライセンスをお持ちなら、SecureFilesを使って、ラージオブジェクトの重複を廃し、圧縮することができます。この機能を使えば、データ格納に必要なストレージを大幅に削減することができます。
CREATE TABLE t1 ( a CLOB)
LOB(a) STORE AS SECUREFILE (
COMPRESS HIGH
         CACHE
   );

CREATE TABLE t1 ( REGION VARCHAR2(20), a BLOB)
 LOB(a) STORE AS SECUREFILE (
        CACHE
     )
     PARTITION BY LIST (REGION) (
          PARTITION p1 VALUES ('x', 'y')
LOB(a) STORE AS SECUREFILE (
COMPRESS
                ),
          PARTITION p2 VALUES (DEFAULT)
     );

CREATE TABLE t1 ( a CLOB)
LOB(a) STORE AS SECUREFILE (
DEDUPLICATE
        CACHE
    );

原文はこちら。
http://blogs.oracle.com/imc/entry/oracle_database_compression_technologies

0 件のコメント:

コメントを投稿