[Database] What’s the Difference, and When to Use, the Various Types of Data Compression

原文はこちら。
https://blogs.oracle.com/dbstorage/what%E2%80%99s-the-difference%2c-and-when-to-use%2c-the-various-types-of-data-compression

このエントリでは、種々のデータ圧縮方式について説明し、その違いと利用に適した状況をお伝えします。

このエントリ以前にこのトピックに触れましたが、先頃Oracle Databaseのドキュメントで下表を見かけたので、この情報を踏まえて、皆様に情報をお伝えしたいと考えています。

Data Compression Methods

Oracle® Database管理者ガイド 12cリリース2 (12.2)
表圧縮方法
http://docs.oracle.com/cd/E82638_01/ADMIN/managing-tables.htm#GUID-ED833867-4B7F-442E-A70C-9C19DAA8F445__BABEEFHI
Oracle® Database Administrator’s Guide 12c Release 2 (12.2)
Table Compression Methods
http://docs.oracle.com/database/122/ADMIN/managing-tables.htm#GUID-ED833867-4B7F-442E-A70C-9C19DAA8F445__BABEEFHI


Basic Table Compression(基本表圧縮)

Basic Table Compressionに詳しくない場合、おさえておくべき重要な点は、データ圧縮機能が無料で利用でき、Oracle Database Enterprise Editionに含まれている、という点です。10年以上前、Oracle Database 9i Release 2でBasic Table Compressionが導入されました。ただこの機能では、バルク・ロード操作を使用してロードされたデータは圧縮されますが、DML操作(INSERTまたはUPDATE)によって追加/変更されるデータは圧縮されません。そのため、Basic Table Compressionを使っている表やパーティション上でINSERTやUPDATEを実行している場合、変更内容を圧縮するには、その表やパーティションを再圧縮する必要があります。

USAGE:

Basic Table CompressionはOLTPアプリケーション向きではありません。その代わり、データをバルクロード操作でロードし、ほとんど(もしくは全く)変更されないような、専ら読み取りのみのデータウェアハウスアプリケーションに最適です。

Advanced Row Compression(高度な行圧縮)

Oracle Database 11g Release 1でOLTP Table Compression、Oracle Database 12cでAdvanced Row Compression(高度な行圧縮)と呼ばれる機能が導入されました。Advanced Row Compressionは、Basic Table Compressionと同じアルゴリズムを使用するAdvanced Compressionのデータ圧縮機能ですが、Advanced Row CompressionではINSERTやUPDATEなどの従来のDMLを含むすべてのタイプのデータ操作操作中にデータ圧縮を維持するという点がBasic Table Compressionと異なります。

Advanced Row Compressionでは、複数の列にまたがってもデータベースブロック内の重複値を排除するように設計された圧縮アルゴリズムを使用します。 特定の環境で達成される圧縮率(Basic Table Compressionの場合も同様です)は、圧縮対象のデータ、具体的にはデータのカーディナリティに依存します。一般に、Advanced Row Compression(Basic Table Compressionでも同様の圧縮率です)を使用することで、2倍から4倍の圧縮率でストレージ使用量を減らすことが期待できます。つまり、データが圧縮されていない場合、使用する領域は、圧縮されたデータの容量の2〜4倍になります。

USAGE

Advanced Row Compressionは、OLTPおよびデータウェアハウスアプリケーションの両方を対象にしています。

Hybrid Columnar Compression(ハイブリッド列圧縮)

Basic Table CompressionやAdvanced Row Compressionとは異なり、OracleのHybrid Columnar Compressionテクノロジーでは、行と列の両方のメソッドを組み合わせてデータを格納します。このハイブリッドアプローチによって、純粋な列形式のパフォーマンス不足を回避しつつ、Columnar Storageの圧縮の利点を達成します。圧縮単位(CU)と呼ばれる論理構造を使用して、ハイブリッド列圧縮された一連の行(a set of hybrid columnar compressed rows)を格納します。データがロードされると、一連の行の列の値がグループ化され、圧縮されます。一連の行の列データが圧縮された後、圧縮単位に格納されます。Hybrid Columnar Compressionでストレージを最大限に節約するためには、データウェアハウスのバルクロード(ダイレクトパス)の技術を使用して、データをロードする必要があります。よく使われるバルクロードの操作の例には以下のようなものがあります。
  • APPENDヒント句を使ったInsert文
  • パラレルDML
  • ダイレクトパスSQL*Loader
  • Create Table as Select(CTAS)
一般に、Hybrid Columnar Compressionを使うと、6倍から15倍以上の圧縮率でストレージの使用量を削減できます。

USAGE

Oracle Database 12c Release 2以前では、Hybrid Columnar Compression(HCC)はOLTPアプリケーションを対象にしておらず、そのかわりに、バルクロード操作を使ってデータをロードし、変更しない(もしくはほぼ変更しない)ようなデータウェアハウスアプリケーション(もっぱら読み取り)に最適なものでした。HCCで圧縮されたデータを、UPDATEやINSERTといった通常のデータ操作言語(DML)を使った操作で変更することはできますが、HCCで圧縮はDML操作をしない、もしくはほとんど操作しないアプリケーションに適しています。頻繁にUPDATEやINSERT操作を表やパーティションに対して予定している場合、そういったデータに対しては、Advanced Row Compression(Oracle Advanced Compressionの機能)が適しています。(Hybrid Columnar Compressionを利用している場合)DMLを使ってINSERT/UPDATEされたデータであれば通常、圧縮率が2倍から4倍にまで低下します。
12cR2では新たに、PL/SQLやOracle Call Interface(OCI)といったプログラムでAPPENDヒント句や配列の挿入を行わなくても、SQL INSERT ... SELECT文の新しいデータをHybrid Columnar Compressionで自動的に圧縮します。12cR2以前では、こうした操作でHybrid Columnar Compressionの圧縮レベルが低下しましたが、最新リリースでは、圧縮レベルは変わりません。
「Warehouse」と「Archive」圧縮の違いについては、下記のHybrid Columnar Compressionのホワイトペーパーで説明しています。

今のところ、データベースストレージ最適化については、後続のブログエントリで続けていきます。NuremburgでのDOAG 2017(2017年11月)に行く予定がある場合は、データと索引圧縮に関する私のセッションにお立ち寄りください。詳細は後ほどお知らせします。

More information:

Advanced Row Compressionのホワイトペーパー(英語)
http://www.oracle.com/technetwork/database/options/compression/advanced-compression-wp-12c-1896128.pdf
Hybrid Columnar Compressionのホワイトペーパー(英語)
http://www.oracle.com/technetwork/database/database-technologies/performance/hybridcolumnarcompression-oow2010-200703.pdf

0 件のコメント:

コメントを投稿