CodeZine(コードジン)

特集ページ一覧

大量データのアクセス範囲を限定する「パーティショニング」とは? 用途と注意点を解説

オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド 第3回

  • LINEで送る
  • このエントリーをはてなブックマークに追加

目次

複数の表を連結する

 パーティション・ビューは、列の定義が同じである複数の表それぞれにパーティション・キーになる列にCHECK制約で値の範囲を定義し、すべての表をUNION ALLで連結したビューを作成します。クエリーがパーティション・キー列を指定していると、その値の範囲を担当する表にのみアクセスするという仕組みです。

Oracle7 パーティション・ビュー
Oracle7 パーティション・ビュー

 パーティション・ビューを作成する工程は複数段階あるので少しだけ手間ですが、レンジ・パーティションを実現できるので一見するとこれでも十分よさそうな気がします。しかしこの(1)複数の表を連結する実装は大きな問題を持っています。表にアクセスするクエリーが1種類だけであれば、そのクエリーにパーティション・プルーニングがかかるようにパーティション・キー列を指定すればよいのですが、クエリーが1種類であるということはまずありません。さまざまな処理がデータにアクセスしに来ます。複数の表を連結する実装は、クエリーがパーティション・キー列を指定しない場合にパーティショニングしない表よりも探索時間が大きくなる場合があります。

 パーティション・プルーニングが効くのはクエリーがパーティション・キー列を指定していたときのみです。クエリーの検索条件に登場する列に必ずしもパーティション・キー列が含まれているとは限りません。また、クエリーのアクセス・パスが全表走査だけとは限りません。選択率の小さいクエリーの場合、索引経由のアクセスの方が高速になるのは第2回で解説したとおりです。

 パーティション・ビューで連結される各表にも索引を作成することができます。しかし、索引の内部実装は1つの索引が指せるポインタは1つの表に限定されます。表の更新が発生すると同期的に索引も更新しなければならないため、ほぼすべてのDBMSでこの暗黙の制限があります。そのためパーティション・ビューを構成する各表には各表のみをポイントする索引ならば作成することができます。このように表パーティションに閉じた索引をローカル・パーティション索引といいます。

 表パーティションを区別するための列がパーティション・キー列でした。そのため、クエリーの検索条件にパーティション・キー列が含まれている場合、アクセスするパーティションを特定することができます。索引も、特定された表パーティションのパーティション・キー列に作成されたローカル・パーティション索引にのみアクセスします。

 ここで、クエリーがパーティション・キー以外の列を指定している場合のアクセス・パスを考えます。

複数の表の集合でパーティショニングを実装
複数の表の集合でパーティショニングを実装

 クエリーがパーティション・キー列を指定していない場合、アクセスする表パーティションを特定することができません。そのため、クエリーの条件に合致するデータがどの表パーティションに存在するかが不明なので全パーティションにアクセスする必要があります。オンライン・トランザクション処理のようにごく短い処理時間が求められる場合、パーティショニングしたことでかえって性能が低下してしまいます。

 また、一意制約を付けることができる列が表のパーティション・キー列の制限を受けてしまうという問題もあります。ローカル・パーティション索引しか作成できないDBMSの場合「パーティション表のプライマリ・キーはパーティション・キー列を含めなければならない」という制限があります。これは、一般的に一意制約は索引によって実装されていますが、ローカル・パーティション索引しか作成できないと1つの表パーティション内の一意性しか保証できません。そのため、パーティション・キー列を含めることでデータが存在するパーティションを1つに特定できる必要があるためです。そのため真の制限は「パーティション表のローカル・パーティション索引での一意索引はパーティション・キー列を含めなければならない」となります[*2]。また、索引が正しく実装できないと、値の存在を確認する参照整合性制約(外部キー制約)も実装できません。

 このように、パーティション表の実装が不完全なDBMSでは索引に制限が出るため、トランザクション系の処理にパーティション表を適用することが不適切な場合があります。

[*2] MySQLやPostgreSQLでは寄稿時点(2021年7月)の最新バージョンでもこの制限があります。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:オラクル技術エキスパートが紹介する 開発者のためのデータベース完全ガイド

著者プロフィール

  • 日下部 明(日本オラクル株式会社)(クサカベ アキラ)

     日本オラクル株式会社でOracle Databaseを担当するエンジニア。主にOracle Real Application Clustersを中心とする高可用性構成や性能チューニングの問題解決およびコンサルティングに従事。著書に「これは使えるOracle新機能活用術」(翔泳社)。

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5