Exadata Hybrid Columnar Compression に関する検証 その1

<Exadata Hybrid Columnar Compression に関する検証 その1>
ペンネーム: ベロ

お久しぶりです。もう何年もメルマガを書くチャンスがなかったのですが、ようやく
メルマガを執筆することになりました。

最後に書いたのは10gリリース時だったような気がします。気づいたら11gR2の世の中に
なっていますね。
ということで、今最もホットな話題の一つ11gR2について検証してみたいと思います。

11gR2には様々な新機能や機能拡張がなされています。その中で(個人的に)ひときわ目を
引く機能としてExadata V2に搭載されたHybrid Columnar Compressionがあります。
昨今では、爆発的な情報量の増加に伴い格納するストレージのコスト増大、および、
それに比例するようにパフォーマンスの悪化が問題となっています。
11gR2ではExadata V2としてH/WとS/Wを一体化して、この問題への解決策を模索している
ように感じます。

そんなこんなで、今回はHybrid Columnar Compressionの機能を中心に検証を行っていき
たいと思います。

早速ですが、このHybrid Columnar Compressionとはいかなるものなのか?

何がHybridなの?
Columnarってなに?
でもCompressionなのでデータ圧縮する機能なんだよね?

と様々な疑問があります。

以下、Oracle社(US)に掲載されている Exadataの説明より

Exadata Hybrid Columnar Compression

The most advanced data compression technologies are included in Oracle Exadata Storage Servers. 
Oracle Exadata Hybrid Columnar Compression can, on average, reduce the size of Data Warehousing 
tables by 10x, and archive tables by 50x.
This offers significant savings on disk space for primary, standby and backup databases, and 
will improve the performance of Data Warehousing queries.

技術的な説明ではないのですが、Hybrid Columnar Compressionは従来のAcvanced
Compressionの機能拡張のようです。また、DWH系の圧縮では10倍程度、アーカイブ系の
圧縮では50倍程度の圧縮が見込める。さらに、データ圧縮によりQueryのパフォーマンス
が向上するとのことです。

では、まずは触ってみる。そして失敗を経験する、そこから本質を理解する。という
いつもながらのチャレンジャー精神で、Hybrid Columnar Compressionを検証してみる
ことにします。

今回、環境に使用した環境は以下の通りです。

OS : Redhat Linux AS 5.3 (x86)
Oracle : Oracle 11.2.0.1 32bit

Hybrid Columnar Compressionを実行してみる前に検証データの説明とSQLの構文だけ
さらっと押さえておきます。

[検証データに関して]
最初にnocompress_tableとし購買履歴のデータを準備します。このテーブルのサイズ
は以下の通りです。

SQL> col table_name for a30
SQL> select table_name,blocks,compression,compress_for from user_tables
 2 > where  table_name = 'NOCOMPRESS_TABLE';

TABLE_NAME                         BLOCKS COMPRESS COMPRESS_FOR
------------------------------ ---------- -------- ------------
NOCOMPRESS_TABLE                   170300 DISABLED

今回の環境はブロックサイズが8KBですので、テーブルのサイズとしては、約1.3GB程度
となります。

[SQLの構文に関して]
11gR2からサポートされている圧縮のタイプは4つ(従来のAdvanced Compressionの圧縮
タイプは2つ)になりました。
CREATE TABLE文のCOMPRESS FOR 句に以下の4つが指定可能になりました。合わせてQUERY
およびARCHIVEでは圧縮レベル(LOW/HIGH)が指定可能です。

  - BASIC
        従来のDIRECT_LOAD OPERATIONSに相当します。
  - OLTP
        従来のALL OPERATIONSに相当します。
  - QUERY
        Hybrid Columnar CompressionのQUERYタイプに相当します。圧縮レベルとして
        LOW、HIGHが選択可能です。
  - ARCHIVE
        Hybrid Columnar CompressionのARCHIVEタイプに相当します。圧縮レベルとし
        てLOW、HIGHが選択可能です。

今回は、Hybrid Columnar Compressionの検証なので、圧縮タイプはQUERYかARCHIVEが
検証対象となります。

では、Let’s Hybrid Columnar Compression!

SQL> create table query_low_compress_table compress for query low
                                           ^^^^^^^^^^^^^^^^^^^^^^
     from nocompress_table;

ORA-64307:
ハイブリッド・コラム圧縮は、Exadataストレージに存在する表領域でのみサポートされ
ています

あれれ。。。やっぱり、Exadataでないとサポートされていないようですね。。。

しかし、何とかして、Hybrid Columnar Compressionを試してみたいのが人情です。
Oracleの開発エンジニアだって、Exadata以外でこの機能のテストができないようでは、
非効率極りない。きっと、何か手があるに違いない。

というわけで、次回は、このエラーを何とか回避するところから始めたいと思います。