(57)【要約】【課題】  設定されたパーティション数に対し、範囲参照の並列アクセスの応答性能向上を目的とした適切なパーティション分割を行う。【解決手段】  本発明は、入力データのキー項目に対してキー値の小さい順に境界線を決定し、取得した所定の行数を所定のパーティション数初期値で除した行数に各パーティションを等分割し、分割された各パーティション分割候補を格納する。境界線を一つ削除し、パーティション分割を生成し、並列スキャン処理の並列数を取得し、スレッド毎に割り当てられたIOコストうちで最大値を入力データのクエリに対するＩＯコストとし、削除できる境界線がなくなるまで行い、パーティション分割候補からパーティション数が所定のパーティション数以下のコスト値が最小となるパーティション分割を出力する。【選択図】  図２
2013127750.tif 000002
【特許請求の範囲】
【請求項１】
並列処理のためのデータベースのテーブルのパーティション分割を行うパーティション分割装置であって、
境界線候補記憶手段を初期化し、入力データのキー項目に対してキー値の小さい順に境界線を決定し、取得した所定の行数を所定のパーティション数初期値で除した行数に各パーティションを等分割し、該境界線を該境界線候補記憶手段に格納し、分割された各パーティション分割候補をパーティション分割候補記憶手段に格納するパーティション初期分割手段と、
パーティション分割の境界線のうちで両端を除く境界線を一つ削除し、削除後のパーティション分割を生成し、並列スキャン処理の並列数を取得し、並列スキャン処理単位(スレッド)毎に割り当てられたIOコストうちで最大値を前記入力データのクエリに対するＩＯコストとし、前記パーティション分割候補記憶手段に格納する境界線削除手段と、
前記パーティション分割候補記憶手段のパーティション分割候補からパーティション数が所定のパーティション数以下のコスト値が最小となるパーティション分割を出力する評価手段と、
を有することを特徴とするパーティション分割装置。
【請求項２】
前記境界線削除手段は、
前記並列数の前記スレッドに対して、各パーティションをラウンドロビンで対応付ける
請求項１記載のパーティション分割装置。
【請求項３】
前記境界線削除手段は、
前記ＩＯコストを、与えられた行当りのインデックススキャンのＩＯコストとシーケンシャルスキャンのＩＯコストの比を用いて計算する
請求項１記載のパーティション分割装置。
【請求項４】
並列処理のためのデータベースのテーブルのパーティション分割を行うパーティション分割方法であって、
パーティション初期分割手段が、境界線候補記憶手段を初期化し、入力データのキー項目に対してキー値の小さい順に境界線を決定し、取得した所定の行数を所定のパーティション数初期値で除した行数に各パーティションを等分割し、該境界線を該境界線候補記憶手段に格納し、分割された各パーティション分割候補をパーティション分割候補記憶手段に格納するパーティション初期分割ステップと、
境界線削除手段が、パーティション分割の境界線のうちで両端を除く境界線を一つ削除し、削除後のパーティション分割を生成し、並列スキャン処理の並列数を取得し、並列スキャン処理単位(スレッド)毎に割り当てられたIOコストうちで最大値を前記入力データのクエリに対するＩＯコストとし、前記パーティション分割候補記憶手段に格納する処理を、削除できる境界線がなくなるまで行う境界線削除ステップと、
評価手段が、前記パーティション分割候補記憶手段のパーティション分割候補からパーティション数が所定のパーティション数以下のコスト値が最小となるパーティション分割を出力する評価ステップと、
を行うことを特徴とするパーティション分割方法。
【請求項５】
前記境界線削除ステップにおいて、
前記並列数の前記スレッドに対して、各パーティションをラウンドロビンで対応付ける
請求項４記載のパーティション分割方法。
【請求項６】
前記境界線削除ステップにおいて、
前記ＩＯコストを、与えられた行当りのインデックススキャンのＩＯコストとシーケンシャルスキャンのＩＯコストの比を用いて計算する
請求項４記載のパーティション分割方法。
【請求項７】
コンピュータを、
請求項１乃至３のいずれか１項に記載のパーティション分割装置の各手段として機能させるためのパーティション分割プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パーティション分割装置及び方法及びプログラムに係り、特に、データベースにおいて大きなデータサイズを扱う場合に、テーブルのパーティション分割を行うことで検索対象データを分散させ、並列に同時にアクセスを行うことで応答性能を向上させるためのテーブルのパーティション分割装置及び方法及びプログラムに関する。
【背景技術】
【０００２】
商用データベースでは与えられたワークロードに関するパーティションの分割の実施要否を推奨し、パフォーマンス向上を支援する機能やデータベース設計を支援する設計アドバイザが存在する（例えば、非特許文献１，２参照）。このようにデータサイズの大きなデータベース設計は大変複雑であり、それ自体ツールの支援やパーティション分割の自動実現方式が必要とされる分野である。
【０００３】
しかし、従来の技術は、パーティション分割の実施要否の推奨を行うものであって、具体的にパーティション分割を行うにあたり分割方法（境界線を指定する分割キーの値）の出力には対応していない。
【０００４】
これに対し、入力データの範囲参照検索区間の端点を抽出して境界線候補として境界線候補記憶手段に格納し、該境界線候補とデータアクセスに要するIOコストをゼロとしたパーティション分割を生成し、範囲参照検索区間の両端を除く境界線を一つ削除し、削除後のパーティション分割を生成する。そして、境界線削除後のIOコスト増分値を計算し、パーティション分割候補のパーティション数が所定の数Ｎ以下で、かつ、IOコスト増分値が最小となるパーティション分割候補をパーティション分割の結果として出力する範囲参照検索が考えられる。しかし、並列アクセスを考慮に入れていないため、並列アクセスの応答性能向上を目的としたパーティション分割技術としては効果を望むことができない。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Oracle Databaseパフォーマンス・チューニング・ガイド11gリリース（11.1） 18 SQLアクセス・アドバイザhttp://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E0574302/advisor.htm
【非特許文献２】DB2 V8.2 設計アドバイザの使用パート2:データウェアハウスを設計するのに有効なヘルプ情報http://www-06.ibm.com/jp/domino01/mkt/dminfo.nsf/499721c3388537bd49256b1a001aab28/4925722f004efcee492570d4005a65ef/$FILE/Using%20the%20DB2%20V8.pdf
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記の範囲参照検索において、テーブルのパーティション分割を行い並列アクセスを実行するにあたり、応答時間は複数の並列アクセス処理単位（以下、「スレッド」と記す）の中で応答時間が最大となるスレッドの応答時間のみにより決まるため、もし検索対象データが各パーティションに均等に分配されていなければ、並列アクセスの効果を享受することができない。具体的には、並列アクセス数（典型的にはＣＰＵコア数に等しい）を、例えば4とした場合、いくら3スレッドの応答時間を小さくしても残り1スレッドの応答時間が変わらなければ、系全体の応答性能は変わらない。
【０００７】
並列アクセスの応答性能向上を目的としたパーティション分割方式を検討するにあたり、検索対象データを各パーティションに分散配置し、並列に同時にアクセスを行った場合に応答時間が最大となるスレッドの応答時間を小さく抑えることで系全体の応答性能向上を図ることができる。そこで各スレッドが分担するＩＯコストが均等になるように検索対象データを各スレッドに分配する。そこで、並列アクセス数（例えば並列アクセス数を４とする）に対し、パーティション数(例えばパーティション数を１２とする)の各パーティションに対し、各スレッドが担当するアクセス先パーティションをラウンドロビンにより対応付け（実際には並列アクセスのアクセス先を決める処理は並列アクセス処理の実装に依存する）、各スレッドが扱うＩＯコストが均等になるように検索対象データの各パーティションへの分配を行う。この例を図１に示す。同図では、並列アクセス数が設定値（例えば、４、ＣＰＵコア数）、並列アクセス単位（以下「スレッド」と記す）のアクセス先パーティションへの対応付けをラウンドロビンにより決める場合を示す。図１では、スレッドｉをパーティション（i mod 4）に対応付ける例を示すが、実際には並列アクセスの実装に依存する。ここでＩＯコストは全てのパーティション、ワークロード内の全てのクエリからの寄与の和として定義する。ワークロード内のクエリＱに対するパーティションｉのＩＯコストをXjとした場合、系のコストは、
ΣQmax (X0+X4+X8+…，X1+X5+X9+…，X2+X6+X10+…，X3+X7+X11+…)
となる。ただし、Xi=min[(1+p)×パーティションｉの対象行数、パーティションｉ全行数]であり、１＋pは、インデクススキャンの1行あたりIOコスト／シーケンススキャンの1行当りのIOコストである。各パーティションにおいては、インデックススキャンまたはシーケンシャルスキャンのうちでＩＯコストの小さい方を選択する。行数見積もりは行数分布のヒストグラムから線形補間で行う。
【０００８】
上記のように、各スレッドが扱うIOコストが均等になるような分配方法のひとつは各行を各パーティションとして細分し、パーティション数を最大にすることである。しかし、その一方で、パーティション数を増大させすぎると、アクセス先のパーティションを決定する処理やパーティションごとの固有処理で必要なオーバヘッドが無視できない程大きくなるため適当といえない。結果的には応答性能向上を目的としたパーティション分割ではパーティション数はある有限な値を取らざるを得ない。
【０００９】
本発明は、上記の点に鑑みなされたもので、設定されたパーティション数に対し、範囲参照の並列アクセスの応答性能向上を目的とした適切なパーティション分割が可能なパーティション分割装置及び方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記の課題を解決するため、本発明（請求項１）は、並列処理のためのデータベースのテーブルのパーティション分割を行うパーティション分割装置であって、
境界線候補記憶手段を初期化し、入力データのキー項目に対してキー値の小さい順に境界線を決定し、取得した所定の行数を所定のパーティション数初期値で除した行数に各パーティションを等分割し、該境界線を該境界線候補記憶手段に格納し、分割された各パーティション分割候補をパーティション分割候補記憶手段に格納するパーティション初期分割手段と、
パーティション分割の境界線のうちで両端を除く境界線を一つ削除し、削除後のパーティション分割を生成し、並列スキャン処理の並列数を取得し、並列スキャン処理単位(スレッド)毎に割り当てられたIOコストうちで最大値を前記入力データのクエリに対するＩＯコストとし、前記パーティション分割候補記憶手段に格納する境界線削除手段と、
前記パーティション分割候補記憶手段のパーティション分割候補からパーティション数が所定のパーティション数以下のコスト値が最小となるパーティション分割を出力する評価手段と、を有する。
【００１１】
また、本発明（請求項２）は、前記境界線削除手段において、前記並列数の前記スレッドに対して、各パーティションをラウンドロビンで対応付ける。
【００１２】
また、本発明（請求項３）は、前記境界線削除手段において、前記ＩＯコストを、与えられた行当りのインデックススキャンのＩＯコストとシーケンシャルスキャンのＩＯコストの比を用いて計算する。
【発明の効果】
【００１３】
本発明によれば、入力データを利用し、与えられたワークロードに対して並列アクセスにおけるアクセスコストが各スレッドへより均等に分配されるようにパーティション分割を行うことで範囲参照検索の並列アクセスの応答性能向上を図ることができる。また、各スレッドのアクセスコストの分配が均等となるような適切なパーティション分割の分割方法（境界線を指定する分割キー値）を出力するアドバイザを実現できる。
【図面の簡単な説明】
【００１４】
【図１】ＩＯコストの定義を示す図である。
【図２】本発明の一実施の形態におけるパーティション分割装置の構成図である。
【図３】本発明の一実施の形態における入力データのフォーマットである。
【図４】本発明の一実施の形態におけるヒストグラム記憶部のフォーマットである。
【図５】本発明の一実施の形態におけるパーティション数記憶部の例である。
【図６】本発明の一実施の形態におけるＩＯコスト比記憶部の例である。
【図７】本発明の一実施の形態における並列数設定値記憶部の例である。
【図８】本発明の一実施の形態におけるパーティション数初期値記憶部の例である。
【図９】本発明の一実施の形態における境界線候補記憶部の例（境界線候補数が３の場合）である。
【図１０】本発明の一実施の形態におけるパーティション分割候補記憶部の例である。
【図１１】本発明の一実施の形態におけるパーティション分割装置の全体動作のフローチャートである。
【図１２】本発明の一実施の形態におけるパーティション分割初期生成を示す図である。
【図１３】本発明の一実施の形態におけるパーティション分割の結果出力例である。
【図１４】本発明の一実施の形態におけるＩＯコスト値の計算例である。
【図１５】本発明の一実施の形態における個々の範囲参照検索に対する個別のＩＯコスト値算出例である。
【図１６】本発明の一実施の形態における行数見積もり方法の例である。
【図１７】本発明の一実施の形態における図１１のＳ１３０のパーティション分割の初期生成処理のフローチャートである。
【図１８】本発明の一実施の形態における図１１のＳ１６０の詳細フローチャートである。
【図１９】本発明の一実施の形態における図１８のＳ３５０の詳細フローチャートである。
【図２０】本発明の一実施の形態における出力結果をテーブル定義として利用する例である。
【発明を実施するための形態】
【００１５】
以下図面と共に、本発明の実施の形態を説明する。
【００１６】
まず、本発明の概要を説明する。
【００１７】
以下に、本発明を具体的に説明する。
【００１８】
図２は、本発明の一実施の形態におけるパーティション分割装置の構成を示す。
【００１９】
同図に示すパーティション分割装置は、入力データ記憶部１、パーティション分割処理部２、出力データ記憶部３、境界線候補記憶部４、パーティション分割候補記憶部５、パーティション数記憶部６、ＩＯコスト比設定値記憶部７、ヒストグラム記憶部８、並列数設定値記憶部９、パーティション数初期値記憶部１０から構成される。
【００２０】
なお、同図では、入力データ記憶部１、出力データ記憶部３、境界線候補記憶部４、パーティション分割候補記憶部５、パーティション数記憶部６、ＩＯコスト比設定値記憶部７、ヒストグラム記憶部８、並列数設定値記憶部９、パーティション数初期値記憶部１０が、それぞれ異なる記憶媒体に格納されるように示されているが、この例に限定されることなく、個々の記憶媒体または、データベース等の複数の種類のデータを格納する記憶媒体に格納してもよい。
【００２１】
パーティション分割処理部２は、ＣＰＵで動作する処理部であり、データバスにより上記の記憶部と接続されている。
【００２２】
図３は、本発明の一実施の形態における入力データのフォーマットを示す。入力データは、クエリ名、分割キー名、範囲参照検索区間開始値、範囲参照検索区間終了値を含む。同図に示すように入力データは、分割キーの取り得る範囲（定義域）も登録する。当該入力データは入力されると入力データ記憶部１に格納される。
【００２３】
図４は、本発明の一実施の形態におけるヒストグラム記憶部のフォーマットであり、ヒストグラム記憶部８は、分割キー名、開始値、終了値、行数を格納する。
【００２４】
図５は、本発明の一実施の形態におけるパーティション数記憶部の例であり、パーティション記憶部６には、予めパーティション数設定値Nが格納される。
【００２５】
図６は、本発明の一実施の形態におけるＩＯコスト比記憶部の例であり、ＩＯコスト比記憶部７には、運用者により設定された行当りのインデックススキャンのＩＯコストとシーケンシャルスキャンのＩＯコストの比が格納されている。例えば、図１１のステップ１００のＩＯコスト比p(設定値)を保持する。例えば、ｐ＝2000の場合は、「2000」を保持する。
【００２６】
上記のパーティション数記憶部６とＩＯコスト比設定値記憶部７のデータは、パーティション分割処理部２によるＩＯコスト増分値の計算に利用される。
【００２７】
図７は、本発明の一実施の形態における並列数設定値記憶部の例であり、予め並列数が格納される。
【００２８】
図８は、本発明の一実施の形態におけるパーティション数初期値記憶部の例であり、分割キーごとにパーティション数の初期値が格納される。
【００２９】
図９は、本発明の一実施の形態における境界線候補記憶部の例であり、境界線候補数が３の場合を示している。分割キーの追加、削除は分割キー値が昇順を保つような位置への挿入、削除により行う。
【００３０】
図１０は、本発明の一実施の形態におけるパーティション分割候補記憶部の例であり、同図（ａ）は、初期生成時の例を示し、同図（ｂ）は初期生成時以外の例を示す。同図（ａ）において、分割キー１の境界線数を３、分割キー２の境界線数３とすると、パーティション数は、（３−１）×（３−１）＝４となる。
【００３１】
上記の構成における装置の動作を説明する。
【００３２】
図１１は、本発明の一実施の形態におけるパーティション分割装置の全体動作のフローチャートである。以下では、すでに入力データが入力され、入力データ記憶部１に格納されているものとする。
【００３３】
ステップ１００）  パーティション分割処理部２は、ＩＯコスト比設定値記憶部７からＩＯコスト比ｐを取得する。
【００３４】
ステップ１１０）  パーティション分割処理部２は、パーティション数記憶部６からパーティション数Nを取得する。
【００３５】
ステップ１２０）  パーティション分割処理部２は、並列数設定値記憶部９から並列数を取得する。
【００３６】
ステップ１２５）  パーティション分割処理部２は、パーティション数初期値記憶部１０からパーティション数の初期値を取得する。
【００３７】
ステップ１３０）  パーティション分割処理部２は、パーティション分割の初期生成を行う。
【００３８】
パーティション分割を行うにあたり、まず、パーティションの初期生成として検索対象データの行数が均等なパーティション分割（初期生成のパーティション分割数は設定値とする)を生成する。この例を図１２に示す。同図に示すパーティション分割初期生成の例では、分割キーの定義域を分割数がパーティション数初期値（設定値、例えば、１０）となるように行数で等分割したパーティション分割を初期候補とする。
【００３９】
パーティションの分割を行うにあたり、図３に示す入力データを入力データ記憶部１から読み込み、当該入力データを元に最も細分化されたパーティション分割を生成し、境界線候補記憶部４に格納する。具体的には、図９に示すように、入力データの範囲参照検索範囲の端点（開始値、終了値）を全て使用し、これを境界線としたパーティション分割を得る。これにより、図１０（ａ）に示すような分割キー境界候補が得られる。同図の例において、「分割キー１」の境界線数を３、「分割キー２」の境界線数を３とすると、パーティション数＝（３−１）×（３−１）＝４となる。
【００４０】
ステップ１４０）  パーティション分割処理部２は、図１０に示すように分割キーの集合をパーティション分割候補としてパーティション分割候補記憶部５に格納する。なお、パーティション数は図１０から導出可能である。
【００４１】
ステップ１５０）  パーティション分割処理部２は、削除できる境界線が存在するかを判定する。なお、定義域の両端は削除不可である。具体的には、パーティション数＞設定値Ｎであれば存在すると判定し、ステップ１６０に移行し、パーティション数≦設定値Ｎの場合は存在しないと判定し、ステップ１７０に移行する。
【００４２】
ステップ１６０）  ステップ１５０で削除できる境界線があると判断された場合は、境界線数を１減少させた場合のパーティション分割を取得し、パーティション分割候補記憶部５に格納し、ステップ１４０に戻る。詳細な処理については図１８で後述する。
【００４３】
ステップ１７０）  パーティション分割処理部２は、上記で境界線を削除したことにより、アクセス範囲が大きくなり、パーティション分割を生成し、ＩＯコスト増分値を計算し、パーティション分割候補からパーティション数≦Ｎを満たすＩＯコスト値が最小となるパーティション分割を出力データ記憶部３に出力する。入力データに対するパーティション分割の結果は図１３のように出力される。
【００４４】
次に、上記のステップ１３０のパーティション分割の初期生成処理について説明する。
【００４５】
図１７は、本発明の一実施の形態における図１１のステップ１３０のパーティション分割の初期生成処理のフローチャートである。
【００４６】
ステップ２００）  パーティション分割処理部２は、境界線候補記憶部４の境界線候補を初期化する。
【００４７】
ステップ２１０）  ヒストグラム記憶部８からヒストグラムを読み出して全行数を取得する。
【００４８】
ステップ２２０）  パーティション分割候補記憶部５のパーティション数初期値から１行読み出す。
【００４９】
ステップ２３０）  ステップ２１０で取得した全行数とステップ２２０で読み出したパーティション数初期値より
全行数÷パーティション数初期値
の計算を行う。
【００５０】
ステップ２４０）キー項目に対してキー値の小さい方から順に境界線を決定し、ステップ２３０で計算した行数に各パーティションを等分割する。
【００５１】
ステップ２５０）  ステップ２４０で等分割されたパーティションを境界線候補記憶部４に保存する。パーティションの分割を行うにあたり、図３に示す入力データを入力データ記憶部１から読み込み、当該入力データを元に最も細分化されたパーティション分割を生成し、分割キー値の集合を境界線候補として境界線候補記憶部４に格納する。具体的には、図９に示すように、入力データの範囲参照検索範囲の端点（開始値、終了値）を全て使用し、これを境界線としたパーティション分割を得る。これにより、図１０（ａ）に示すような分割キー境界候補が得られる。同図の例において、「分割キー１」の境界線数を３、「分割キー２」の境界線数を３とすると、パーティション数＝（３−１）×（３−１）＝４となる。
【００５２】
ステップ２６０）  読み出していないパーティション数初期値がある場合には、ステップ２２０に戻る。全て読み出している場合は処理を終了する。
【００５３】
次に、図１１のステップ１６０の境界線数を１減少させた場合のパーティション分割の取得処理について説明する。
【００５４】
図１８は、本発明の一実施の形態における図１１のステップ１６０の詳細フローチャートである。
【００５５】
ステップ３００）  境界線数Ｍが入力されると、パーティション分割処理部２は、一つ削除できる境界線がある場合に、パーティション分割候補記憶部５に一つの境界線を削除した後の境界線数Ｍと記述し、パーティション分割候補記憶部５の境界線数Ｍのパーティション分割候補を初期化する。
【００５６】
ステップ３１０）  パーティション分割候補記憶部５の境界線数Ｍ＋１のパーティション分割候補からＩＯコストが最小となるパーティション分割を一つ選択する。
【００５７】
ステップ３１５）  選択したパーティション分割のパーティション数が、パーティション数記憶部６から取得したパーティション数N以下（選択したパーティション分割のパーティション数≦Ｎ）であればステップ３９５に移行する。そうでない場合はステップ３２０に移行する。
【００５８】
ステップ３２０）  パーティション分割候補記憶部５のパーティション分割候補の中で一つ境界線（ただし、定義域の両端は対象外）を選択する。
【００５９】
ステップ３３０）  メモリ（図示せず）のＩＯコスト値を０に初期化する。
【００６０】
ステップ３４０）  入力データ記憶部１から入力データを１行読み出して、範囲参照検索区間を取り出す。
【００６１】
ステップ３５０）  入力データの範囲参照検索に対するＩＯコストを計算し、メモリ（図示せず）のＩＯコスト値に加算する。詳細は図１９で後述する。
【００６２】
ステップ３７０）  入力データ記憶部１から読み出していないデータがある場合はステップ３４０に移行する。
【００６３】
ステップ３８０）  パーティション分割候補記憶部５にパーティション分割候補を追加保存する。
【００６４】
ステップ３９０）  パーティション分割候補記憶部５に選択していない境界線が存在する場合は、ステップ３２０に移行する。
【００６５】
ステップ３９５）  パーティション分割候補記憶部５にＩＯコストの最小の選択していない境界線数Ｍ＋１のパーティション分割候補が存在する場合には、ステップ３１０に移行する。
【００６６】
次に、上記の図１８のステップ３５０の入力データの範囲参照検索に対するＩＯコストを計算処理について説明する。
【００６７】
図１９は、本発明の一実施の形態における図１８のステップ３５０の詳細フローチャートである。
【００６８】
ステップ４００）  パーティション分割処理部２は、図１に示すように、並列数の各スレッドに対し、各パーティションをラウンドロビンで対応付ける。図１に示す並列アクセス数が設定値（例えば、４、CPUコア数）とし、スレッドのアクセスをパーティションへの対応付けをラウンドロビンにより決める場合は、
max(X0+X4+X8+…，X1+X5+X9+…，X2+X6+X10+…，X3+X7+X11＋…)
とする。ただし、Xi=min[(1+p)×パーティションｉの対象行数、パーティションｉ全行数]である。
【００６９】
ステップ４１０）  以下のＩＯコスト計算を行い、ＩＯコスト値に加算する。
【００７０】
ＩＯコスト値の計算にあたっては、図１４に示すように、入力データの全ての範囲参照検索及び全てのパーティションにわたるＩＯコスト値からの寄与の総和とする。ここで、個々の範囲参照検索に対する個別のＩＯコスト値は、図１５に示すように、行数の見積もり値及び行当りのインデックススキャンのＩＯコストとシーケンシャルスキャンのＩＯコストの比（運用者によるシステム設定値)を元に計算した、以下のうちでいずれか小さい値を元に算出する。
【００７１】
・行当りのインデックススキャンのＩＯコスト×対象行数；
・行当りのシーケンシャルスキャンのＩＯコスト×パーティション内の行数；
ただし、行数については、ヒストグラム記憶部８の図４に示すヒストグラムを使用した見積もり値を使用する。図１６の例では、分割キー１の値が１５と４０の間の行数を見積もるには、線形補間を用いて、
見積もり行数＝FLOOR  [25×(20−15)/(20−10)+10×(40−20)/(50−20)]
ただし、FLOORは小数点以下切り下げを表す。こうしてパーティション分割をパーティション数が設定値以下に達するか、または、削除できる境界線がなくなるまで生成し（定義域の両端は削除負荷）、ＩＯコスト値を評価した後、パーティション分割候補のうち、パーティション数が設定値以下の条件を満たすＩＯコスト値が最小となるパーティション分割の結果を出力する。
【００７２】
上記のフローチャートに示したように、パーティション分割を行うにあたり、まず、パーティションの初期生成として検索対象データの行数が均等なパーティション分割（初期生成のパーティション分割数は設定値とする)を生成する。この例を図１２に示す。同図に示すパーティション分割初期生成の例では、分割キーの定義域を分割数がパーティション数初期値となるように行数で等分割したパーティション分割を初期候補とする。
【００７３】
次に、一つの境界線を削除する処理を実行し、全ての可能なパーティション分割を生成し、ＩＯコストを計算する。この処理では、各候補にわたって、ＩＯコスト値を評価する。ＩＯコスト値の計算にあたっては、図１４に示すように、入力データの全ての範囲参照検索及び全てのパーティションにわたるＩＯコスト値からの寄与の総和とする。こうしてパーティション分割をパーティション数が設定値以下に達するか、または、削除できる境界線がなくなるまで生成し（定義域の両端は削除不可）、ＩＯコスト値を評価した後、パーティション分割候補のうち、パーティション数が設定値以下の条件を満たすＩＯコスト値が最小となるパーティション分割の結果を出力する。
【００７４】
上述した処理の結果は、例えば、パーティション分割のテーブルの定義のために用いることができる。図２０に、出力結果をテーブル定義として利用する例を示す。同図は、パーティション数３の場合を示している。テーブルpartitionをテーブルpartition0、partition1、partition2にパーティション分割する分割キーkeyの値の定義域０＜key≦10に対して境界線をkey=2.5とした例である。
【００７５】
上記のように、入力データのワークロードに対して、並列アクセスにおけるアクセスコストが各スレッドへより均等に分配されるようにラウンドロビン方式でパーティションを割り当て、割り当てられたパーティションの大きさから各スレッドのＩＯコストを算出し、各スレッドのＩＯコストの最大値を系全体のコストとし、当該系全体のコストが最小となるように、パーティション分割候補のうち、パーティション数が所定の数以下の条件を満たすＩＯコストが最小となるパーティション分割を行う。これは、全体の応答時間はアクセスコストが最大のスレッドに対する応答時間のみにより決まるため、スレッドへのアクセスコストの分配が不均等なパーティション分割は応答性能向上を目的とした適切なパーティション分割とはいえないからである。
【００７６】
なお、上記の実施の形態におけるパーティション分割処理部２の処理をプログラムとして構築し、パーティション分割装置として利用されるコンピュータにインストールして実行させる、または、ネットワークを介して流通させることが可能である。
【００７７】
本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において、種々変更・応用が可能である。
【符号の説明】
【００７８】
１  入力データ記憶部
２  パーティション分割処理部
３  出力データ記憶部
４  境界線候補記憶部
５  パーティション分割候補記憶部
６  パーティション数記憶部
７  ＩＯコスト比設定値記憶部
８  ヒストグラム記憶部
９  並列数設定値記憶部
１０  パーティション数初期値記憶部
【図１】
2013127750.tif 000003
【図２】
2013127750.tif 000004
【図３】
2013127750.tif 000005
【図４】
2013127750.tif 000006
【図５】
2013127750.tif 000007
【図６】
2013127750.tif 000008
【図７】
2013127750.tif 000009
【図８】
2013127750.tif 000010
【図９】
2013127750.tif 000011
【図１０】
2013127750.tif 000012
【図１１】
2013127750.tif 000013
【図１２】
2013127750.tif 000014
【図１３】
2013127750.tif 000015
【図１４】
2013127750.tif 000016
【図１５】
2013127750.tif 000017
【図１６】
2013127750.tif 000018
【図１７】
2013127750.tif 000019
【図１８】
2013127750.tif 000020
【図１９】
2013127750.tif 000021
【図２０】
2013127750.tif 000022