インデックスによる高速化
データベース上のテーブル検索速度を向上させる重要な機能の一つとしてインデックスがあります。単一行検索やフィルタリング、グループ化のような処理に対しては非常に効果が高いですが、Greenplum DBでもBツリーインデックス、ビットマップインデックスといった形式をサポートしています。
インデックスはRDBの性能改善のための大変ポピュラーなテクニックであり、業務ロジックに合わせてインデックス設計をとことんまで突き詰めていっている現場も少なくないでしょう。しかしながら、インデックスに代表されるチューニングはどちらかというと労働集約的な作業であることに加え、データや業務ロジックが変われば再設計を求められるという側面もあります。
幸いにもGreenplum DBのようなMPP RDBMSにおいては、サーバを追加することにより性能を比較的容易に向上させることが可能です。インデックスによるピンポイントの性能向上は活用しつつも、複雑な適用は控えて変更に対して柔軟なシステムの設計を考慮することが今後は重要になってくるのではないでしょうか。
マルチレベルテーブルパーティショニングによるI/O削減
大量のデータを1つのテーブルに格納するケースの多いデータウェアハウスシステムにおいては、データベースのテーブルパーティションの機能も性能向上の観点で重要です。巨大なテーブルを日付や値の範囲で小さい単位に分割することにより、不要なディスクアクセスを削減することができます。
Greenplum DBではマルチレベルのテーブルパーティションに対応していますが、これは前述のハッシュ分散キーによるセグメントサーバ間でのデータ分割と合わせて効率的なディスクアクセスを実現します。例えば、1年分のデータを含むテーブルが月単位でパーティションが設定されている場合、各セグメントサーバはそれぞれ月単位に分割されたテーブルを持っています。10月のデータだけが必要なクエリがやってきた場合、各セグメントは10月分だけをスキャンすればよいため、大幅にI/Oアクセスを削減して素早いレスポンスを返すことができるようになります。
次回は、Greenplum DBの大きな特徴の一つである高速データローディングのしくみと、効率的な並列実行を可能にするクエリオプティマイザ、データフローエンジンについて詳細をご説明したいと思います。