(57)【要約】【課題】一時表のサイズ（又はその他の原因）によっては却って消費電力が高くなり得る。【解決手段】クエリがＮ個（Ｎは３以上の整数）の関係表の結合を示している場合、データベース管理システムが、一時表を生成して当該一時表を第一のアクセスコストの記憶デバイスユニットに格納する第一のクエリプラン候補と、一時表を生成して当該一時表を第一のアクセスコストよりも高い第二のアクセスコストの記憶デバイスユニットに格納する第二のクエリプラン候補と、一時表を生成せずパイプラインでＮ個の関係表を結合する第三のクエリプラン候補との各々について、クエリ実行に関わる消費電力量に基づくクエリコストを算出し、相対的にクエリコストが低いクエリプラン候補を選択し、当該クエリプラン候補に基づきクエリを実行する。【選択図】図１
2020021417.tif 000002
【特許請求の範囲】
【請求項１】
複数の関係表を含むデータベースに対するクエリをクエリ発行元から受け付けるクエリ受付部と、
前記受け付けたクエリに基づいて当該クエリを実行するために必要なクエリプランを生成するクエリプラン生成部と、
前記生成されたクエリプランに基づいて前記クエリを実行し前記クエリの実行結果を前記クエリ発行元に返すクエリ実行部と
を有し、
前記クエリが、前記複数の関係表のうちのＮ個（Ｎは３以上の整数）の関係表の結合を示している場合、
前記クエリプラン生成部が、
第一、第二及び第三のクエリプラン候補を含む複数のクエリプラン候補を生成し、
前記複数のクエリプラン候補の各々について、当該クエリプラン候補に基づき前記クエリを実行する際のコストであり当該クエリプラン候補に基づくクエリ実行に関わる消費電力量に基づくコストであるクエリコストを算出し、
前記複数のクエリプラン候補から相対的にクエリコストが低いクエリプラン候補を選択し、
前記生成されたクエリプランは、前記選択されたクエリプラン候補であり、
前記第一のクエリプラン候補は、前記Ｎ個の関係表のうちのＭ個（Ｍは２以上且つＮ未満の整数）の関係表の結合結果としての一時表を生成し前記一時表を第一のアクセスコストの記憶デバイスユニットに格納することを経て前記Ｎ個の関係表の結合結果を得るクエリプランであり、前記第一のアクセスコストが、前記第一のクエリプラン候補のクエリコストに影響し、
前記第二のクエリプラン候補は、前記一時表を生成し前記第一のアクセスコストよりも高い第二のアクセスコストの記憶デバイスユニットに前記一時表を格納することを経て前記Ｎ個の関係表の結合結果を得るクエリプランであり、前記第二のアクセスコストが、前記第二のクエリプラン候補のクエリコストに影響し、
前記第三のクエリプラン候補は、前記一時表を生成すること無しに前記Ｎ個の関係表の結合結果を得るクエリプランである、
データベース管理システム。
【請求項２】
前記複数のクエリプラン候補の各々について、前記クエリコストは、当該クエリプラン候補の実行にかかる時間である実行時間に基づく、
請求項１に記載のデータベース管理システム。
【請求項３】
前記複数のクエリプラン候補の各々について、当該クエリプラン候補に基づくクエリ実行に関わる消費電力量は、当該クエリプラン候補に基づくクエリ実行にかかる実行時間と、当該クエリプラン候補に基づくクエリ実行での消費電力とに基づき、
前記実行時間は、下記のうちの少なくとも一つに基づき、
当該クエリプラン候補の実行における一つ以上のデータベース演算子の各々について、当該データベース演算子においてアクセスされる表部分のサイズ、及び、当該表部分を格納した記憶領域の容量、の少なくとも一方、
当該クエリプラン候補の実行における一つ以上のデータベース演算子の各々について、当該データベース演算子でのスループット、及び、当該データベース演算子でのレイテンシ、のうちの少なくとも一方、
前記消費電力は、当該クエリプラン候補の実行においてアクセスされる一つ以上の記憶デバイスの消費電力と、当該一つ以上の記憶デバイスを有する一つ以上の装置の消費電力とのうちの少なくとも一つに基づく、
請求項１に記載のデータベース管理システム。
【請求項４】
実行時間の上限があり、
前記クエリプラン生成部は、実行時間が前記上限以下であるクエリプラン候補から相対的にクエリコストが低いクエリプラン候補を選択する、
請求項２又は３に記載のデータベース管理システム。
【請求項５】
前記クエリプラン生成部は、
実行時間が前記上限以下であるクエリプラン候補が一つ以上ある場合、当該一つ以上のクエリプラン候補から相対的にクエリコストが低いクエリプラン候補を選択し、
実行時間が前記上限以下であるクエリプラン候補が無いが、実行時間が前記上限を超えることを許容することの設定がある場合、実行時間が前記上限を超えるクエリプラン候補から相対的にクエリコストが低いクエリプラン候補を選択する、
請求項４に記載のデータベース管理システム。
【請求項６】
クエリプラン候補の数は、結合結果としての一時表を生成することが可能なデータベース演算子である結合可能箇所の数に依存する、
請求項１乃至５のうちのいずれか１項に記載のデータベース管理システム。
【請求項７】
前記クエリプラン候補の数は、更に、一時表の格納先の数に依存する、
請求項６に記載のデータベース管理システム。
【請求項８】
前記第一のアクセスコストの記憶デバイスユニットに関し、当該第一のアクセスコストは、当該記憶デバイスユニットへアクセスする場合のレイテンシ、スループット、及び、当該記憶デバイスユニットの容量、うちの少なくとも一つに基づき、
前記第二のアクセスコストの記憶デバイスユニットに関し、当該第二のアクセスコストは、当該記憶デバイスユニットへアクセスする場合のレイテンシ、スループット、及び、当該記憶デバイスユニットの容量、うちの少なくとも一つに基づき、
前記第一のアクセスコストの基になる前記レイテンシ、前記スループット、及び前記容量のうちの少なくとも一つは、前記第二のアクセスコストの基になる前記レイテンシ、前記スループット、及び前記容量のうちの少なくとも一つよりも優れている、
請求項１乃至６のうちのいずれか１項に記載のデータベース管理システム。
【請求項９】
前記Ｍ個の関係表のうちの少なくとも一個の関係表が、第一の記憶デバイスユニットに格納されており、
前記Ｎ個の関係表のうち前記Ｍ個の関係表以外のうちの少なくとも一個の関係表が、第二の記憶デバイスユニットに格納されており、
前記選択されたクエリプラン候補が、前記第一のクエリプラン候補と前記第二のクエリプラン候補のうちのいずれかである場合、前記クエリ実行部は、
前記一時表の生成のために前記Ｍ個の関係表を参照する間、前記第二の記憶デバイスユニットの状態を、省電力状態に変更し、
前記Ｍ個の関係表以外の関係表を参照する間、前記第一の記憶デバイスユニットの状態を、省電力状態に変更する、
請求項１に記載のデータベース管理システム。
【請求項１０】
複数の関係表を含むデータベースに対するクエリをクエリ発行元から受け付け、
前記受け付けたクエリに基づいて当該クエリを実行するために必要なクエリプランを生成し、
前記生成されたクエリプランに基づいて前記クエリを実行し前記クエリの実行結果を前記クエリ発行元に返し、
前記クエリが、前記複数の関係表のうちのＮ個（Ｎは３以上の整数）の関係表の結合を示している場合、
前記クエリプランの生成において、
第一、第二及び第三のクエリプラン候補を含む複数のクエリプラン候補を生成し、
前記複数のクエリプラン候補の各々について、当該クエリプラン候補に基づき前記クエリを実行する際のコストであり当該クエリプラン候補に基づくクエリ実行に関わる消費電力量に基づいたコストであるクエリコストを算出し、
前記複数のクエリプラン候補から相対的にクエリコストが低いクエリプラン候補を選択し、
前記生成されたクエリプランは、前記選択されたクエリプラン候補であり、
前記第一のクエリプラン候補は、前記Ｎ個の関係表のうちのＭ個（Ｍは２以上且つＮ未満の整数）の関係表の結合結果としての一時表を生成し前記一時表を第一のアクセスコストの記憶デバイスユニットに格納することを経て前記Ｎ個の関係表の結合結果を得るクエリプランであり、前記第一のアクセスコストが、前記第一のクエリプラン候補のクエリコストに影響し、
前記第二のクエリプラン候補は、前記一時表を生成し前記第一のアクセスコストよりも高い第二のアクセスコストの記憶デバイスユニットに前記一時表を格納することを経て前記Ｎ個の関係表の結合結果を得るクエリプランであり、前記第二のアクセスコストが、前記第二のクエリプラン候補のクエリコストに影響し、
前記第三のクエリプラン候補は、前記一時表を生成すること無しに前記Ｎ個の関係表の結合結果を得るクエリプランである、
データベース管理方法。
【請求項１１】
前記複数のクエリプラン候補の各々について、前記クエリコストは、当該クエリプラン候補の実行にかかる時間である実行時間に基づく、
請求項１０に記載のデータベース管理方法。
【請求項１２】
実行時間の上限があり、
前記クエリプランの生成では、実行時間が前記上限以下であるクエリプラン候補から相対的にクエリコストが低いクエリプラン候補を選択する、
請求項１１に記載のデータベース管理方法。
【請求項１３】
クエリプラン候補の数は、結合結果としての一時表を生成することが可能な処理である結合可能箇所の数に依存する、
請求項１０乃至１２のうちのいずれか１項に記載のデータベース管理方法。
【請求項１４】
前記第一のアクセスコストの記憶デバイスユニットに関し、当該第一のアクセスコストは、当該記憶デバイスユニットへアクセスする場合のレイテンシ、スループット、及び、当該記憶デバイスユニットの容量、うちの少なくとも一つに基づき、
前記第二のアクセスコストの記憶デバイスユニットに関し、当該第二のアクセスコストは、当該記憶デバイスユニットへアクセスする場合のレイテンシ、スループット、及び、当該記憶デバイスユニットの容量、うちの少なくとも一つに基づき、
前記第一のアクセスコストの基になる前記レイテンシ、前記スループット、及び前記容量のうちの少なくとも一つは、前記第二のアクセスコストの基になる前記レイテンシ、前記スループット、及び前記容量のうちの少なくとも一つよりも優れている、
請求項１０乃至１３のうちのいずれか１項に記載のデータベース管理方法。
【請求項１５】
前記Ｍ個の関係表のうちの少なくとも一個の関係表が、第一の記憶デバイスユニットに格納されており、
前記Ｎ個の関係表のうち前記Ｍ個の関係表以外のうちの少なくとも一個の関係表が、第二の記憶デバイスユニットに格納されており、
前記選択されたクエリプラン候補が、前記第一のクエリプラン候補と前記第二のクエリプラン候補のうちのいずれかである場合、前記クエリの実行の際に、
前記一時表の生成のために前記Ｍ個の関係表を参照する間、前記第二の記憶デバイスユニットの状態を、省電力状態に変更し、
前記Ｍ個の関係表以外の関係表を参照する間、前記第一の記憶デバイスユニットの状態を、省電力状態に変更する、
請求項１０乃至１４のうちのいずれか１項に記載のデータベース管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、データ処理に関し、例えば、データベース管理に関する。
【背景技術】
【０００２】
近年、いわゆるビッグデータ分析又はその他のデータ処理に関し、消費電力の上昇が懸念されている。
【０００３】
データベースに格納されている複数の関係表のうちの三個以上の関係表を結合するクエリを実行する場合、全ての関係表をパイプラインで結合するよりも一時表を一旦生成し、当該一時表を用いて残りの関係表を結合する方が、消費電力を低減できることがある。結合済の関係表に対するＩ／Ｏ（Input/Output）を抑制できるため、当該関係表を格納している記憶デバイスユニットの状態を省電力状態にすることができるからである。なお、「一時表」は、一部の関係表の結合結果である。「記憶デバイスユニット」は、一つ以上の記憶デバイスを意味する。
【０００４】
データベース管理の省電力化に関する技術は、特許文献１に開示されており、一時表に関する技術は、特許文献２に開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開2008-210003号公報
【特許文献２】国際公開第2011/118425号パンフレット
【発明の概要】
【発明が解決しようとする課題】
【０００６】
一時表を用いて残りの関係表を結合する方が常に消費電力を低減できるとは限らない。例えば、一時表のサイズによっては、消費電力の低い記憶デバイスユニット（例えば主記憶メモリ）に一時表を格納できず、消費電力の高い記憶デバイスユニット（例えばＨＤＤ（Hard Disk Drive））に一時表を格納することとなり、却って消費電力量が高くなることがあり得る。つまり、一時表のサイズによって一時表の格納先が変わり、その結果、消費電力量が高くなることがあり得る。特許文献１及び２のいずれも、このような課題やこのような課題を解決する手段を開示も示唆もしていない。
【課題を解決するための手段】
【０００７】
クエリがＮ個（Ｎは３以上の整数）の関係表の結合を示している場合、データベース管理システムは、第一、第二及び第三のクエリプラン候補を含む複数のクエリプラン候補を生成し、各クエリプラン候補の各々についてクエリコストを算出する。データベース管理システムは、複数のクエリプラン候補から相対的にクエリコストが低い（例えば、クエリコストが最も低い）クエリプラン候補を選択し、選択されたクエリプラン候補に基づくクエリを実行する。各クエリプラン候補について、クエリコストは、当該クエリプラン候補に基づきクエリを実行する際のコストであり当該クエリプラン候補に基づくクエリ実行に関わる消費電力量に基づいたコストである。第一のクエリプラン候補は、Ｎ個の関係表のうちのＭ個（Ｍは２以上且つＮ未満の整数）の関係表の結合結果としての一時表を生成し当該一時表を第一のアクセスコストの記憶デバイスユニットに格納することを経てＮ個の関係表の結合結果を得るクエリプランである。第二のクエリプラン候補は、上記一時表を生成し第一のアクセスコストよりも高い第二のアクセスコストの記憶デバイスユニットに当該一時表を格納することを経てＮ個の関係表の結合結果を得るクエリプランである。第三のクエリプラン候補は、上記一時表を生成すること無しにＮ個の関係表の結合結果を得るクエリプランである。第一のアクセスコストが、第一のクエリプラン候補のクエリコストに影響する。第二のアクセスコストが、第二のクエリプラン候補のクエリコストに影響する。
【０００８】
なお、「第一のアクセスコストの記憶デバイスユニット」と「第二のアクセスコストの記憶デバイスユニット」は、アクセスコストが異なっていれば記憶デバイスユニットそれ自体は同一でも異なっていてもよい。同一の記憶デバイスユニットであっても、クエリプランによってアクセス方法が異なると、アクセスコストが異なる。例えば、ＨＤＤ（Hard Disk Drive）に対する連続参照と非連続参照ではＩ／Ｏ性能（アクセス性能）が異なる。
【発明の効果】
【０００９】
クエリの実行のための消費電力量を低く抑えることの確実性を高めることができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の一実施形態に係るシステム全体の構成例を示す図である。
【図２】クエリプラン候補の生成の一例を示す概要図である。
【図３】一実施形態に係るデータベース管理システムが奏する効果の一例を示す概要図である。
【図４】ユーザ定義情報の構成を示す図である。
【図５】一実施形態に係るデータベース管理システムが行う処理の全体の流れを示すフローチャートである。
【図６】非パイプライン化拡張処理（図５のＳ５０３）の流れを示すフローチャートである。
【図７】クエリプラン候補の拡張の模式図である。
【図８】候補選択処理（図５のＳ５０５）の流れを示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下の説明では、データベース管理システムを「ＤＢＭＳ」と言い、ＤＢＭＳを有するサーバを「ＤＢサーバ」と言う。ＤＢＭＳに対するクエリの発行元は、ＤＢＭＳの外部のコンピュータプログラム（例えばアプリケーションプログラム）でよい。外部のコンピュータプログラムは、ＤＢサーバ内で実行されるプログラムでもよいし、ＤＢサーバに接続された装置（例えばクライアント）で実行されるプログラムでもよい。
【００１２】
また、以下の説明では、「インターフェースユニット」は、一つ以上のインターフェースである。一つ以上のインターフェースは、一つ以上の同種のインターフェースデバイス（例えば一つ以上のＮＩＣ（Network Interface Card））であってもよいし二つ以上の異種のインターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１３】
また、以下の説明では、「記憶デバイスユニット」は、一つ以上の記憶デバイスである。記憶デバイスは、揮発性メモリ（例えば、主記憶メモリ）でもよいし、不揮発性メモリ（例えば、フラッシュメモリ又はそれを有するＳＳＤ（Solid State Drive））でもよいし、ディスクデバイス（例えば、ＨＤＤ（Hard Disk Drive））でもよい。記憶デバイスユニットでは、全て同種の記憶デバイスの存在でもよいし、異種の記憶デバイスの混在でもよい。
【００１４】
また、以下の説明では、「プロセッサユニット」は、一つ以上のプロセッサである。少なくとも一つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）である。プロセッサは、処理の一部又は全部を行うハードウェア回路を含んでもよい。
【００１５】
また、以下の説明では、「ｋｋｋ部」の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサユニットによって実行されることで実現されてもよいし、一つ以上のハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit））によって実現されてもよい。プログラムがプロセッサユニットに実行されることによって機能が実現される場合、定められた処理が、適宜に記憶デバイスユニット及び／又はインターフェースユニットを用いながら行われるため、機能はプロセッサユニットの少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサユニットあるいはそのプロセッサユニットを有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体（例えば非一時的な記録媒体）であってもよい。各機能の説明は一例であり、複数の機能が１つの機能にまとめられたり、１つの機能が複数の機能に分割されたりしてもよい。
【００１６】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通部分を使用し、同種の要素を区別する場合は、参照符号を使用することがある。例えば、記憶装置を区別しない場合には、「記憶装置１５０」と言い、記憶装置を区別する場合には、「記憶装置１５０Ａ」、「記憶装置１５０Ｂ」、「記憶装置１５０Ｃ」のように言う。
【００１７】
以下、図面を参照しながら、本発明の一実施形態を説明する。なお、以下の説明により本発明が限定されるものではない。
【００１８】
図１は、本発明の一実施形態に係るＤＢＭＳを実行するＤＢサーバを含むシステム全体の構成例を示す図である。
【００１９】
ＤＢサーバ１００は、計算機システムの一例である。ＤＢサーバ１００は、例えば、パーソナルコンピュータ、ワークステーション又はメインフレームであってよいし、これらの計算機において仮想化プログラムによって構成された仮想的な計算機であってよいし、クラウド環境（例えば、インターフェースデバイス、記憶デバイス及びプロセッサといった複数の計算リソースを含んだ計算リソースプール）上で実現されてもよい。
【００２０】
ＤＢサーバ１００に、クライアント１９０及びストレージシステム１１０が接続される。
【００２１】
具体的には、例えば、ＤＢサーバ１００に、ネットワーク１６０Ｄを介してクライアント１９０が接続される。クライアント１９０は、クエリ発行元の一例であり、ＤＢサーバ１００にデータベースに対するクエリを発行する。
【００２２】
ストレージシステム１１０は、記憶装置１５０を有している。ストレージシステム１１０は、ＤＢサーバ１００からＩ／Ｏ要求を受けた場合には、当該Ｉ／Ｏ要求に応答して、記憶装置１５０に対するデータのＩ／Ｏを行う。ストレージシステム１１０として、例えば、記憶装置１５０Ａを有するストレージシステム１１０Ａと、記憶装置１５０Ｂを有するストレージシステム１１０Ｂとがある。ＤＢサーバ１００に、ネットワーク１６０Ａを介してストレージシステム１１０Ａが接続される。ＤＢサーバ１００に、ネットワーク１６０Ｂを介してストレージシステム１１０Ｂが接続される。ストレージシステム１１０Ａとストレージシステム１１０Ｂ同士が、ネットワーク１６０Ｃを介して接続され、ネットワーク１６０Ｃが、ＤＢサーバ１００に接続される。
【００２３】
ネットワーク１６０Ａ〜１６０Ｄは、通信速度及び消費電力の異なるネットワークでもよいし、ネットワーク１６０Ａ〜１６０Ｄのうちの少なくとも二つが同一のネットワークでもよい。例えば、ネットワーク１６０Ａ及び１６０Ｂの各々は、ＦＣ（Fibre Channel）ネットワークでよく、ネットワーク１６０Ｃは、イーサネット（登録商標）又はInfiniBandでよく、ネットワーク１６０Ｄは、ＬＡＮ（Local Area Network）でよい。
【００２４】
ＤＢサーバ１００は、インターフェースユニット１０１、記憶装置１５０Ｃ及びそれらに接続されたプロセッサユニット１０２を有する。ＤＢサーバ１００は、キーボードやポインティングデバイス等の入力デバイス（図示しない）と液晶ディスプレイ等の出力デバイス（図示しない）を有してもよい。入力デバイス及び出力デバイスは、プロセッサユニット１０２に接続されていてよい。入力デバイスと出力デバイスは一体であってもよい。
【００２５】
インターフェースユニット１０１が、ネットワーク１６０Ａ〜１６０Ｄに接続される。インターフェースユニット１０１経由で（ネットワーク１６０Ａ〜１６０Ｄ経由で）、ＤＢサーバ１００は、ストレージシステム１１０Ａ、１１０Ｂ及びクライアント１９０と通信することができる。
【００２６】
記憶装置１５０Ａ〜１５０Ｃのいずれも、一つ以上の記憶デバイス１７０を有する。記憶装置１５０Ａ〜１５０Ｃの構成は同一でも異なっていてもよい。同種の（例えばＩ／Ｏ性能が同等の）二つ以上の記憶デバイスで構成された記憶装置１５０があってもよいし、異種の（例えばＩ／Ｏ性能が異なる）二つ以上の記憶デバイスで構成された記憶装置１５０があってもよい。後者の記憶装置１５０の一例が、記憶装置１５０Ｂである。記憶装置１５０Ｂは、ＨＤＤ１７０Ｈ、ＳＳＤ（Solid State Drive）１７０Ｓ、フラッシュメモリ１７０Ｆ及びＤＲＡＭ（Dynamic Random Access Memory）１７０Ｄといった複数種類の記憶デバイスを有する。ＨＤＤ１７０Ｈ及びＳＳＤ１７０Ｓは、補助記憶ドライブの一例である。フラッシュメモリ１７０Ｆは、ＮＶＭ（Non-Volatile Memory）の一例である。ＤＲＡＭ１７０Ｄは、主記憶メモリの一例である。記憶装置１５０Ａ〜１５０Ｃの少なくとも一つに、データベースが格納される。
【００２７】
記憶装置１５０Ｃが、プロセッサユニット１０２によって実行されるプログラムと、プログラムが使用するデータを記憶する。プログラムとして、例えば、ＤＢＭＳ１３０及びＯＳ（Operating System）１２０がある。ＤＢＭＳ１３０が、クライアント１９０からクエリを受け、そのクエリを実行する。そのクエリの実行において、ＤＢＭＳ１３０は、データベースからデータを読み込むために、又は、データベースにデータを書き込むために、Ｉ／Ｏ（Input/Output）要求をＯＳ１２０に発行する。ＯＳ１２０は、そのＩ／Ｏ要求を受け、そのＩ／Ｏ要求に基づくＩ／Ｏ要求を記憶装置１５０へ発行し、結果をＤＢＭＳ１３０に返す。
【００２８】
ＤＢＭＳ１３０は、クエリ受付部１３１、クエリプラン生成部１３２及びクエリ実行部１３３を有し、ユーザ定義情報１４５を管理する。なお、ＤＢＭＳ１３０の構成は一例に過ぎない。例えば、ある構成要素は複数の構成要素に分割されていてもよく、複数の構成要素が１つの構成要素に統合されていてもよい。例えば、後述のコスト算出部１４２及び候補選択部１４３は、クエリプラン生成部１３２の外に存在してもよい。
【００２９】
クエリ受付部１３１は、データベースに対するクエリをクライアント１９０から受け付ける。クエリは、例えば、ＳＱＬ（Structured Query Language）によって記述される。
【００３０】
クエリプラン生成部１３２は、受け付けたクエリに基づいて当該クエリを実行するために必要なクエリプランを生成する。クエリプランは、例えば、一つ以上のデータベース演算子と、データベース演算子の実行順序の関係を含む情報である。クエリプランは、例えば、データベース演算子をノード、データベース演算子の実行順序の関係をエッジとする木構造で表されることがある。
【００３１】
本実施形態において、「クエリプランを生成」とは、一つ以上のクエリプラン候補を生成し当該一つ以上のクエリプラン候補から実行対象とする一つのクエリプラン候補を選択することである。クエリプラン生成部１３２は、候補生成部１４１、コスト算出部１４２及び候補選択部１４３を有する。候補生成部１４１は、一つ以上のクエリプラン候補を生成する。コスト算出部１４２は、当該一つ以上のクエリプラン候補の各々についてクエリコストを算出する。各クエリプラン候補について、クエリコストは、当該クエリプラン候補に基づきクエリを実行する際のコストであり、当該クエリプラン候補に基づくクエリ実行に関わる消費電力量に基づいたコストである。クエリコストが高い程、消費電力量が大きい（及び／又は、クエリの実行時間が長い）傾向にある。候補選択部１４３は、一つ以上のクエリプラン候補から相対的にクエリコストが低いクエリプラン候補を選択する。なお、「相対的にクエリコストが低いクエリプラン候補」は、例えば、昇順のクエリコストのうち上位Ｘ％（例えばＸは０より大きい所定の数値）に属するいずれかのクエリプラン候補でよい。本実施形態では、「相対的にクエリコストが低いクエリプラン候補」は、典型的には（例えば、いずれのクエリプラン候補も後述の実行時間、最大電力及び消費電力量のいずれの上限も超えていなければ）、最もクエリコストが低いクエリプラン候補である。
【００３２】
クエリ実行部１３３は、生成されたクエリプラン（選択されたクエリプラン候補）に基づいてクエリを実行し当該クエリの実行結果をクライアント１９０に返す。また、クエリ実行部１３３は、当該クエリプランに基づき、適宜、一部の記憶デバイス１７０の状態を省電力状態に変更したり、別の一部の記憶デバイス１７０の省電力状態を解除したりすることができる。記憶デバイス１７０の状態を変更するために、クエリ実行部１３３は、当該記憶デバイス１７０に対する指示（例えば、当該記憶デバイス１７０が基になっている論理デバイスを指定した状態遷移指示）を送信することができる。当該指示に応答して、記憶デバイス１７０（又は、ストレージシステム１１０）により、当該記憶デバイス１７０の状態が遷移する。なお、クエリ実行において、クエリ実行部１３３は、データベース演算子を実行するためのタスクを生成し、生成されたタスクを実行することで、そのタスクに対応したデータベース演算子に必要なデータの読込み要求を発行することができる。クエリ実行部１３３は、一のタスクで複数のデータベース演算子を実行してもよい。タスクの実装としては、例えば、ＯＳ１２０が実現するプロセスやカーネルスレッド等のほか、ライブラリ等が実現するユーザスレッドを用いてよい。
【００３３】
ユーザ定義情報１４５は、ＤＢＭＳ１３０のユーザにより定義されクエリコストの算出に使用される情報である。ユーザ定義情報１４５の少なくとも一部は、クエリ受付部１３１が受け付けたクエリに記述されていてもよい。ユーザ定義情報１４５は、例えば、一時表の格納先、及び、クエリコストの算出に使用されるパラメータ（例えば後述の実行時、最大電力及び消費電力量）の係数及び上限を示す情報を含む。
【００３４】
以上が、本実施形態に係るシステム全体についての説明である。
【００３５】
本実施形態において、データベースは、複数個の関係表を含む。複数個の関係表が、記憶装置１５０Ａ〜１５０Ｃの少なくとも一つにおける複数の記憶デバイス１７０に格納される。また、選択されたクエリプラン候補によっては、一時表が生成されて、記憶装置１５０Ａ〜１５０Ｃの少なくとも一つに格納される。以下の説明では、関係表と一時表を「表」と総称することがある。一個の表が、一つの記憶デバイス１７０に収まることもあれば、二つ以上の記憶デバイス１７０に跨ることもある。各表について、当該表が格納される一つ以上の記憶デバイス１７０を、以下、「記憶デバイス群」と言うことがある。複数個の表が共通の記憶デバイス群に格納されてもよい。記憶装置１５０及び記憶デバイス群のいずれも、記憶デバイスユニットの一例でよい。記憶デバイス群は、一つの記憶装置１５０に存在してもよいし、二つ以上の記憶装置１５０に跨ってもよい。関係表及び一時表の格納先は任意でもよいし予め定義されていてもよい。例えば、データベース（複数個の関係表）は、ストレージシステム１１０Ａの記憶装置１５０Ａに格納され、一時表は、ストレージシステム１１０Ｂの記憶装置１５０Ｂに格納されるようになっていてもよい。
【００３６】
また、図１の例によれば、記憶装置１５０Ａ〜１５０Ｃが存在するが、一部の記憶装置１５０は無くてもよい。例えば、関係表も一時表も、同一のストレージシステム１１０Ａ（又は１１０Ｂ）における記憶装置１５０Ａ（又は１１０Ｂ）に格納されてもよい。また、ストレージシステム１１０Ａ及び１１０Ｂが無く、関係表も一時表も、ＤＢサーバ１００内の記憶装置１５０Ｃに格納されてもよい。
【００３７】
以下、クエリプランの生成について、詳細に説明する。
【００３８】
図２は、クエリプラン候補の生成の一例を示す概要図である。
【００３９】
受け付けたクエリが、図２に示すクエリであるとする。当該クエリによれば、関係表Ｃ（customer表）、関係表Ｏ（order表）及び関係表Ｌ（lineitem表）という三個の関係表の結合が必要である。関係表Ｃ、Ｏ及びＬは、Ｎ個（Ｎは３以上の整数）の表の一例である。関係表Ｃ、Ｏ及びＬの少なくとも一個は、データベースにおけるインデックス経由でアクセスされてもよい。
【００４０】
候補生成部１４１は、図２に示すクエリに基づいて、複数のクエリプラン候補を生成する。複数のクエリプラン候補は、一時表を生成せずパイプラインで三個の関係表Ｃ、Ｏ及びＬを結合するクエリプラン候補（クエリプラン１（ＱＰ１））と、一時表の生成という非パイプライン化処理（データベース演算子の一例）を含むクエリプラン候補（クエリプラン２（ＱＰ２））とを含む。ＱＰ２によれば、符号d1が、非パイプライン化処理であるデータベース演算子であり、符号q1及びq2は、それぞれ、データベース演算子d1で区切られたＱＰ２の部分木である。すなわち、ＱＰ２によれば、関係表Ｃと関係表Ｏの結合結果としての一時表が生成され（部分木q1）、その後、当該一時表と残りの関係表Ｌが結合される（部分木q2）。関係表Ｃと関係表Ｏの結合結果としての一時表は、Ｍ個（Ｍは２以上且つＮ未満の整数）の関係表の結合結果としての一時表の一例である。
【００４１】
図３は、ＤＢＭＳ１３０が奏する効果の一例を示す概要図である。
【００４２】
関係表Ｃ、Ｏ及びＬが記憶装置１５０Ａに格納されているとする。具体的には、関係表Ｃが、記憶デバイス群３００−Ａ１に格納されており、関係表Ｏが、記憶デバイス群３００−Ａ２に格納されており、関係表Ｌが、記憶デバイス群３００−Ａ３に格納されているとする。
【００４３】
ＱＰ１の実行では、期間Ｔ１の間、関係表Ｃ、Ｏ及びＬそれぞれへのＩ／Ｏが、短い時間の間にインターリーブするため、記憶デバイス群３００−Ａ１〜３００−Ａ３のいずれも省電力状態にすることが難しい。なお、記憶デバイス群３００について、「省電力状態」とは、当該記憶デバイス群３００に属する少なくとも一つの記憶デバイス（例えば全ての記憶デバイス）が消費電力を低減するためＩ／Ｏ要求への応答を停止している状態（例えば、電源オフ、スリープ状態又はスタンバイ状態）である。省電力状態以外の状態は、「通常状態」と呼ばれてよい。ＱＰ１は、第三のクエリプラン候補の一例である。
【００４４】
一方、ＱＰ２の実行では、図示の通り、Ｉ／Ｏに時間的局所性を持たせることが可能となり、結果として、クエリ実行期間中に一部の記憶デバイス群３００の状態を省電力状態にすることができる。具体的には、例えば、関係表Ｃと関係表Ｏの結合処理の期間（一時表を生成する期間）Ｔ２には、クエリ実行部１３３は、関係表Ｌを格納している記憶デバイス群３００−Ａ３の状態を省電力状態にする。関係表Ｌに対するＩ／Ｏが行われないためである。作成された一時表は、当該一時表の基になった関係表Ｃ及びＯを格納するデバイス群３００−Ａ１及び３００−Ａ２以外の場所、例えば、ＤＢサーバ１００の記憶装置１５０Ｃに格納される。その後、一時表と関係表Ｌの結合処理の期間Ｔ３には、クエリ実行部１３３は、関係表Ｌを格納している記憶デバイス群３００−Ａ３の省電力状態を解除し、関係表Ｃ及びＯを格納するデバイス群３００−Ａ１及び３００−Ａ２の状態を省電力状態にする。関係表Ｌに対するＩ／Ｏが行われ、関係表Ｃ及びＯに対するＩ／Ｏが行われないためである。
【００４５】
複数のクエリプラン候補の一例であるＱＰ１及びＱＰ２の各々について、コスト算出部１４２が、クエリコストを算出する。図３の例では、ＱＰ２の方がＱＰ１よりもクエリコストが低く、故に、ＱＰ２が候補選択部１４３により選択される。
【００４６】
本実施形態では、一時表の格納先となり得る記憶デバイス群３００は、アクセスコストの異なる複数の記憶デバイス群３００のいずれかである。言い換えれば、例えば、ＱＰ２ように非パイプライン化処理が走るクエリプラン候補は、一時表の格納先として選択され得る記憶デバイス群３００毎に生成され得る。このため、本実施形態では、少なくとも、候補生成部１４１は、第一のアクセスコストの記憶デバイス群３００に一時表を格納することを含むクエリプラン候補（第一のクエリプラン候補の一例）と、第一のアクセスコストよりも高い第二のアクセスコストの記憶デバイス群３００に一時表を格納することを含むクエリプラン候補（第二のクエリプラン候補の一例）とを生成する。第一のアクセスコストが、第一のクエリプラン候補のクエリコストに影響し、第二のアクセスコストが、第二のクエリプラン候補のクエリコストに影響する。このように、本実施形態では、ＱＰ１の他に、一時表の格納先に応じた第一及び第二のクエリプラン候補が生成される。そして、それらのクエリプラン候補を含む複数のクエリプラン候補の各々についてクエリコストが算出され、複数のクエリプラン候補からクエリコストが最も低いクエリプラン候補が選択される。つまり、一時表のサイズによって一時表の格納先が変わり得ること、及び、一時表を生成することを経ることが却ってクエリコストが高くなり得ることのいずれもが考慮される。故に、クエリの実行のための消費電力量を低く抑えることの確実性を高めることができる。
【００４７】
各クエリプラン候補についてのクエリコストの算出の一例を説明する。以下、一つのクエリプラン候補を例に取る（ここから図４の説明の開始までにおいて、「対象クエリプラン候補」と言う）。
【００４８】
対象クエリプラン候補は、一つ以上のデータベース演算子（di）から構成されている。対象クエリプラン候補（データベース演算子の集合）をQとすると、Q＝d1, …, dnと表現することができる。この場合、対象クエリプラン候補（Q）について、実行時間を、数１のように表現でき、最大電力を、数２のように表現でき、消費電力量を、数３のように表現できる。
【数１】
2020021417.tif 000003
【数２】
2020021417.tif 000004
【数３】
2020021417.tif 000005
【００４９】
すなわち、対象クエリプラン候補（Q）について、実行時間、最大電力及び消費電力量は、それぞれ例えば下記の通りである。
・実行時間（例えば[sec]）は、一つ以上のデータベース演算子にそれぞれ対応した一つ以上の実行時間の総和である。
・最大電力（例えば[W]）は、一つ以上のデータベース演算子にそれぞれ対応した一つ以上の消費電力のうちの最大値である。
・消費電力量（例えば[Wsec]）は、一つ以上のデータベース演算子にそれぞれ対応した一つ以上の消費電力量の総和である。
【００５０】
また、各データベース演算子について、実行時間は、例えば下記のうちの少なくとも一つに基づく。以下、一つのデータベース演算子を例に取る（以下、「対象データベース演算子」と言う）。
・対象データベース演算子によってアクセスされる（Ｉ／Ｏがされる）表部分のサイズ、及び、当該表部分を格納した記憶領域の容量、の少なくとも一方。表部分のサイズは、例えば、当該表部分を構成するレコードの数と、一つのレコードのサイズとに基づく。表部分を格納した記憶領域の容量は、例えば、当該表部分を格納するページの数と、一つのページのサイズとに基づく。一つ以上の記憶デバイス１７０に基づく論理的な記憶領域がデータベース領域として提供され、データベース領域が、複数のページで構成され、ページ単位でアクセスがされてよい。
・対象データベース演算子でのスループット、及び、対象データベース演算子でのレイテンシ、のうちの少なくとも一方。対象データベース演算子でのスループットは、例えば、対象データベース演算子に関わる複数の機器（例えば、ストレージシステム１１０、記憶デバイス１７０、ネットワーク１６０及びＤＢサーバ１００のうちの一つ以上の機器）にそれぞれ対応した複数のスループットのうちの最小値でよい。最小のスループットの機器が対象データベース演算子のボトルネックとなり得るからである。対象データベース演算子でのレイテンシも、例えば、対象データベース演算子に関わる複数の機器にそれぞれ対応した複数のレイテンシのうちの最小値でよい。
【００５１】
また、各データベース演算子について、消費電力は、例えば下記に基づく。以下、一つのデータベース演算子を例に取る（以下、「対象データベース演算子」と言う）。
・対象クエリプラン候補の実行においてアクセスされる一つ以上の記憶デバイス１７０の消費電力と、当該一つ以上の記憶デバイス１７０を有する一つ以上の装置の消費電力とのうちの少なくとも一つ。例えば、対象データベース演算子の消費電力は、対象データベース演算子に関わる複数の機器（例えば、ストレージシステム１１０、記憶デバイス１７０、ネットワーク１６０及びＤＢサーバ１００のうちの一つ以上の機器）にそれぞれ対応した複数の消費電力の総和である。
【００５２】
また、各データベース演算子について、消費電力量は、例えば下記である。以下、一つのデータベース演算子を例に取る（以下、「対象データベース演算子」と言う）。
・対象データベース演算子の実行時間と対象データベース演算子の消費電力との積。
【００５３】
コスト算出部１４２は、対象クエリプラン候補（Q）のクエリコストを、対象クエリプラン候補についての消費電力量に基づき算出する。コスト算出部１４２は、対象クエリプラン候補のクエリコストを、対象クエリプラン候補についての消費電力量に代えて又は加えて、対象クエリプラン候補についての実行時間に基づき算出してもよい。対象クエリプラン候補のクエリコストは、消費電力量それ自体でもよい。実行時間及び消費電力量の両方にクエリコストが基づく場合、実行時間の係数（重み）を実行時間に反映すること、及び、消費電力量の係数を消費電力量に反映すること、のうちの少なくとも一つが行われてよい。
【００５４】
なお、対象クエリプラン候補が、上述した第一のクエリプラン候補である場合、対象クエリプラン候補のクエリコスト（例えば実行時間）が、第一のアクセスコスト（第一のクエリプラン候補に従う一時表格納に係るアクセスコスト）の影響を受ける。第一のアクセスコストは、例えば、一時表の格納先の記憶デバイスユニットへアクセスする場合のレイテンシ、スループット、及び、当該記憶デバイスユニットの容量、うちの少なくとも一つに基づく。同様に、対象クエリプラン候補が、上述した第二のクエリプラン候補である場合、対象クエリプラン候補のクエリコスト（例えば実行時間）が、第二のアクセスコスト（第二のクエリプラン候補に従う一時表格納に係るアクセスコスト）の影響を受ける。第二のアクセスコストは、例えば、一時表の格納先の記憶デバイスユニットへアクセスする場合のレイテンシ、スループット、及び、当該記憶デバイスユニットの容量、うちの少なくとも一つに基づく。第一のアクセスコストの基になるレイテンシ、スループット、及び容量のうちの少なくとも一つは、第二のアクセスコストの基になるレイテンシ、スループット、及び容量のうちの少なくとも一つよりも優れている。
【００５５】
対象クエリプラン候補のクエリコスト（例えば、対象クエリプラン候補の実行時間、最大電力及び消費電力量のうちの少なくとも一つ）の算出では、更に詳細なパラメータが使用されてよい。詳細なパラメータとしては、例えば、結合方法（例えば、ネステッドループジョインであるかハッシュジョインであるか）や、データベース演算子に関わる機器の稼働率等を採用することができる。
【００５６】
図４は、ユーザ定義情報１４５の構成を示す図である。
【００５７】
ユーザ定義情報１４５は、例えば、クエリ毎に存在してもよいし、二つ以上のクエリで共通でもよい。ユーザ定義情報１４５は、一時表格納先４０１、拡張フラグ４０２、強制フラグ４０３、実行時間係数４０４、消費電力量係数４０５、実行時間上限４０６、最大電力上限４０７、及び、消費電力量上限４０８といった情報要素を含む。これらの情報要素４０１〜４０８のうちの少なくとも一つが、受け付けたクエリで指定されていてもよい。以下、一つのクエリを例に取る（図４の説明において「対象クエリ」と言う）。なお、情報要素４０４〜４０８の各々の値について、図示の間隔は一例であり、図示の間隔よりも大きな間隔又は小さな間隔が採用されてもよい。
【００５８】
一時表格納先４０１は、対象クエリの実行において生成され得る一時表の格納先となり得る場所を示す。一時表格納先４０１としての値は、記憶デバイス１７０の種類及び数のうちの少なくとも一つでもよいし、一つ以上の記憶デバイス１７０に基づく論理記憶領域のＩＤでもよい。
【００５９】
拡張フラグ４０２は、クエリプラン候補の拡張を行うか否か（非パイプライン化処理を含んだクエリプラン候補を生成するか否か）を示す。“１”は、クエリプラン候補の拡張を行うことを意味し、“０”は、クエリプラン候補の拡張を行わないことを意味する。
【００６０】
強制フラグ４０３は、強制実行を行うか否かを示す。「強制実行」とは、実行時間上限４０６、最大電力上限４０７及び消費電力量上限４０８の全てを満たすクエリプラン候補が一つも無くても対象クエリを実行することを意味する。“１”は、強制実行を行うことを意味し、“０”は、強制実行を行わないことを意味する。
【００６１】
実行時間係数４０４は、各クエリプラン候補についての実行時間の重みを示し、各クエリプラン候補について、クエリコストの算出の際に当該クエリプラン候補の実行時間T(Q)の係数とされる。
【００６２】
消費電力量係数４０５は、各クエリプラン候補についての消費電力量の重みを示し、各クエリプラン候補について、クエリコストの算出の際に当該クエリプラン候補の消費電力量E(Q)の係数とされる。
【００６３】
実行時間上限４０６は、各クエリプラン候補について、当該クエリプラン候補の実行時間の上限を示す。
【００６４】
最大電力上限４０７は、各クエリプラン候補について、当該クエリプラン候補の最大電力の上限を示す。
【００６５】
消費電力量上限４０８は、各クエリプラン候補について、当該クエリプラン候補の消費電力量の上限を示す。
【００６６】
以下、本実施形態で行われる処理の一例を説明する。
【００６７】
図５は、ＤＢＭＳ１３０が行う処理の全体の流れを示すフローチャートである。
【００６８】
クエリ受付部１３１が、クエリをクライアント１９０から受け付ける（Ｓ５０１）。
【００６９】
候補生成部１４１が、Ｓ５０１で受け付けられたクエリに基づきクエリプラン候補を生成し（Ｓ５０２）、Ｓ５０２で生成されたクエリプラン候補を拡張する処理である非パイプライン化拡張処理を行う（Ｓ５０３）。なお、Ｓ５０３の非パイプライン化拡張処理は、Ｓ５０２のクエリプラン候補生成で実施されてもよい。具体的には、例えば、候補生成部１４１は、Ｓ５０２において、実行時間が遅くなると予想される（例えば実行時間が実行時間上限４０６を超えると予想される）クエリプラン候補を生成しないという枝刈りを実施するが、非パイプライン化拡張処理がクエリプラン候補生成で実施されることで、枝刈りが走ることを避けることができる。例えば、拡張フラグ４０２＝“１”且つ強制フラグ４０３＝“１”の場合には、枝刈りが走らない。結果として、実行時間上限４０６、最大電力上限４０７及び消費電力量上限４０８のうちの少なくとも一つを満たさないがクエリコストが低いクエリプラン候補が生成されることが期待できる。
【００７０】
コスト算出部１４２が、Ｓ５０２及びＳ５０３において生成されたクエリプラン候補毎にクエリコストを算出する（Ｓ５０４）。候補選択部１４３が、一つのクエリプラン候補を選択する候補選択処理を行う（Ｓ５０５）。
【００７１】
クエリ実行部１３３が、Ｓ５０５で選択されたクエリプラン候補に基づきクエリを実行し、実行結果をクライアント１９０に返す（Ｓ５０６）。
【００７２】
図６は、非パイプライン化拡張処理（図５のＳ５０３）の流れを示すフローチャートである。
【００７３】
候補生成部１４１が、拡張フラグ＝“１”か否かを判断する（Ｓ６０１）。Ｓ６０１の判断結果が偽の場合（Ｓ６０１：Ｎｏ）、非パイプライン化拡張処理が終了する。
【００７４】
Ｓ６０１の判断結果が真の場合（Ｓ６０１：Ｙｅｓ）、候補生成部１４１が、Ｓ５０２で生成された各クエリプラン候補について、Ｓ６０２〜Ｓ６０４を行う。以下、一つのクエリプラン候補を例に取る（図６の説明において「対象クエリプラン候補」と言う）。
【００７５】
候補生成部１４１が、対象クエリプラン候補に結合可能箇所（非パイプライン化処理が可能な箇所）があるか否かを判断する（Ｓ６０２）。Ｓ６０２の判断結果が偽の場合（Ｓ６０２：Ｎｏ）、対象クエリプラン候補についてＳ６０３及びＳ６０４は行われない。
【００７６】
Ｓ６０２の判断結果が真の場合（Ｓ６０２：Ｙｅｓ）、候補生成部１４１が、結合可能箇所の数に応じて対象クエリプラン候補を拡張する（Ｓ６０３）。結果として、対象クエリプラン候補を基に、結合可能箇所の数に応じた数のクエリプラン候補が生成される。次に、Ｓ６０３で生成された各クエリプラン候補について、候補生成部１４１が、当該クエリプラン候補を、一時表の格納先（一時表格納先４０１から特定される格納先）の数に応じて対象クエリプラン候補を拡張する（Ｓ６０４）。結果として、Ｓ６０３で生成された各クエリプラン候補について、当該クエリプラン候補を基に、一時表の格納先の数に応じた数のクエリプラン候補が生成される。
【００７７】
図７は、クエリプラン候補の拡張の模式図である。
【００７８】
Ｓ５０２で、クエリに基づき一つ以上のクエリプラン候補が生成される。次に、Ｓ６０３で、Ｓ５０２で生成された各クエリプラン候補について、当該クエリプラン候補を基に、当該クエリプラン候補における結合可能箇所の数に応じた数のクエリプラン候補が生成される。最後に、Ｓ６０４で、Ｓ６０３で生成された各クエリプラン候補について、当該クエリプラン候補を基に、一時表の格納先の数に応じた数のクエリプラン候補が生成される。一個の一時表が二つ以上の記憶デバイス１７０に跨る場合、その記憶デバイス１７０の組合せの数に応じて、Ｓ６０４で生成されるクエリプラン候補は更に多いことが期待される。
【００７９】
このように、クエリプラン候補の数は、結合可能箇所（結合結果としての一時表を生成することが可能なデータベース演算子）の数に依存する。クエリプラン候補の数は、更に、一時表の格納先の数に依存する。
【００８０】
図８は、候補選択処理（図５のＳ５０５）の流れを示すフローチャートである。
【００８１】
候補選択部１４３が、少なくとも一つのクエリプラン候補が実行時間上限４０６、最大電力上限４０７及び消費電力量上限４０８の全てを満たすか否かを判断する（Ｓ８０１）。
【００８２】
Ｓ８０１の判断結果が真の場合（Ｓ８０１：Ｙｅｓ）、候補選択部１４３が、実行時間上限４０６、最大電力上限４０７及び消費電力量上限４０８の全てを満たす一つ以上のクエリプラン候補の中から、最もクエリコストが低いクエリプラン候補を選択する（Ｓ８０３）。
【００８３】
Ｓ８０１の判断結果が偽の場合（Ｓ８０１：Ｎｏ）、候補選択部１４３が、強制フラグ４０３＝“１”か否かを判断する（Ｓ８０２）。Ｓ８０２の判断結果が偽の場合（Ｓ８０２：Ｎｏ）、候補選択処理が終了する。
【００８４】
Ｓ８０２の判断結果が真の場合（Ｓ８０２：Ｙｅｓ）、候補選択部１４３が、実行時間上限４０６、最大電力上限４０７及び消費電力量上限４０８の少なくとも一つを満たさない一つ以上のクエリプラン候補の中から、最もクエリコストが低いクエリプラン候補を選択する（Ｓ８０３）。
【００８５】
すなわち、候補選択処理によれば、候補選択部１４３は、実行時間上限４０６、最大電力上限４０７及び消費電力量上限４０８の全てを満たすクエリプラン候補が一つ以上ある場合、当該一つ以上のクエリプラン候補から最もクエリコストが低いクエリプラン候補を選択する。一方、実行時間上限４０６、最大電力上限４０７及び消費電力量上限４０８の全てを満たすクエリプラン候補が一つもが無いが、強制実行を行うことの設定がある場合、候補選択部１４３は、実行時間上限４０６、最大電力上限４０７及び消費電力量上限４０８の少なくとも一つを満たさない一つ以上のクエリプラン候補の中から、最もクエリコストが低いクエリプラン候補を選択する。
【００８６】
以上、一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【符号の説明】
【００８７】
１００…ＤＢサーバ
【図１】
2020021417.tif 000006
【図２】
2020021417.tif 000007
【図３】
2020021417.tif 000008
【図４】
2020021417.tif 000009
【図５】
2020021417.tif 000010
【図６】
2020021417.tif 000011
【図７】
2020021417.tif 000012
【図８】
2020021417.tif 000013