(57)【要約】【課題】実行プラン案それ自体の実行コストが最適であれば、選択される実行プランの実行コストがより最適であること、つまり、クエリ処理の消費電力量をより削減できることが期待される。【解決手段】データベース管理システムは、下記の（Ａ）及び（Ｂ）を行うことにより実行プランを生成する。（Ａ）受け付けたクエリを基に特定されデータベースオペレーションの実行順序を示すアクセスパスである暫定実行プランを、それぞれが同時実行可能な処理範囲である１以上のクエリ処理ブロックに分割する処理、（Ｂ）１以上のクエリ処理ブロックの各々について、そのクエリ処理ブロックにおける１以上の処理の処理時間、性能及び記憶デバイス数の少なくとも１つを基に、そのクエリ処理ブロックの内部構成を変更した方がより低い実行コストになるか否かを判定し、その判定結果が真の場合に、そのクエリ処理ブロックの内部構成を変更する処理。【選択図】図１
2018169644.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶デバイスに格納されているデータベースを管理するデータベース管理システムであって、
前記データベースへのクエリを受け付けるクエリ受付部と、
前記受け付けたクエリを基に実行プランを生成するクエリ最適化部と、
前記生成した実行プランに基づいて、前記受け付けたクエリを実行するクエリ実行部と
を備え、
前記クエリ最適化部は、下記の（Ａ）及び（Ｂ）を行うことにより前記実行プランを生成する、
（Ａ）前記受け付けたクエリを基に特定されデータベースオペレーションの実行順序を示すアクセスパスである暫定実行プランを、それぞれが同時実行可能な処理範囲である１以上のクエリ処理ブロックに分割する処理、
（Ｂ）前記１以上のクエリ処理ブロックの各々について、そのクエリ処理ブロックにおける１以上の処理の処理時間、性能及び記憶デバイス数の少なくとも１つを基に、そのクエリ処理ブロックの内部構成を変更した方がより低い実行コストになるか否かを判定し、その判定結果が真の場合に、そのクエリ処理ブロックの内部構成を変更する処理、
データベース管理システム。
【請求項２】
前記データベースは、外部機器からのイベントを受け付けるイベント受付部を備え、
前記クエリ最適化部は、クエリ処理ブロック毎の消費電力と処理中断時の消費電力を算出し、
前記クエリ実行部は、複数のクエリ処理が前記データベースで既実行中であり、前記イベント受付部がクエリ処理中断イベントを受け付けた場合に、前記クエリ処理ブロックの消費電力情報から中断するクエリを選択する、
請求項１記載のデータベース管理システム。
【請求項３】
（Ｂ）は、前記１以上のクエリ処理ブロックの各々について、下記の（ｂ１１）乃至（ｂ１３）を行うことである、
（ｂ１１）第１の処理の後段にある第２の処理の処理時間が前記第１の処理の処理時間よりも短いか否かを判定する、
（ｂ１２）（ｂ１１）の判定結果が真の場合、前記第１の処理の完了後に前記第２の処理を一括して実行した方がより低い実行コストになるか否かを判定する、
（ｂ１３）（ｂ１２）の判定結果が真の場合、前記第１及び前記第２の処理を同時実行とせず、前記第１の処理の後に前記第２の処理を実行することとする、
請求項１又は２記載のデータベース管理システム。
【請求項４】
（Ｂ）は、下記の（ｂ２１）乃至（ｂ２３）を行うことである、
（ｂ２１）前記データベースにおける同一表を複数回読込むか否かを判定する、
（ｂ２２）（ｂ２１）の判定結果が真の場合、前記同一表のうちのＮ回目（Ｎは２以上の整数）の絞込み条件に該当する表部分である一時表の読書きの実行コストが、前記同一表の読込みの実行コストよりも低いか否かを判定する、
（ｂ２３）（ｂ２２）の判定結果が真の場合、前記Ｎ回目の読込みに対応した一時表を書き込むこととする、
請求項１乃至３のうちのいずれか１項に記載のデータベース管理システム。
【請求項５】
（ｂ２３）は、（ｂ２２）の判定結果が真の場合、（ｂ２３−１）乃至（ｂ２３−２）を行うことである、
（ｂ２３−１）前記複数回の読込みにそれぞれ対応した複数の絞込み条件に包含関係があるか否かを判定する、
（ｂ２３−２）（ｂ２３−１）の判定結果が真の場合、上位集合としての絞込み条件に対応した一時表を、部分集合としての絞込み条件に対応した一時表である第１の一時表と、前記部分集合以外としての条件に対応した一時表である第２の一時表とに分けて書き込むこととする、
請求項４記載のデータベース管理システム。
【請求項６】
前記一時表の各々の書込み先領域は、下記のうちのいずれかの条件に該当する領域である、
（条件１）その一時表の読込みを含んだクエリ処理ブロックにおいて読み込まれる表が格納されている領域と同じ領域、
（条件２）その一時表の読込みを含んだクエリ処理ブロックの前段のクエリ処理ブロックにおいて読み込まれる表が格納されている領域と同じ領域、
（条件３）その一時表の読込みを含んだクエリ処理ブロックの後段のクエリ処理ブロックにおいて読み込まれる表が格納されている領域と同じ領域、
（条件４）その一時表の書込み可能領域のうちの、一時表書込み時のクエリ総実行コストが最も小さくなる領域、
請求項４又は５記載のデータベース管理システム。
【請求項７】
（Ｂ）は、前記１以上のクエリ処理ブロックの各々について、下記の（ｂ３１）乃至（ｂ３３）を行うことである、
（ｂ３１）そのクエリ処理ブロックにおける同時実行対象の処理に対応した性能うちの最低の性能であるボトルネック性能が、発揮可能な最大の性能未満か否かを判定する、
（ｂ３２）（ｂ３１）の判定結果が真の場合、前記ボトルネック性能を発揮できるだけの処理実行順序及び記憶デバイス起動順序を決定する、
請求項１乃至６のうちのいずれか１項に記載のデータベース管理システム。
【請求項８】
前記クエリ実行部は、前記受け付けたクエリの実行において、クエリ処理ブロック単位で、記憶デバイスの起動状態又は省電力状態への遷移を制御する、
請求項１乃至７のうちのいずれか１項に記載のデータベース管理システム。
【請求項９】
前記クエリ最適化部は、下記の（Ｘ）及び（Ｙ）を行い、
（Ｘ）前記クエリを基に特定される表結合の結合対象の表のうち、実行木に未追加の表があるか否かを判定する、
（Ｙ）（Ｘ）の判定結果が真の場合、未追加の表が属する表結合のうち、追加後の実行木全体の総実行コストが最も低い表結合か、実行木かを、前記実行木に追加し、（Ｘ）に戻る、
（Ｘ）の判定結果が偽の場合での実行木が、前記アクセスパスである、
請求項１乃至８のうちのいずれか１項に記載のデータベース管理システム。
【請求項１０】
データベースを格納する複数の記憶デバイスと、
前記データベースを管理するデータベース管理システムと
を備え、
前記データベース管理システムが、
前記データベースへのクエリを受け付けるクエリ受付部と、
前記受け付けたクエリを基に実行プランを生成するクエリ最適化部と、
前記生成した実行プランに基づいて、前記受け付けたクエリを実行するクエリ実行部と
を有し、
前記クエリ最適化部は、下記の（Ａ）及び（Ｂ）を行うことにより前記実行プランを生成する、
（Ａ）前記受け付けたクエリを基に特定されデータベースオペレーションの実行順序を示すアクセスパスである暫定実行プランを、それぞれが同時実行可能な処理範囲である１以上のクエリ処理ブロックに分割する処理、
（Ｂ）前記１以上のクエリ処理ブロックの各々について、そのクエリ処理ブロックにおける１以上の処理の処理時間、性能及び記憶デバイス数の少なくとも１つを基に、そのクエリ処理ブロックの内部構成を変更した方がより低い実行コストになるか否かを判定し、その判定結果が真の場合に、そのクエリ処理ブロックの内部構成を変更する処理、
計算機システム。
【請求項１１】
複数の記憶デバイスに格納されているデータベースを管理するデータベース管理方法であって、
前記データベースへのクエリを受け付け、
前記受け付けたクエリを基に実行プランを生成するクエリ最適化を行い、
前記生成した実行プランに基づいて、前記受け付けたクエリを実行し、
前記クエリ最適化では、下記の（Ａ）及び（Ｂ）を行うことにより前記実行プランを生成する、
（Ａ）前記受け付けたクエリを基に特定されデータベースオペレーションの実行順序を示すアクセスパスである暫定実行プランを、それぞれが同時実行可能な処理範囲である１以上のクエリ処理ブロックに分割する処理、
（Ｂ）前記１以上のクエリ処理ブロックの各々について、そのクエリ処理ブロックにおける１以上の処理の処理時間、性能及び記憶デバイス数の少なくとも１つを基に、そのクエリ処理ブロックの内部構成を変更した方がより低い実行コストになるか否かを判定し、その判定結果が真の場合に、そのクエリ処理ブロックの内部構成を変更する処理、
データベース管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、データベース管理に関し、特に、クエリ処理の消費電力量の削減に関する。
【背景技術】
【０００２】
クエリ処理の消費電力量を削減する技術として、特許文献１に開示の技術が知られている。特許文献１によれば、データベース管理システムが、受け付けたクエリを解析して、１以上の実行プラン案を作成し、作成した実行プラン案に基づいて、アクセスするボリュームを特定する。データベース管理システムは、その特定されたボリュームの消費電力情報について、その１以上の実行計画案についてそれぞれ実行コストを算出する。データベース管理システムは、算出された実行コストに基づいて、１以上の実行プラン案から実行プランを選択する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第4908260号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１によれば、１以上の実行プラン案の実行コストを基に実行プランが選択される。このため、選択肢としての実行プラン案それ自体の実行コストが適切であれば、選択される実行プランの実行コストがより適切であること、つまり、クエリ処理の消費電力量をより削減できることが期待できる。
【課題を解決するための手段】
【０００５】
そこで、データベース管理システムは、下記の（Ａ）及び（Ｂ）を行うことにより実行プランを生成する。
（Ａ）受け付けたクエリを基に特定されデータベースオペレーションの実行順序を示すアクセスパスである暫定実行プランを、それぞれが同時実行可能な処理範囲である１以上のクエリ処理ブロックに分割する処理、
（Ｂ）１以上のクエリ処理ブロックの各々について、そのクエリ処理ブロックにおける１以上の処理の処理時間、性能及び記憶デバイス数の少なくとも１つを基に、そのクエリ処理ブロックの内部構成を変更した方がより低い実行コストになるか否かを判定し、その判定結果が真の場合に、そのクエリ処理ブロックの内部構成を変更する処理。
【発明の効果】
【０００６】
クエリ処理の消費電力量をより削減できることができる。
【図面の簡単な説明】
【０００７】
【図１】実施例１に係るデータベースサーバの構成例を示す。
【図２】クエリの一例を示す。
【図３】図２に例示のクエリに対応した表結合関係を示す。
【図４】図２に例示のクエリに対応した実行プラン案の一例を示す。
【図５】データベース管理システムが行う処理の全体の流れと、その処理におけるクエリ最適化の流れの一例を示す。
【図６】範囲決定の流れの一例の詳細を示す。
【図７】一時表制御の流れの一例の詳細を示す。
【図８】一時表分割書込みの具体例を示す。
【図９】順序決定の流れの一例の詳細を示す。
【図１０】処理時間管理テーブルの構成の一例を示す。
【図１１】システム性能管理テーブルの構成の一例を示す。
【図１２】サイズ管理テーブルの構成の一例を示す。
【図１３】処理性能管理テーブルの一例を示す。
【図１４】実施例２に係るアクセスパス選択の流れの一例の詳細を示す。
【図１５】最初の実行木の一例を示す。
【図１６】図１５の実行木に追加する第１の表結合候補の一例を示す。
【図１７】図１５の実行木に追加する第２の表結合候補の一例を示す。
【図１８】図１５の実行木に追加する第３の表結合候補の一例を示す。
【図１９】図１５の実行木に追加する第４の表結合候補の一例を示す。
【図２０】実施例３に係るデータベースサーバの構成例を示す。
【図２１】消費電力管理テーブルの構成の一例を示す。
【発明を実施するための形態】
【０００８】
以下の説明では、データベースを「ＤＢ」、データベース管理システムを「ＤＢＭＳ」と言う。ＤＢサーバは、例えばＤＢＭＳを実行するサーバである。ＤＢＭＳに対するクエリの発行元は、ＤＢＭＳの外部のコンピュータプログラム（例えばアプリケーションプログラム）でよい。外部のコンピュータプログラムは、ＤＢサーバ内で実行されるプログラムでもよいし、ＤＢサーバに接続された装置（例えばクライアント計算機）で実行されるプログラムでもよい。
【０００９】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号（又は参照符号における共通番号）を使用し、同種の要素を区別して説明する場合は、その要素に割り振られたＩＤ（又はその要素の参照符号）を使用することがある。
【００１０】
また、以下の説明では、「インターフェース部」は、１以上のインターフェースである。１以上のインターフェースは、１以上の同種のインターフェースデバイス（例えば１以上のＮＩＣ（Network Interface Card））であってもよいし２以上の異種のインターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１１】
また、以下の説明では、「メモリ部」は、１以上のメモリである。少なくとも１つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。
【００１２】
また、以下の説明では、「プロセッサ部」は、１以上のプロセッサである。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）である。プロセッサは、処理の一部又は全部を行うハードウェア回路を含んでもよい。
【００１３】
また、以下の説明では、「ＰＤＥＶ」は、物理的な記憶デバイスを意味し、典型的には、ＨＤＤ（Hard Disk Drive）又はＳＳＤ（Solid State Drive）のような不揮発性の記憶デバイス（例えば補助記憶デバイス）でよい。
【００１４】
また、以下の説明では、「ｋｋｋ部」の表現にて機能を説明することがあるが、機能は、１以上のコンピュータプログラムがプロセッサ部によって実行されることで実現されてもよいし、１以上のハードウェア回路（例えばＦＰＧＡ又はＡＳＩＣ（Application Specific Integrated Circuit））によって実現されてもよい。プログラムがプロセッサ部に実行されることによって機能が実現される場合、定められた処理が、適宜にメモリ部及び／又はインターフェース部を用いながら行われるため、機能はプロセッサ部の少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサ部あるいはそのプロセッサ部を有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体（例えば非一時的な記録媒体）であってもよい。各機能の説明は一例であり、複数の機能が１つの機能にまとめられたり、１つの機能が複数の機能に分割されたりしてもよい。
【００１５】
また、以下の説明では、「ｘｘｘ管理テーブル」といった表現にて管理情報を説明することがあるが、管理情報は、どのようなデータ構造で表現されていてもよい。すなわち、管理情報がデータ構造に依存しないことを示すために、「ｘｘｘ管理テーブル」を「ｘｘｘ管理情報」と言うことができる。また、以下の説明において、各管理テーブルの構成は一例である。少なくとも１つの管理テーブルについて、全ての情報項目（例えば行又は列）が必須でなくてもよく、更なる情報項目があってもよいし、少なくとも１つの情報項目がなくてもよい。また、１つの管理テーブルは、２以上の管理テーブルに分割されてもよいし、２以上の管理テーブルの全部又は一部が１つの管理テーブルであってもよい。
【００１６】
また、以下の説明では、「計算機システム」は、サーバシステムとストレージシステムのうちの少なくとも１つでよい。「サーバシステム」は、１以上の物理的なサーバ（例えばサーバのクラスタ）であってもよいし、少なくとも１つの仮想的なサーバ（例えばＶＭ（Virtual Machine））を含んでもよい。また、「ストレージシステム」は、１以上の物理的なストレージ装置であってもよいし、少なくとも１つの仮想的なストレージ装置（例えばＳＤＳ（Software Defined Storage））を含んでもよい。
【００１７】
また、以下の説明において、「クエリ処理」は、クエリを実行することによって走る処理全体を意味する。また、クエリは、ＤＢオペレーションの実行順序を示す情報であるクエリ実行プラン（以下、実行プラン）に基づいて実行されるが、ＤＢオペレーションの実行により、１以上の処理が走る。そこで、以下、ＤＢオペレーションの実行により走る１以上の処理の各々を、「ＤＢ処理」と言う。
【００１８】
また、以下の説明において、クエリ処理の「実行コスト」は、クエリ処理の消費電力量の大きさを意味する。実行コストが高い程、消費電力量が大きく、実行コストが小さい程、消費電力量が小さい。以下の実施形態では、下記の２つの観点から、クエリ処理の実行コストが算出される。
（１）クエリ処理時間が短ければ、クエリ処理の消費電力量が小さい。クエリ処理に関わるデバイスの稼働時間が短くて済むからである。
（２）クエリ処理の消費電力量には、ＰＤＥＶの消費電力（特に、ＰＤＥＶ起動時の消費電力）が大きく影響する。
【００１９】
そこで、以下の実施形態では、実行コストは、処理時間と起動ＰＤＥＶ数とに基づき決定される。具体的には、例えば、実行コストは、処理時間と起動ＰＤＥＶ数との積である。ＰＤＥＶ毎の消費電力に差が無く、なおかつ、処理時間が同一であれば、起動ＰＤＥＶ数が少ないほど、実行コストが小さい。一方、起動ＰＤＥＶ数が同一であれば、処理時間が短いほど、実行コストが小さい。
【００２０】
以下、図面を参照しながら、幾つかの実施例を説明する。なお、以下の説明により本発明が限定されるものではない。
【実施例１】
【００２１】
図１は、実施例１に係るＤＢサーバの構成を示す。
【００２２】
ＤＢサーバ１００は、計算機システムの一例である。ＤＢサーバ１００は、例えば、パーソナルコンピュータ、ワークステーション又はメインフレームであってよく、もしくは、これらの計算機において仮想化プログラムによって構成された仮想的な計算機であってよい。ＤＢサーバ１００は、ＰＤＥＶ群１７５、メモリ１０５及びそれらに接続されたプロセッサ１５５を有する。ＤＢサーバ１００は、キーボードやポインティングデバイス等の入力デバイス（図示しない）と液晶ディスプレイ等の出力デバイス（図示しない）を有してもよい。入力デバイス及び出力デバイスは、プロセッサ１５５に接続されていてよい。入力デバイスと出力デバイスは一体であってもよい。
【００２３】
ＰＤＥＶ群１７５は、複数のＰＤＥＶである。ＰＤＥＶ群１７５の記憶空間に基づく記憶領域（以下、ＤＢ領域）１８０が、ＤＢＭＳ１１５に提供される。ＤＢ領域１８０に、ＤＢＭＳ１１５により管理されるＤＢが格納される。ＤＢは、１以上の表（典型的には複数の表）１８２を含み、更に、１以上の索引（典型的には複数の索引）１８１を含む。表１８２は、１以上のレコードの集合であり、レコードは１以上のカラムから構成される。索引１８１は、表１８２の１以上のカラム等を対象として作成されるデータ構造であり、その索引１８１が対象とするカラム等を含む選択条件による表１８２へのアクセスを高速化するためのものである。なお、ＤＢ領域１８０は、１以上の論理領域の集合である。各論理領域は、１以上のＰＤＥＶに基づく記憶領域（例えば、論理的な記憶デバイスであるＬＤＥＶ）である。また、各ＰＤＥＶの状態は、本実施例では、起動状態と省電力状態とに大別されるものとする。「起動状態」は、ＰＤＥＶが起動中の状態と、ＰＤＥＶが起動完了してＩ／Ｏ可能な状態とを含む。「省電力状態」は、ＰＤＥＶがＩ／Ｏ不可能に低消費電力である状態（例えば、電源オフ、スリープ状態又はスタンバイ状態）であるとする。各ＰＤＥＶは、起動要求又はＩ／Ｏ要求を受けることで省電力状態から起動状態に遷移する。また、各ＰＤＥＶは、省電力遷移要求を受けることで（又は要求を一定時間受信しないままでいることで）起動状態から省電力状態に遷移する。
【００２４】
ＤＢサーバ１００は、プロセッサ１５５に接続されたネットワークインターフェース（インターフェース部の一例）を有してよく、ＰＤＥＶ群１７５は、ネットワークインターフェースに接続された外部ストレージ装置に含まれていてもよい。
【００２５】
メモリ１０５は、メモリ部の一例である。メモリ１０５は、例えば、揮発性のＤＲＡＭ（Dynamic Random-Access Memory）等であり、プロセッサ１５５によって実行されるプログラムと、プログラムが使用するデータを一時的に記憶する。プログラムとして、例えば、ＤＢＭＳ１１５、ＯＳ（Operating System）１４５及びアプリケーションプログラム１１４がある。ＤＢサーバ１００では、アプリケーションプログラム１１４が、クエリを発行する。ＤＢＭＳ１１５が、アプリケーションプログラム１１４からクエリを受け、そのクエリを実行する。そのクエリの実行において、ＤＢＭＳ１１５は、ＤＢからデータを読み込むために、又は、ＤＢにデータを書き込むために、Ｉ／Ｏ（Input/Output）要求をＯＳ１４５に発行する。ＯＳ１４５は、そのＩ／Ｏ要求を受け、そのＩ／Ｏ要求に従いＰＤＥＶ群１７５に対してデータのＩ／Ｏを実行し、実行結果をＤＢＭＳ１１５に返す。
【００２６】
ＤＢＭＳ１１５は、クエリ受付部１２０、クエリ最適化部１３０及びクエリ実行部１４０を有する。なお、ＤＢＭＳ１１５の構成は一例に過ぎない。例えば、ある構成要素は複数の構成要素に分割されていてもよく、複数の構成要素が１つの構成要素に統合されていてもよい。
【００２７】
クエリ受付部１２０は、アプリケーションプログラム１１４が発行するクエリを受け付ける。クエリは、ＤＢへのクエリであって、例えば、構造化クエリ言語（ＳＱＬ、Structured Query Language）によって記述される。
【００２８】
クエリ最適化部１３０は、クエリ受付部１２０が受け付けたクエリから、そのクエリを実行するために必要な１以上のＤＢオペレーションを含む実行プランを生成する。実行プランは、例えば、１以上のＤＢオペレーションと、ＤＢオペレーションの実行順序の関係を含む情報である。実行プランは、ＤＢオペレーションをノード、ＤＢオペレーションの実行順序の関係をエッジとする木構造で表されることがある。
【００２９】
クエリ実行部１４０は、クエリ最適化部１３０が生成した実行プランに従って、クエリ受付部１２０が受け付けたクエリを実行し、その実行結果をアプリケーションプログラム１１４に返す。クエリ実行において、クエリ実行部１４０は、（ａ）ＤＢオペレーションを実行するためのタスクを生成し、（ｂ）生成されたタスクを実行することで、そのタスクに対応したＤＢオペレーションに必要なデータの読込み要求を発行し、（ｃ）（ｂ）で実行されたタスクに対応したＤＢオペレーションの実行結果に基づき別のＤＢオペレーションを実行する必要がある場合には、その別のＤＢオペレーションをそれぞれ実行する１以上のタスクを新たに生成し、（ｄ）その新たに生成した１以上のタスクのそれぞれについて（ｂ）及び（ｃ）を行ってもよい。また、クエリ実行部１４０は、このようにして生成された１以上のタスクを並行して実行してよい。クエリ実行部１４０は、２以上の実行可能なタスクが存在する場合には、それら２以上のタスクのうちの少なくとも２つのタスクを並行して実行してよい。なお、上記において、クエリ実行部１４０は、１のタスクで複数のＤＢオペレーションを実行してもよい。また、クエリ実行部１４０は、都度に新たにタスクを生成することはせず、同じタスクにおいて次のＤＢオペレーションを実行してもよい。タスクの実装としては、例えば、ＯＳ１４５が実現するプロセスやカーネルスレッド等のほか、ライブラリ等が実現するユーザスレッドを用いてよい。
【００３０】
クエリ最適化部１３０は、アクセスパス選択を行うアクセスパス選択部１３１、範囲決定を行う範囲決定部１３２、システムボトルネック値特定を行うボトルネック値特定部１３３、一時表制御を行う一時表制御部１３４、順序決定を行う順序決定部１３５、実行プラン選択を行うプラン選択部１３６、及び、管理テーブル作成を行う管理テーブル生成部１３７を有する。クエリ最適化１３０は、管理テーブル群１３８（複数の管理テーブル）を管理する。管理テーブル群１３８は、予め用意されている管理テーブルと、管理テーブル生成部１３７により生成された管理テーブルとを含む。クエリ最適化部１３０の構成要素（機能）１３１〜１３７、及び、管理テーブル群１３８については、後に詳細に説明する。
【００３１】
本実施例において、例えば、クエリ受付部１２０が、図２に例示のクエリを受け付けたとする。このクエリに従う表結合関係は、図３に示す表結合関係となる。この表結合関係から、複数通りのアクセスパスが構築可能である。なお、図３において、「表Ａ１」、「表Ａ２」及び「表Ａ３」は、表Ａが３回読み込まれることを意味する。また、図３において、表Ａ１〜表Ａ３の各々について、関連付けられている吹出しは、その表に関して指定されている絞込み条件（図２のクエリに記述されている絞込み条件）を示す。
【００３２】
図３に示す表結合関係から構築可能な複数通りのアクセスパスのうちの１つを例に取ったアクセスパスに従う実行プラン案が、図４に示す実行プラン案である。１以上の実行プラン案から、実行プランとして使用される実行プラン案が選択される。
【００３３】
図４に例示の通り、実行プラン案は、１以上のＤＢオペレーションを含む。ＤＢオペレーションとして、例えば、表読込み４０１（４０１Ａ〜４０１Ｄ）、索引読込み４０２及び表結合４０３（４０３Ａ〜４０３Ｃ）がある。
【００３４】
表結合は、表同士の結合であるが、結合させる表と処理クエリの性質により、実行コストが良くなる結合方式が異なる。図４において、「ＨＪ」はハッシュ結合を意味し、「ＮＬＪ」はネストループ結合を意味する。ネストループ結合では、結合の前ＤＢ処理が必要無いため、１レコード入力される毎に生成された結合結果が後段のＤＢオペレーションへ渡される。一方、ハッシュ結合では、二段階のＤＢ処理が行われる。具体的には、第一段階のＤＢ処理完了後に第二段階のＤＢ処理が行われる。つまり、第一段階と第二段階のＤＢ処理が切り離されている。このため、ハッシュ結合におけるＤＢ処理対象のＰＤＥＶのうち同時にアクセスされないＰＤＥＶが存在する。参照符号４１１は、同時実行可能な処理範囲を意味する。以下、同時実行可能な処理範囲を、「クエリ処理ブロック」と言う。例えば、クエリ処理ブロック４１１Ｃは、ハッシュ結合４０３Ｃの第二段階のＤＢ処理では表読込み４０１Ｄのみが同時実行可能な処理範囲である事を示している。クエリ処理ブロック４１１Ｂは、ハッシュ結合４０３Ａの第二段階のＤＢ処理では索引読込み４０２２、表読込み４０１Ｂ及び４０１Ｃのみが同時実行可能な処理範囲である事を示している。
【００３５】
以下、本実施例で行われる処理の流れの一例を説明する。その際に、適宜、参照される管理テーブルを説明する。
【００３６】
図５は、ＤＢＭＳ１１５が行う処理の全体の流れと、その処理におけるクエリ最適化の流れの一例を示す。
【００３７】
クエリ受付部１２０が、クエリを受け（Ｓ５１０）、クエリ最適化部１３０が、受け付けたクエリの最適化を行い（Ｓ５２０）、クエリ実行部１４０が、クエリ最適化により得られた実行プランに従いクエリを実行する（Ｓ５３０）。
【００３８】
クエリ最適化（Ｓ５２０）では、クエリ最適化部１３０が、クエリを基に特定される少なくとも１つのアクセスパスを、クエリ処理ブロック単位で実行コストが小さくなるよう構成変更することで、そのアクセスパスについてより実行コストが削減された実行プラン案を生成する。クエリ最適化部１３０は、生成された１以上の実行プラン案から実行プラン（正確には、実行プランとして使用する実行プラン案）を選択する。クエリ最適化では、以下の処理が行われる。
【００３９】
アクセスパス選択部１３１が、アクセスパス選択を行う（Ｓ５２１）。具体的には、アクセスパス選択部１３１は、クエリを基に、アクセスパスを探索し、見つかったアクセスパスを選択する。ここで選択されたアクセスパスが、暫定プラン案（暫定的な実行プラン案）である。暫定プラン案（正確には、暫定プラン案を表す情報）は、アクセスパス選択部１３１によりメモリ１０５に格納される。なお、「アクセスパス」は、１以上のＤＢオペレーションとＤＢオペレーションの実行順序の関係とを表すパスである。
【００４０】
範囲決定部１３２が、範囲決定を行う（Ｓ５２２）。具体的には、範囲決定部１３２が、暫定プラン案を１以上のクエリ処理ブロックに分割し（区切り）、その１以上のクエリ処理ブロックの各々について、一括処理の対象とする処理の有無を確認する。
【００４１】
ボトルネック値特定部１３３が、システムボトルネック値特定を行う（Ｓ５２３）。システムボトルネック値は、各クエリ処理ブロックについて特定される。各クエリ処理ブロックについて、「システムボトルネック値」とは、そのクエリ処理ブロックにおける１以上の処理に対応した１以上のＩ／Ｏ性能のうち、最も低いＩ／Ｏ性能である。「Ｉ／Ｏ性能」は、単位時間当たりのＩ／Ｏ量、具体的には、スループット（単位時間当たりのＩ／Ｏデータサイズ）とＩ／Ｏ頻度（単位時間当たりのＩ／Ｏ数）とのうちの少なくとも１つである。
【００４２】
一時表制御部１３４が、一時表制御を行う（Ｓ５２４）。具体的には、一時表制御部１３４は、一時表を作成するか否かの判定と、一時表の書込み先領域の選択とを行う。「一時表」とは、読み込まれた表１８１の一部（具体的には、表１８１のうちの、指定された絞込み条件に適合する部分）としての表である。クエリ処理において、同一の表１８１が複数回読み込み対象とされることがあり得るが、前段での読み込みの際に後段で必要とされる部分だけを一時表としてＰＤＥＶ群（又はメモリ１０５）に書き込んでおけば、書き込みにかかる時間が加算されても（実行コストが加算されても）、クエリ処理全体の実行コストを削減することが期待できる。
【００４３】
順序決定部１３５が、順序決定を行う（Ｓ５２５）。具体的には、順序決定部１３５が、各クエリ処理ブロックについて、Ｓ５２３で特定されたシステムボトルネック値がシステムＰＤＥＶ最大Ｉ／Ｏ性能（処理対象のクエリ処理ブロックのデータを含む全ＰＤＥＶ起動時に発揮可能な最大Ｉ／Ｏ性能）未満の場合、システムボトルネック値を発揮できるだけのＰＤＥＶが起動されるような処理実行順序及びＰＤＥＶ起動順序を決定する。Ｓ５２２〜Ｓ５２５において、適宜、暫定プラン案が更新される。Ｓ５２５が終了した場合に、暫定プラン案が、実行プラン案として確定する。
【００４４】
アクセスパス選択部１３１が、Ｓ５２１〜Ｓ５２６の終了条件が満たされたか否かを判定する（Ｓ５２６）。終了条件は、例えば、下記のうちの少なくとも１つでよい。
・全通りのアクセスパスについてＳ５２１〜Ｓ５２６が行われた。
・実行コストが所定の閾値以下である実行プラン案がＮ個（Ｎは自然数）生成された。
【００４５】
Ｓ５２６の判定結果が偽の場合（Ｓ５２６：Ｎ）、Ｓ５２１が実行される。
【００４６】
Ｓ５２６の判定結果が真の場合（Ｓ５２６：Ｙ）、プラン選択部１３６が、１以上の実行プラン案から実行プランを選択する（Ｓ５２７）。なお、Ｓ５２６の判定は無くてもよい。この場合、Ｓ５２２〜Ｓ５２５は、見つかった１つのアクセスパスについて行われ、その結果として生成された実行プランが、クエリ実行の際に使用される実行プランでよい。
【００４７】
以下、クエリ最適化のうち、Ｓ５２２〜Ｓ５２５を、詳細に説明する。
【００４８】
＜Ｓ５２２：範囲決定＞
【００４９】
図６は、範囲決定の流れの一例の詳細を示す。
【００５０】
Ｓ６０１で、範囲決定部１３２が、暫定プラン案を１以上のクエリ処理ブロックに分割する。ここでは、例えば、ＤＢ管理テーブル（図示せず）が参照される。ＤＢ管理テーブルは、管理テーブル群１３７に含まれる管理テーブルの１つである。ＤＢ管理テーブルは、ＤＢに関する種々の情報、例えば、下記のうちの少なくとも１つ、
・ＤＢ要素（例えば、表又は索引）毎のサイズ及び位置等を示す情報、
・ＤＢの統計を示す情報（例えば、索引のエントリ数を表す情報、表のレコード数を表す情報、カラム毎の値の最大値、平均値、最小値、カラム毎の値分布等）、
・ＤＢを格納するＰＤＥＶ毎のＩ／Ｏ性能を示す情報、
・ＤＢを格納するＰＤＥＶ毎の消費電力を示す情報、
を保持する。ＤＢ要素の位置に関する情報は、例えば、ＤＢ要素を格納する論理領域のＩＤと、その論理領域の基になっているＰＤＥＶのＩＤとを含む。ＤＢ管理テーブルから、いずれのＤＢ要素にアクセスするためにいずれの記憶領域の基になっているＰＤＥＶを起動しなければいけないかがわかる。例えば、２以上のＤＢ要素がそれぞれ異なる２以上のＰＤＥＶに存在していれば、その２以上のＤＢ要素を同時に読み込むことが可能である。範囲決定部１３２は、ＤＢ管理テーブルを基に、暫定プラン案を１以上のクエリ処理ブロック（同時実行可能な処理範囲）に分割する。これにより、暫定プラン案は、１以上のクエリ処理ブロックの各々を示す情報を含む。
【００５１】
範囲決定部１３２が、全クエリ処理ブロックの各々について、以下のＳ６０２〜Ｓ６０４を行う。以下、１つのクエリ処理ブロックを例に取る。そのクエリ処理ブロックを、Ｓ６０２〜Ｓ６０４の説明において、「対象ブロック」と言う。
【００５２】
Ｓ６０２で、範囲決定部１３２が、対象ブロックにおいて、長時間ＤＢ処理の後段に短時間ＤＢ処理が存在するか否かを判定する。この判定には、図１０に例示する処理時間管理テーブル１０００が参照される。
【００５３】
処理時間管理テーブル１０００は、管理テーブル生成部１３７により生成された管理テーブルである。処理時間管理テーブル１０００は、ＤＢ処理毎にエントリを有し、各エントリは、処理名１００１、処理時間１００２及び起動ＰＤＥＶ数１００３といった情報を保持する。処理名１００１は、ＤＢ処理の名前を示す。処理時間１００２は、Ｉ／Ｏ量（例えば、読み込まれる又は書き込まれるデータ（例えばＤＢ要素）のサイズ）やプロセッサ１５５の性能（例えば理想性能）等を基に、ＤＢ処理に要する時間として見積もられた値である。起動ＰＤＥＶ数１００３は、ＤＢ処理に必要とされるＰＤＥＶ（ＤＢ処理のために起動が必要とされるＰＤＥＶ）の数を示す。処理時間１００２及び起動ＰＤＥＶ数１００３の少なくとも１つは、例えば、上述のＤＢ管理テーブルを基に特定された値である。
【００５４】
処理時間管理テーブル１０００を参照することで、対象ブロックにおけるＤＢ処理毎の処理時間１００２がわかる。故に、範囲決定部１３２が、対象ブロックにおいて、長時間処理の後段に短時間処理が存在するか否かを判定できる。なお、ここで、前段のＤＢ処理の処理時間１００２が後段のＤＢ処理の処理時間１００２よりも長く、且つ、前段のＤＢ処理の処理時間１００２と後段のＤＢ処理の処理時間１００２との差が所定の閾値以上の場合に、判定結果が真となる。
【００５５】
Ｓ６０２の判定結果が真の場合、Ｓ６０３で、範囲決定部１３２が、一括処理が消費電力量の削減に有効か否かを判定する。具体的には、範囲決定部１３２が、前段の長時間ＤＢ処理から生成される結果を逐次に後段の短時間ＤＢ処理で実行するのではなく、前段の長時間ＤＢ処理から生成される結果をＰＤＥＶ群１７５（又はメモリ１０５）に書き出しその後にその結果を後段の短時間ＤＢ処理で一括処理した方が実行コストが削減されるか否か判定する。この判定でも、処理時間管理テーブル１０００が参照される。具体的には、例えば、（実行コストＸ）＞（実行コストＹ）ならば、判定結果が真となる。
（実行コストＸ）＝｛（長時間ＤＢ処理の処理時間１００２）＋（短時間ＤＢ処理の起動ＰＤＥＶ数１００２）｝×｛（長時間ＤＢ処理の起動ＰＤＥＶ数１００３）＋（短時間ＤＢ処理の起動ＰＤＥＶ数１００３）｝
（実行コストＹ）＝（長時間ＤＢ処理の実行コスト）＋（長時間ＤＢ処理結果の読書きの実行コスト）＋（短時間ＤＢ処理の実行コスト）
【００５６】
Ｓ６０３の判定結果が真の場合、Ｓ６０４で、範囲決定部１３２が、暫定プラン案を更新する。更新後の暫定プラン案は、対象ブロックについて、前段の長時間ＤＢ処理の生成結果をＰＤＥＶ群１７５（又はメモリ１０５）に書き出しその後に後段の短時間ＤＢ処理で生成結果（書き込まれたデータ）を読み込んで一括処理することを示す暫定プラン案である。対象ブロックは、長時間ＤＢ処理のクエリ処理ブロックと、短時間ＤＢ処理のクエリ処理ブロックに分割される。分割後のクエリ処理ブロックについて、範囲決定処理を再帰的に行ってもよい。
【００５７】
＜Ｓ５２３：システムボトルネック値特定＞
【００５８】
ボトルネック値特定部１３３が、各クエリ処理ブロックについて、システムボトルネック値を特定する。以下、１つのクエリ処理ブロックを例に取る。そのクエリ処理ブロックを、Ｓ５２３の説明において、「対象ブロック」と言う。
【００５９】
ボトルネック値特定部１３３が、図１１に例示するシステム性能管理テーブル１１００を参照する。システム性能管理テーブル１１００は、ＤＢ処理毎にエントリを有し、各エントリが、処理名１１０１及び性能１１０２といった情報を保持する。処理名１１０１は、ＤＢ処理の名前を示す。性能１１０２は、発揮可能な最大Ｉ／Ｏ性能を示す。なお、図１１において、「システム最大Ｉ／Ｏ性能」は、クエリ処理においてＤＢＭＳ１１５が発揮可能な最大Ｉ／Ｏ性能である。システム性能管理テーブル１１００は、プロセッサ１５５の使用率や上述したＤＢ管理テーブル等を基に管理テーブル生成部１３７によって生成された管理テーブルであってもよいし、予め用意された管理テーブルであってもよい。
【００６０】
ボトルネック値特定部１３３は、対象ブロックにおける１以上のＤＢ処理にそれぞれ対応した１以上の性能１１０２を特定し、１以上の性能１１０２のうちの最も低い性能１１０２をシステムボトルネック値として特定する。
【００６１】
＜Ｓ５２４：一時表制御＞
【００６２】
図７は、一時表制御の流れの一例の詳細を示す。
【００６３】
Ｓ７０１で、一時表制御部１３４が、暫定プラン案を参照し、同一表の複数回読込みが存在するか否かを判定する。そのような表が少なくとも１つあれば、Ｓ７０１の判定結果は真となり、Ｓ７０２が行われる。なお、複数回読込みの対象となる表（同一表）が２以上ある場合、２以上の表の各々について、Ｓ７０２が行われる。また、１つの同一表が２回以上読み込まれる場合は、各回について、Ｓ７０２が行われる。
【００６４】
Ｓ７０２で、一時表制御部１３４が、同一表の一時表（Ｎ回目（Ｎは２以上の整数）の読込みでの絞込み条件に該当する表部分）をＰＤＥＶ群１７５（又はメモリ１０５）に書き込んだ方が実行コストが削減するか否かを判定する。この判定では、図１２に例示のサイズ管理テーブル１２００と、図１３に例示の処理性能管理テーブル１３００が参照される。
【００６５】
サイズ管理テーブル１２００は、表毎にエントリを有し、各エントリは、表名１２０１及びサイズ１２０２といった情報を保持する。表名１２０１は、表（同一表又は一時表）の名前を示す。サイズ１２０２は、表のサイズを示す。サイズ１２０２は、例えば上述したＤＢ管理テーブルから特定された値である。
【００６６】
処理性能管理テーブル１３００は、ＤＢ処理毎にエントリを有し、各エントリは、処理名１３０１、性能１３０２及び起動ＰＤＥＶ数１３０３といった情報を保持する。処理名１３０１は、ＤＢ処理の名前を示す。性能１３０２は、ＤＢ処理で発揮される性能を示す。起動ＰＤＥＶ数１３０３は、ＤＢ処理に必要とされるＰＤＥＶ（処理のために起動が必要とされるＰＤＥＶ）の数を示す。性能１３０２及び起動ＰＤＥＶ数１３０３のうちの少なくとも１つは、例えば上述したＤＢ管理テーブルから特定された値である。
【００６７】
例えば、（実行コストＰ）＞（実行コストＱ）ならば、Ｓ７０２の判定結果が真となる。
（実行コストＰ）
＝同一表のＫ回表読込みの実行コスト（Ｋ＝２以上の整数）
＝（同一表のＫ回読込みの処理時間）×（同一表の表読込みに対応した起動ＰＤＥＶ数１３０３）
＝［｛（同一表のサイズ１２０２）×Ｋ÷（表読込みの性能１３０２）｝×（同一表の表読込みに対応した起動ＰＤＥＶ数１３０３）］
（実行コストＱ）
＝一時表の読書きの実行コスト＋（Ｋ回読込みを行う表の一回の表読込みの実行コスト）
＝（一時表の読書きの処理時間）×（一時表の読書きに対応した起動ＰＤＥＶ数１３０３）＋（Ｋ回読込みを行う表の一回の表読込みの処理時間）×（Ｋ回読込みを行う表の一回の表読込みに対応した起動ＰＤＥＶ数１３０３）
＝［｛（一時表のサイズ１２０２）÷（一時表の読書きの性能１３０２）｝×（一時表の読書きに対応した起動ＰＤＥＶ数１３０３）＋｛（Ｋ回読込みを行う表のサイズ１２０２）÷（Ｋ回読込みを行う表の読込みの性能１３０２）｝×（Ｋ回読込みを行う表の一回の表読込みに対応した起動ＰＤＥＶ数１３０３）］
【００６８】
Ｓ７０２の判定結果が真の場合、Ｓ７０３で、一時表制御部１３５が、一時表の書込み先領域を決定し、且つ、暫定プラン案を更新する。
【００６９】
一時表の書込み先領域は、例えば、下記のうちのいずれかの条件に該当する領域とされる。
（条件１）一時表の読込みを含んだクエリ処理ブロックにおいて読み込まれる表が格納されている領域と同じ領域。起動ＰＤＥＶ数を節約することができるからである。
（条件２）一時表の読込みを含んだクエリ処理ブロックの前段のクエリ処理ブロックにおいて読み込まれる表が格納されている領域と同じ領域。その表の読込みの終了に伴い起動状態のＰＤＥＶを省電力状態に遷移させるよりもそのＰＤＥＶを一時表の読込みのために起動状態のままとしておいた方が消費電力量の削減が期待できるからである。
（条件３）一時表の読込みを含んだクエリ処理ブロックの後段のクエリ処理ブロックにおいて読み込まれる表が格納されている領域と同じ領域。その表の読込みの開始に伴い省電力状態のＰＤＥＶを起動状態に遷移させるよりも一時表の読込みのために起動状態になっているＰＤＥＶをそのまま起動状態としておいた方が消費電力量の削減が期待できるからである。
（条件４）一時表の書込み可能領域のうちの、一時表書込み時のクエリ総実行コストが最も小さくなる領域。
【００７０】
更新後の暫定プラン案は、同一表（例えば表Ａ）の一時表の書込み先領域の情報と、生成された一時表が読込み対象であることを示す情報とを含む。
【００７１】
なお、Ｓ７０３で、一時表制御部１３４が、同一表の複数回読込みにそれぞれ対応した複数の絞込み条件に包含関係が存在するか否かを判定してよい。その判定結果が真の場合、一時表制御部１３４は、暫定プラン案を、上位集合としての絞込み条件に対応した一時表を複数の一時表に分けて書き込む案に更新する。その複数の一時表のうちの１つが、部分集合としての絞込み条件に対応した一時表である。一時表分割書込みの具体例を、図４に示した表Ａ１〜表Ａ３を例に取り、図８を参照して説明する。
【００７２】
ＰＤＥＶ群１７５のＤＢ領域１８０が、サブＤＢ領域１８５Ａ及び１８５Ｂを含んだ複数のサブＤＢ領域１８５を含む。各サブＤＢ領域１８５は、１以上の論理領域（例えば１以上のＬＤＥＶ）の集合である。表ＡがサブＤＢ領域１８５Ｂに格納されていて、表ＢがサブＤＢ領域１８５Ａに格納されているとする。
【００７３】
図４の例によれば、表Ａが３回読込まれる。これは、同一表Ａの複数回読込みである。さらに、２回目の表Ａの読込みでの絞込み条件（以下、第１の絞込み条件）は、flag＝0、３回目の表Ａの読込みでの絞込み条件（以下、第２の絞込み条件）は、flag＝0 and val＞50である。第１及び第２の絞込み条件は、包含関係にある。具体的には、第２の絞込み条件は、第１の絞込み条件に包含されている。このため、第２の絞込み条件は、部分集合であり、第１の絞込み条件は、上位集合である。
【００７４】
このため、一時表制御部１３４は、暫定プラン案を、次の内容を示す暫定プラン案に更新する。
・１回目の表Ａの読込みの際に、第１の絞込み条件に対応した表Ａ部分が抽出される。
・表Ａ部分のうち、第２の絞込み条件（flag＝0 and val＞50）に該当する部分が、一時表ａ１（３回目の表Ａの読込みで読み込まれる表）として書き込まれる。
・表Ａ部分のうち、第２の絞込み条件に該当しない部分（flag=0 and val<=50に該当する部分）が、一時表ａ２として書き込まれる。
・一時表ａ１及びａ２の書込み先は、表Ｂが格納されているサブＤＢ領域１８５Ａである。
【００７５】
一時表ａ１及びａ２の書込み先が、表Ｂが格納されているサブＤＢ領域１８５Ａとされる理由は、２回目の表Ａの読込みが、上記の（条件１）に該当するためである。なお、３回目の表Ａの読込みは、上記の（条件２）にも該当する。
【００７６】
なお、一時表制御部１３４は、同一表の複数回読込みにそれぞれ対応した複数の絞込み条件に包含関係が存在する場合でも、一時表を複数の一時表に分割して書き込むことがクエリ処理の実行コストの削減になるか否か（例えば、部分集合としての絞込み条件の数が所定の閾値未満か否か）を判定してもよい。その判定結果が真の場合に、一時表制御部１３４は、一時表を複数の一時表に分割してもよい。これにより、部分集合が多数存在する場合に多数の一時表の書込みが生じることを避けることができる。
【００７７】
＜Ｓ５２５：順序決定＞
【００７８】
図９は、順序決定の流れの一例の詳細を示す。
【００７９】
順序決定部１３５が、全クエリ処理ブロックについて、以下のＳ９０１及びＳ９０２を行う。以下、１つのクエリ処理ブロックを例に取る。そのクエリ処理ブロックを、Ｓ９０１及びＳ９０２の説明において、「対象ブロック」と言う。
【００８０】
Ｓ９０１で、順序決定部１３５が、対象ブロックについて、システムボトルネック値がシステムＰＤＥＶ最大Ｉ／Ｏ性能未満か否かを判定する。Ｓ９０１の判定結果が偽の場合、対象ブロックについて、１以上の処理が同時実行され、それら１以上の処理について必要な全てのＰＤＥＶが起動状態とされることになる。
【００８１】
Ｓ９０１の判定結果が真の場合、Ｓ９０３で、順序決定部１３５が、システムボトルネック値を発揮できるだけのＰＤＥＶが起動されるようなＤＢ処理実行順序とＰＤＥＶ起動順序を決定する。例えば、図４に例示のクエリ処理ブロック４１１Ｂについて、図１１に例示の管理テーブル１１００を基に特定されたシステムボトルネック値が、ハッシュ結合（メモリ溢れ）に対応した性能１１０２である場合、順序決定部１３５は、ハッシュ結合（メモリ溢れ）に対応した性能１１０２を発揮できるだけのＰＤＥＶが起動されるような処理実行順序とＰＤＥＶ起動順序を決定する。そして、順序決定部１３５は、その決定に従い、暫定プラン案を更新する。具体的には、表Ａ２表読込み４０１Ｂの時に、図１３に例示の処理性能管理テーブル１３００から表Ａは１０台のＰＤＥＶに格納されており、処理性能が１[ＧＢ/秒]であることがわかる。次に、図１１に例示のシステム性能管理テーブル１１００から、ハッシュ結合（メモリ溢れ）性能が２００[ＭＢ/ｓ]且つ２００[ＩＯＰＳ]であり、表ＡのＰＤＥＶ数と性能から、ＰＤＥＶを２台起動させるとシステムボトルネック値の性能である２００[ＭＢ/ｓ]を満たせると算出することができる。そこで、表Ａを格納するＰＤＥＶを２台毎に起動させ、起動させたＰＤＥＶが含むデータから順々に表読込み４０１Ｂを行うことで、処理性能を劣化させずに消費電力量を削減することができる。
【００８２】
順序決定（Ｓ５２５）が終了すると、暫定プラン案が、実行プラン案として確定する。
【００８３】
プラン選択部１３６は、生成された１以上の実行プラン案のうち、例えば実行コストが最も小さい実行プラン案を、実行プランとして選択する。
【００８４】
クエリ実行部１４０は、その選択された実行プランを基にクエリを実行する。なお、クエリ実行部１４０は、実行プランから、１以上のクエリ処理ブロックを特定し、クエリ処理ブロック単位で、ＰＤＥＶの起動状態又は省電力状態への遷移を制御してよい。例えば、クエリ実行部１４０は、第１のクエリ処理ブロックを実行するために、その第１のクエリ処理ブロックに対応したＰＤＥＶが起動されるよう起動要求を発行してよい。また、クエリ実行部１４０は、第１のクエリ処理ブロックを終えて第２のクエリ処理ブロックを実行する場合、下記、
・第１のクエリ処理ブロックで起動状態であるが第２のクエリ処理ブロックでは起動状態である必要が無いＰＤＥＶが省電力状態へ遷移するよう省電力要求を発行すること、
・第１のクエリ処理ブロックで省電力状態であり第２のクエリ処理ブロックでは起動状態である必要があるＰＤＥＶが起動状態へ遷移するよう起動要求（又はＩ／Ｏ要求）を発行すること、
を行ってよい。このように、クエリ実行部１４０は、実行プランを基に、クエリ処理の進みに応じて、適宜に（クエリ処理ブロック単位で）、ＰＤＥＶの起動状態又は省電力状態への遷移を制御してよい。ＰＤＥＶの起動状態と省電力状態との切替え方法としては、ＤＢＭＳを実行する計算機システムの構成に応じた方法が採用されてよい。例えば、下記のうちのいずれかが採用されてよい。
・ＤＢＭＳ１１５が、ＰＤＥＶを指定した起動要求（又はＩ／Ｏ要求）を発行し、ＯＳ１４５が、そのＰＤＥＶに対して起動要求（又はＩ／Ｏ要求）を発行する。起動要求（又はＩ／Ｏ要求）を受けたＰＤＥＶが、省電力状態から起動状態に遷移する。同様に、ＤＢＭＳ１１５が、ＰＤＥＶを指定した省電力要求を発行し、ＯＳ１４５が、そのＰＤＥＶに対して省電力要求を発行する。省電力要求を受けたＰＤＥＶが、起動状態から省電力状態に遷移する。
・ＤＢＭＳ１１５が、論理領域（例えば、ＬＤＥＶ ＩＤ又は論理アドレス）を指定した起動要求（又はＩ／Ｏ要求）を発行し、ＯＳ１４５又はストレージコントローラ（図示せず）が、その論理領域の基になっているＰＤＥＶを特定し、特定したＰＤＥＶに対して起動要求（又はＩ／Ｏ要求）を発行する。起動要求（又はＩ／Ｏ要求）を受けたＰＤＥＶが、省電力状態から起動状態に遷移する。同様に、ＤＢＭＳ１１５が、論理領域を指定した省電力要求を発行し、ＯＳ１４５又はストレージコントローラ（図示せず）が、その論理領域の基になっているＰＤＥＶを特定し、特定したＰＤＥＶに対して省電力要求を発行する。省電力要求を受けたＰＤＥＶが、起動状態から省電力状態に遷移する。なお、ストレージコントローラは、物理的なプロセッサを含んだコントローラであってもよいし、仮想的なコントローラ（例えばＶＭ（Virtual Machine））であってもよい。
【００８５】
以上が、本実施例に係るクエリ最適化である。
【００８６】
クエリ処理の消費電力量では、ＰＤＥＶ起動に関する消費電力量の割合が大きい。本実施例によれば、実行プラン案の生成において、同時実行可能な処理範囲としてクエリ処理ブロックが定義され、クエリ処理ブロック単位で、処理時間や起動ＰＤＥＶ数を基に、プラン案が更新される。これにより、各アクセスパスについて、実行コストのなるべく低い実行プラン案を生成することができる。
【００８７】
また、クエリ処理では、クエリ処理の期間全体において、クエリ処理対象の全てのデータが常にアクセスされるわけではない。本実施例では、同時実行可能な処理範囲であるクエリ処理ブロック単位で（同一のクエリ処理ブロックであっても一括処理と非一括処理（同時実行される２以上の処理）とに区別して）、ＰＤＥＶの起動状態と省電力状態とが制御される。これにより、クエリ処理での総起動状態時間を抑えること、つまり、クエリ処理の消費電力量を削減することができる。なお、「総起動状態時間」とは、複数のＰＤＥＶの起動状態時間の合計である。各ＰＤＥＶについて、「起動状態時間」とは、起動状態でいた時間である。
【００８８】
また、クエリ処理において、ＣＰＵボトルネック（例えば、大規模データのソート）やネットワーク帯域ボトルネックなど、ＰＤＥＶ以外のシステムコンポーネントがボトルネックとなる事が考えられる。ＰＤＥＶ以外のシステムコンポーネントがボトルネックになっている場合は、そのボトルネックを満足するだけのＰＤＥＶのみ起動させることでも、システム性能に悪影響を与えずにクエリ処理を進めることができる。上述したシステムボトルネック値（図１１に例示の性能１１０２）は、ＰＤＥＶ以外のシステムコンポーネントがボトルネックになる場合も含めて考慮した値である。このため、総起動状態時間を一層抑えること、つまり、更なる省電力化が期待できる。
【００８９】
以上によれば、アクセスパスを１以上のクエリ処理ブロックに分割することは、次の意義がある。すなわち、同時実行可能な処理範囲というクエリ処理ブロックが定まることで、プラン全体という広い範囲ではなく、クエリ処理ブロックという狭い範囲で、構成が適切か否か、具体的には、クエリ処理ブロックにおける全てのＤＢ処理を同時実行することが最も実行コストが低いか否かをチェックすることが可能となる。そこで、クエリ処理ブロック毎に、そのクエリ処理ブロックにおけるＤＢ処理の処理時間、性能及び起動ＰＤＥＶ数のうちの少なくとも１つを基に、そのクエリ処理ブロックの内部構成を変更した方がより低い実行コストになるか否かが判定される。その判定結果が真の場合にそのクエリ処理ブロックの内部構成が変更される。具体的には、長時間ＤＢ処理の後段の短時間ＤＢ処理が長時間ＤＢ処理後の一括処理とされたり、後段のクエリ処理ブロックにおける表読込みの対象が前段のクエリ処理ブロックで読込みの対象とされた表の一部分（一時表）とされたり、システムボトルネック値を基にＤＢ処理実行順序及びＰＤＥＶ起動順序が決定されたりする。このようにして、クエリ処理ブロック単位で、より低実行コストのプランとすることができる。なお、「クエリ処理ブロックの内部構成」とは、ＤＢ処理の実行順序と、一時表読書き処理の追加と、ＤＢ処理のためのＰＤＥＶの起動順序である。
【実施例２】
【００９０】
実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略又は簡略する。
【００９１】
実施例２では、アクセスパス選択部１３１が、Ｓ５２１において、図１４に示す流れでアクセスパスを生成（探索）し、生成されたアクセスパスを選択する。
【００９２】
図１４は、実施例２に係るアクセスパス選択の流れの一例の詳細を示す。なお、以下の説明では、アクセスパス確定までの木（生成途中の木）を、「実行木」と呼ぶ。
【００９３】
Ｓ２００１で、アクセスパス選択部１３１が、受け付けたクエリを基に、表結合をリストアップする。同一表の複数回読込みがある場合、複数の表結合の各々に、同一表が結合対象として属する。
【００９４】
Ｓ２００２で、アクセスパス選択部１３１が、実行木に未追加の表があるか否かを判定する。
【００９５】
Ｓ２００２の判定結果が真の場合、Ｓ２００３で、アクセスパス選択部１３１が、未追加の表が属する表結合のうち、追加後の実行木全体の実行コストが最も低い表結合を実行木に追加する。Ｓ２００３の後、処理が、Ｓ２００２に戻る。なお、各表結合の実行コストは、図１０に例示の処理時間管理テーブル１０００を基に特定可能である。
【００９６】
Ｓ２００２の判定結果が偽の場合、アクセスパスが確定し、アクセスパス選択部１３１は、そのアクセスパスを選択する。
【００９７】
図１４において、実行木は、例えば次のように成長する。まず、アクセスパス選択部１３１は、結合可能な一表同士の結合を示す実行木（図１５）を生成する。次に、アクセスパス選択部１３１は、複数の表結合（図１６〜図１９）のうち、最も実行コストが低い表結合（図１６）を選択する。このようにして図４に例示のアクセスパスが生成される。
【００９８】
本実施例によれば、実行木の成長のための表結合の追加の都度に、追加後の実行木全体の実行コストが最も低い表結合が追加対象として選択される。この実行コストは、クエリ処理ブロックを用いた最適化後の実行コストを用いてもよい。このようにして成長し生成されたアクセスパス（暫定プラン案）が、後に、クエリ処理ブロック単位で構成変更され、実行プラン案が確定する。このため、実行プラン案の実行コストが適切であることの可能性がより高まることが期待できる。また、サブクエリや導出表を含む場合など、複数の実行木が並列に成長してもよいし、先に導出表やサブクエリの実行木を成長させた後に、主クエリの実行木を成長させてもよい。実行木に追加される処理は、表結合だけでなく導出表であってもよい。その場合には、導出表を表す実行木がクエリ全体を表す実行木に追加される事となる。なお、ソート処理の位置など含めて、実行木の実行コスト算出を行ってもよい。
【実施例３】
【００９９】
実施例３を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略又は簡略する（なお、実施例３は、実施例２に適用されてもよい）。
【０１００】
実施例３では、ＤＢＭＳ１１５は、外部機器からのイベントを受け付けるイベント受付部１２５を備える。管理テーブル生成部１３７が、各クエリ処理ブロックについて、当該クエリ処理ブロックの消費電力と、当該クエリ処理ブロックの処理中断時の消費電力とを算出し、その算出結果を表す消費電力管理テーブル２１００（図２１参照）を生成する。複数のクエリ処理がＤＢＭＳ１１５で既に実行中の状態で、イベント受付部１２５がクエリ処理中断イベントを受け付けた場合に、クエリ実行部１４０が、消費電力管理テーブル２１００を基に、中断するクエリを選択する。クエリ処理中断イベントの例としては、外部機器によるシステム消費電力閾値の超過がある。
【０１０１】
図２０は、実施例３に係るＤＢサーバの構成例である。
【０１０２】
上述したように、ＤＢＭＳ１１５が、イベント受付部１２５を更に有している。
【０１０３】
実施例３では、管理テーブル生成部１３７が、Ｓ５２７において、実行プランのクエリ処理ブロックに対して、クエリ処理ブロックの処理に必要な消費電力とクエリ処理ブロックの処理中断に必要な消費電力を算出して、その算出結果を表す情報の一例である消費電力管理テーブル２１００を管理テーブル群１３８に格納する。クエリ処理ブロックの処理中断は、クエリ処理ブロックから生成される処理結果を一時表に書込んで、中断対象のクエリ処理ブロック処理が完了後にはクエリ中断させることで実現する。中断処理中は、処理結果が書込まれる一時表の格納先記憶デバイスを起動させるため、消費電力が、中断処理前より一時的に増加する。
【０１０４】
複数クエリが既に実行中の状態で、イベント受付部１２５が、外部機器からの消費電力閾値の超過などのイベントを受け付けた場合、消費電力管理テーブル２１００と、クエリ実行部１４０が保持する処理中のクエリ処理ブロック情報から、中断させるクエリを選択する。この中断させるクエリ選択の例として、消費電力管理テーブル２１００から、消費電力が大きいクエリ処理ブロックのクエリから順にクエリ中断させる処理を、消費電力超過イベントを受け付けなくなるまで繰り返す事が考えられる。なお、受け付けた消費電力超過イベントに超過消費電力の数値情報が付与されていれば、この情報から消費電力の削減必要値を算出し、その算出値を満たす最小数のクエリを管理テーブル群１３８の情報を用いて中断させるクエリとして選択してもよい。クエリ実行部１４０が、選択したクエリ（中断対象のクエリ）を中断させる。
【０１０５】
なお、クエリ受付部１２０の新規クエリ受付時に、消費電力計からの消費電力情報と、その新規クエリのクエリ処理ブロック毎の消費電力と、実行中クエリおよび新規クエリの優先度情報とを基に、クエリ実行部１４０が、実行中クエリの中断や新規クエリの実行開始を行ってもよい。
【０１０６】
図２１は、消費電力管理テーブル２１００の一例である。
【０１０７】
消費電力管理テーブル２１００は、クエリ処理ブロック毎にエントリを有し、各エントリは、クエリ処理ブロック名２１０１、消費電力２１０２及び中断消費電力２１０３といった情報を保持する。クエリ処理ブロック名２１０１は、クエリ処理ブロックの名前を示す。消費電力２１０２は、クエリ処理ブロックが処理中の消費電力を示す。中断消費電力２１０３は、クエリ処理を当該クエリ処理ブロックで中断させた時の消費電力を示す。
【０１０８】
本実施例によれば、複数クエリが既に実行中の状態でシステムの消費電力が一定値を超えた際に、ＤＢＭＳ１１５がシステム消費電力を一定値以下になるようにクエリを中断させることができる。これにより、システム消費電力を一定値以下にするためのクエリのみを中断させて後ほど再実行させるため、処理時間の増大を抑えながらシステムの最大消費電力を一定値以下に抑える事が可能になる。
【０１０９】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、ＤＢの格納についてカラムストアが採用されている場合、各表１８１について、カラム単位で、サイズ及び位置等がＤＢ管理テーブルにおいて管理されてよく、そのようなＤＢ管理テーブルを基に、処理毎の処理時間や起動ＰＤＥＶ数が定義されてよい。
【符号の説明】
【０１１０】
１００…ＤＢサーバ
【図１】
2018169644.tif 000003
【図２】
2018169644.tif 000004
【図３】
2018169644.tif 000005
【図４】
2018169644.tif 000006
【図５】
2018169644.tif 000007
【図６】
2018169644.tif 000008
【図７】
2018169644.tif 000009
【図８】
2018169644.tif 000010
【図９】
2018169644.tif 000011
【図１０】
2018169644.tif 000012
【図１１】
2018169644.tif 000013
【図１２】
2018169644.tif 000014
【図１３】
2018169644.tif 000015
【図１４】
2018169644.tif 000016
【図１５】
2018169644.tif 000017
【図１６】
2018169644.tif 000018
【図１７】
2018169644.tif 000019
【図１８】
2018169644.tif 000020
【図１９】
2018169644.tif 000021
【図２０】
2018169644.tif 000022
【図２１】
2018169644.tif 000023