Search

検証プロジェクト すぐに役立つ! IT課題解決のためのヒント
第4回 パーティショニングの効果

今回は、大規模データベースの管理手法の1つであるOracle Partitioning機能の特長、およびその導入効果についてご紹介します。

データ量の増加にともない、データ管理の煩雑さやパフォーマンスの劣化などが問題となります。これらの対応策としてもっともポピュラーなのが、「データ分割」手法である「Oracle Partitioning(以下、パーティショニング)」です。しかし、「パーティショニングは『Oracle Database 10g Enterprise Edition』のオプションだから、気軽に試せないし効果も見積もれない」と考える方も多いのではないでしょうか。

そこで今回は、パーティショニングの特長やレスポンス改善効果、および陥りがちなリスクについて、当社で検証した結果を交えながらご紹介します。

パーティショニングの特長と効果

パーティショニングは「Oracle8 Database」から提供されている機能で、アプリケーションからは1つの表として認識されるデータを、データの特性や利用目的に合わせ、期間や範囲などの論理単位で分割し管理する手法です。おもなメリットには、管理性や可用性の向上、レスポンスの向上が挙げられます。とくにレスポンスの向上は、問い合わせの処理を高速化できるという点で、パーティショニングのメリットのなかでももっともよく知られているといえるでしょう。

たとえば、5年分の売上データを1つの表で管理していたとします。売上データを売上年や月ごとにパーティション化しておけば、特定年月のデータ(必要なパーティション)を参照するだけでよくなるため、集計作業などのレスポンスが向上します。この特定のパーティションだけを参照する機能を「パーティション・プルーニング」と呼びます(図1)。パーティション・プルーニングはOracleデータベースが自動的に実施するため、既存のアプリケーションから発行するSQLをパーティション用に修正する必要はありません。

図1 パーティション・プルーニングのイメージ
図1 パーティション・プルーニングのイメージ

パーティショニングによる
レスポンス改善効果

図2は、売上実績表の更新日列でパーティショニングした場合としなかった場合に分け、表のデータ量増加にともない、特定商品の月集計検索を実施した際のレスポンス時間およびアクセスしたデータブロック数がどのように推移していくかを表したものです。データ量が増えるにつれて非パーティション表のレスポンス時間は増大していくのに対し、パーティション表ではパーティション・プルーニングによりアクセスするデータブロック数が抑えられるため、検索レスポンスの劣化を防いでいることがわかります。

図2 パーティションの有無によるレスポンス時間とアクセスブロック数の比較
図2 パーティションの有無によるレスポンス時間とアクセスブロック数の比較

また、パーティション・プルーニングによりアクセスするデータブロック数が減少するため、バッファ・キャッシュ・ヒット率などのパフォーマンス情報にその効果が表れます。Statspackレポートで非パーティション環境とパーティション環境を比べると、図3のようにバッファ・キャッシュ・ヒット率の差を確認できます。

図3 バッファ・キャッシュ・ヒット率の推移
図3 バッファ・キャッシュ・ヒット率の推移

パーティショニング細分化によるリスク

これまでの検証結果から、パーティション・プルーニングはパフォーマンス向上に有効であることが確認できました。それでは、パーティションは細分化するほどよいのでしょうか。

パーティション表へはコストベース・オプティマイザでアクセスするため、DBMS_STATによってその統計情報(行数、一意な値の数、最大値、最小値、値の分布など)を取得する必要があり、パーティション数が多くなるほど取得に時間を要することが確認できます(図4)。これは、パーティションの統計情報を集計する際に、すでに取得した各パーティション(サブ・パーティションを含む)の統計情報を参照する処理が繰り返し発生する可能性が高くなるためと思われます。

検証結果から考察すると、運用管理上、パーティションを細分化し過ぎることは避け、パーティション・プルーニングでディスクアクセスが発生しないサイズにデータを分割するのが目安になると思われます。

図4 パーティション数と統計情報の取得時間との関係
図4 パーティション数と統計情報の取得時間との関係

パーティショニングのその他のメリットや詳しい検証結果は下記Webサイトでご紹介していますので、あわせてご参照ください。

http://www.atmarkit.co.jp/fdb/index/subindex/orapart_subindex.html
http://perfopy.ashisuto.co.jp/samples/atmarkit/atmarkit_part_shorttime1.html

検証内容は、特定の環境における検証結果についての報告であり、
すべての環境において同様の動作を保証するものではありません。
お問い合わせ先
株式会社アシスト データベース事業部
TEL:03-5276-5861 FAX:03-5276-5869
E-mail:oracle_sal@ashisuto.co.jp
株式会社アシスト
データベース事業部 中村 真之