Oracle ExadataによるDWH高速化
Oracle Exadata V2で高速化機能を強化
米国では先日、Oracle Database 11g Release 2(以下、11gR2)がリリースされ、ベース部分にこの11gR2を採用したモデルとして、Oracle Exadata V2も発表されました。
以下では、Oracle Exadata V2で追加された新機能のうち、高速化としてのポイントとなる機能について説明します。
■データの圧縮
近年、ディスクI/Oの高速化の手段として、読み書きするデータ自体を圧縮して小さくするという方法が、(データ圧縮/伸長の処理を行う)CPUの高性能化によって有効になってきました。
Oracle Database 11gR1では、オプションのAdvanced Compression Optionを使うことで、通常のINSERT、UPDATE、DELETEの処理においてデータ圧縮を行うことが可能となり、DWHに限らずOLTP(オンライントランザクション処理)でもデータ容量削減とパフォーマンス向上のメリットを享受できるようになりました。
一方、DWHでの検索処理を考えてみると、ほとんどの場合、多数の列データのうちのほんの一部の列のみにアクセスするクエリです。よって、列ベースのアクセスが可能になれば、データとしてはFull Scanになってしまう処理でも、不要な列データへのディスクI/Oを無くし、必要な列データのみのアクセスとすることができます。
Oracle Exadata V2でこれを可能とした機能が、「Exadata Hybrid Columnar Compression」です。これまで行ベースでブロックに格納してきたデータを、列ごとに格納し、圧縮を行います。
表は数千行ごとにCompression Unitと呼ばれる単位で管理され、Compression Unitには列単位でデータが格納&圧縮されます。この圧縮には2種類の圧縮モード、すなわちDWHアクセス時のスピードを重視した「Query Mode」と、データの長期保存向けにストレージ容量の圧縮率を重視した「Archival Mode」があり、目的に応じて、どちらかの圧縮モードを選択します。
実際のデータにも依存しますが、列単位の格納によって、同一値のデータが含まれる可能性も高くなり、より高い圧縮率も期待できるというわけです。
このようなカラム指向のDWHの代表ソフトウエア製品としては、他社製品ではSybase IQが挙げられます。
ストレージ・ユニット側でもディスクI/O負荷を削減
■ストレージ・インデックス
Oracle Exadata V2の高速化機能の1つ、「Exadata Storage Index」は、ストレージ・ユニット「Sun Oracle Exadata Storage Server」のメモリ内で、表データの格納データサマリー情報を管理します。このインデックスの活用により、不要なディスク領域をReadすることがなくなり、より高速にフルスキャンを実行できます。
具体的には、初回のSmartScan実行時に、1MBごとにインデックスを1エントリ作成し、単位領域内の対象列データの最小値と最大値を格納します。
2回目のSmartScan実行時に同一列でのフィルタリングを行う場合、メモリ上のインデックス(最大値~最小値)にwhere句条件がマッチしなければ、ディスクのその部分を排除し、ディスクI/Oを削減します(図2)。
同様の機能は、米Netezzaのゾーンマップ機能など他社DWHアプライアンスにも実装されており、大量データのアクセスに対して有効な機能と言われています。
■Exadata Smart Flash Cache
Oracle Exadata V2の高速化機能の1つ、「Exadata Smart Flash Cache」は、第1回(http://thinkit.jp/article/1047/1/)でも取り上げたSSD(Solid State Drive)をStorage ServerにおけるストレージのReadキャッシュとしての活用する機能です。これにより、ランダム読み出し時のI/Oのボトルネックを解消します。
ほとんどのデータを、低コストなストレージに格納しておき、利用頻度の高いデータのみを透過的にFlashメモリに移動します。このキャッシング・アルゴリズムは、現時点では公開されておりませんが、Read効率を求めないREDOログ・ファイルなどに対しては、データのキャッシングは行いません。キャッシュすべきオブジェクトをアプリケーションから明示的に設定することも可能です。
また、Oracle Exadataでは、ディスクコントローラの制限を避けるために、ディスクコントローラ経由でストレージ・インタフェースに接続するタイプのFlashメモリではなく、I/Oバスに装着するカード形状のFlashメモリとすることで、高帯域幅、低レイテンシなインターコネクトでの接続を可能としています。