(57)【特許請求の範囲】
【請求項１】
データベースを管理するデータベース管理システムであって、
前記データベースへのクエリを受け付けるクエリ受付部と、
前記受け付けたクエリを実行するために必要な１以上のデータベースオペレーションを表す情報を含むクエリ実行プランを生成するクエリ実行プラン生成部と、
前記生成したクエリ実行プランに基づいて前記受け付けたクエリを実行し、前記受け付けたクエリの実行において、データベースオペレーションを実行するためのタスクを動的に生成し、前記動的に生成されたタスクを実行するクエリ実行部と
を有し、
前記生成したクエリ実行プランは、前記クエリ実行プランに基づいて実行されるデータベースオペレーションのうちの１以上のデータベースオペレーションの集合であるクエリブロックを複数含み、
前記クエリ実行部は、前記受け付けたクエリの実行において、前記タスクを新たに生成する場合に、生成タスク数決定処理を実行し、
前記生成タスク数決定処理は、前記複数のクエリブロックのそれぞれを対象に、前記対象とするクエリブロックを実行するタスクとして生成することができるタスクの数である生成タスク数を算出することであり、
動的に生成されるタスクの数は、前記生成タスク数以下である、
データベース管理システム。
【請求項２】
前記生成タスク数決定処理は、新たに生成可能なタスクの数である生成可能タスク数と、新たに生成するタスク当たりに割り当てを要するメモリ資源量である第１のメモリ資源量と、前記対象とするクエリブロックの実行に対して新たに割り当て可能なメモリ資源量である第２のメモリ資源量とを基に、前記生成タスク数を算出することである、
請求項１記載のデータベース管理システム。
【請求項３】
前記クエリ実行部は、前記複数のクエリブロックのそれぞれに対応した優先度を決定し、前記複数のクエリブロックについて並行して実行し、
前記生成タスク数決定処理において、前記第２のメモリ資源量は、第３及び第４のメモリ資源量のうちの小さい方であり、
前記第３のメモリ資源量は、前記複数のクエリブロックのそれぞれに対応した優先度に応じて、全てのクエリブロックの実行に対して割り当て可能なメモリ資源の総量である総メモリ資源量を配分することにより得られる、前記対象とするクエリブロックの実行に対して割り当て可能なメモリ資源の量から、前記対象とするクエリブロックの実行に既に予約しているメモリ資源量を減じた量であり、
前記第４のメモリ資源量は、前記複数のクエリブロックのそれぞれの実行に対して既に予約しているメモリ資源量の合計量を、前記総メモリ資源量から減じた量である、
請求項２記載のデータベース管理システム。
【請求項４】
前記生成タスク数決定処理において、
前記複数のクエリブロックのそれぞれの実行に要するメモリ資源量を基に、前記生成タスク数を算出する
請求項１記載のデータベース管理システム。
【請求項５】
前記生成タスク数決定処理において、
前記受け付けたクエリの実行に対して割り当て可能なメモリ資源量の上限に対する、前記複数のクエリブロックのそれぞれの実行に要するメモリ資源量の各々の割合を基に、前記生成タスク数を算出する
請求項４記載のデータベース管理システム。
【請求項６】
前記生成タスク数決定処理において、
前記複数のクエリブロック間の参照関係を基に、前記生成タスク数を算出する
請求項１記載のデータベース管理システム。
【請求項７】
前記生成タスク数決定処理において、
前記複数のクエリブロック間の参照関係とは、前記複数のクエリブロックのうち、一のクエリブロックの実行結果を参照するＤＢオペレーションを含む他のクエリブロックについて、前記一のクエリブロックの実行結果を参照するまでのコスト計算に基づく予測データベースオペレーション数と、予測データベースオペレーションの総数との関係である
請求項６記載のデータベース管理システム。
【請求項８】
前記生成タスク数決定処理において、
前記複数のクエリブロックのそれぞれの実行進捗状況を基に、前記生成タスク数を算出する
請求項１記載のデータベース管理システム。
【請求項９】
前記生成タスク数決定処理において、
前記複数のクエリブロックのそれぞれの実行進捗状況とは、前記複数のクエリブロックのそれぞれにおける、実行しているタスクの数、実行の開始を待っているタスクの数、新たなタスクの生成を待っているタスクの数、又は、実行達成率である
請求項８記載のデータベース管理システム。
【請求項１０】
前記複数のクエリブロックのうちの一のクエリブロックは、前記複数のクエリブロックのうちの他のクエリブロックにおいて利用される表のカラムを含む相関条件を有するサブクエリに対応するクエリブロックであり、
前記生成タスク数決定処理において、
前記対象とするクエリブロックが、前記相関条件を含むサブクエリに対応するクエリブロックである場合に、前記対象とするクエリブロックにおける予測データベースオペレーション数、予測タスク実行多重度、又は、実行に要するメモリ資源量のうちの少なくとも一つを基に、前記生成タスク数を算出する
請求項１記載のデータベース管理システム。
【請求項１１】
前記複数のクエリブロックのうちの一のクエリブロックは、前記複数のクエリブロックのうちの他のクエリブロックにおいて利用される表のカラムを含む相関条件をＥＸＩＳＴＳ句内に有するサブクエリに対応するクエリブロックであり、
前記生成タスク数決定処理において、
前記対象とするクエリブロックが、前記相関条件をＥＸＩＳＴＳ句内に有するサブクエリの外側部分に対応するクエリブロックである場合に、前記対象とするクエリブロックにおける予測データベースオペレーション数、又は、予測タスク実行多重度を基に、前記生成タスク数を算出する
請求項１記載のデータベース管理システム。
【請求項１２】
前記クエリ実行部は、
前記複数のクエリブロックのうちの一のクエリブロックが、ＥＸＩＳＴＳ句に関するデータベースオペレーションを実行するクエリブロックである場合に、前記一のクエリブロックにおけるタスクの実行結果に基づき、前記複数のクエリブロックのうちの関連するタスクの実行を取り消し、前記実行を取り消したタスクに割り当てられたメモリ資源を解放する
請求項１記載のデータベース管理システム。
【請求項１３】
前記クエリ実行部は、
前記複数のクエリブロックのうちの一のクエリブロックの実行において、実行の開始を待っているタスクである実行待ちタスクの数が所定数以上になった場合、又は、前記実行待ちタスクに割り当てられたメモリ資源量が所定量以上となった場合、前記一のクエリブロックに関するタスクの実行を取り消し、前記実行を取り消したタスクに割り当てられたメモリ資源を解放し、前記一のクエリブロックの実行に対して割り当て可能であったメモリ資源量の少なくとも一部を、前記複数のクエリブロックのうちの他のクエリブロックの実行に対して割り当て可能なメモリ資源量とする
請求項１記載のデータベース管理システム。
【請求項１４】
前記クエリ実行部は、
前記複数のクエリブロックのうちの一のクエリブロックの実行において、前記一のクエリブロックの実行に対して割り当て可能なメモリ資源量の上限に対する、前記一のクエリブロックの実行に既に割り当てているメモリ資源量の割合が所定値以下の場合に、前記一のクエリブロックにおいてタスクの生成を待っているタスク生成待ちタスクの中で、タスク生成待ちタスクに対応するデータベースオペレーションより後続のデータベースオペレーションの数が多いタスク生成待ちタスクを選択し、前記選択されたタスク生成待ちタスクに関する新たなタスクを優先的に生成する
請求項１記載のデータベース管理システム。
【請求項１５】
メモリと、
前記メモリに接続された制御デバイスと
を有し、
前記制御デバイスが、
（Ｐ）データベースへのクエリを受け付け、
（Ｑ）前記受け付けたクエリを実行するために必要な１以上のデータベースオペレーションを表す情報を含むクエリ実行プランを生成し、
（Ｒ）前記生成したクエリ実行プランに基づいて前記受け付けたクエリを実行し、前記受け付けたクエリの実行において、データベースオペレーションを実行するためのタスクを動的に生成し、前記動的に生成されたタスクを実行し、
前記生成したクエリ実行プランは、前記クエリ実行プランに含まれる情報であるデータベースオペレーションのうちの１以上のデータベースオペレーションの集合であるクエリブロックを複数含み、
前記制御デバイスは、前記受け付けたクエリの実行において、前記タスクを新たに生成する場合に、生成タスク数決定処理を実行し、
前記生成タスク数決定処理は、前記クエリブロックのそれぞれを対象に、前記クエリブロックを実行するタスクとして生成することができるタスクの数である生成タスク数を算出することであり、
動的に生成されるタスクの数が、前記生成タスク数以下である、
計算機。
【請求項１６】
データベースを管理するデータベース管理方法であって、
（ａ）前記データベースへのクエリを受け付け、
（ｂ）前記受け付けたクエリを実行するために必要な１以上のデータベースオペレーションを表す情報を含むクエリ実行プランを生成し、
（ｃ）前記生成したクエリ実行プランに基づいて前記受け付けたクエリを実行し、前記受け付けたクエリの実行において、データベースオペレーションを実行するためのタスクを動的に生成し、前記動的に生成されたタスクを実行し、
前記生成したクエリ実行プランは、前記クエリ実行プランに含まれる情報であるデータベースオペレーションのうちの１以上のデータベースオペレーションの集合であるクエリブロックを複数含み、
前記（ｃ）では、前記受け付けたクエリの実行において、前記タスクを新たに生成する場合に、生成タスク数決定処理を実行し、
前記生成タスク数決定処理は、前記クエリブロックのそれぞれを対象に、当該クエリブロックを実行するタスクとして生成することができるタスクの数である生成タスク数を算出することであり、
動的に生成されるタスクの数は、前記生成タスク数以下である、
データベース管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース管理技術に関する。
【背景技術】
【０００２】
企業活動において、大量に生じる業務データの活用は不可欠になっている。そのため、大量の業務データを蓄積したデータベース（以下、「ＤＢ」）を解析処理するシステムが既に考案されている。【０００３】
この解析処理において、データベース管理システム（以下、「ＤＢＭＳ」）は、クエリを受け付け、ＤＢを格納する記憶デバイスにデータ読出し要求を発行する。【０００４】
一つのクエリの実行におけるデータ読出しの待ち時間の短縮化を図る技術として、特許文献１に開示の技術が知られている。特許文献１によれば、ＤＢＭＳは、クエリ実行に要するデータ読出しの都度にタスクを動的に生成し並行実行することでデータ読出し要求を多重化する。ＤＢＭＳは、動的に生成されたタスクに、そのタスクにより実行されるデータベースオペレーション（以下、「ＤＢオペレーション」）に要するメモリ資源を割り当てる。特許文献１によれば、ＤＢＭＳは、現存するタスクの数と所定数とを比較し、現存するタスクの数が所定数に達したらタスクの生成を待つ。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−３４４１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
クエリを実行する際に消費することができる最大のメモリ資源の量（割り当て可能なメモリ資源量）に制約を課すシステム運用が考えられる。一つのクエリの実行に使用されるメモリ資源量は、動的に生成されるタスクで実行するＤＢオペレーションや生成するタスクの数に依存し、且つ、クエリの実行の進行に従い変化する。そのため、割り当て可能なメモリ資源量に制約を課す場合、クエリを並行処理するタスクの上限数を適切に決定することが望ましい。【０００７】
特許文献１の技術が適用された環境において、ＤＢＭＳは、クエリを実行するために必要な１以上のＤＢオペレーションを表す情報を含むクエリ実行プランを生成する。ＤＢＭＳは、生成したクエリ実行プランに基づいてクエリを実行する。
上記クエリ実行プランは、複数のクエリブロックを含む場合がある。「クエリブロック」とは、クエリ実行プランに含まれる情報であるＤＢオペレーションのうちの１以上のＤＢオペレーションの集合である。例えば、サブクエリ内にＳＵＭ等の集計処理を含むクエリの場合、そのクエリ実行プランは、サブクエリに関するクエリブロックとクエリの残り部分（サブクエリの外側部分）に関するクエリブロックとの二つのクエリブロックを有する。ＤＢＭＳは、クエリ実行プランに含まれる複数のクエリブロックを、別々のタスクにより並行して実行することができる。【０００８】
例えば、二つのクエリブロックを含むクエリ実行プランの場合、一方のクエリブロックは、他方のクエリブロックの実行結果（例えば、サブクエリに関する集計結果）を参照するＤＢオペレーションを含むことがある。ＤＢＭＳは、該ＤＢオペレーションをタスクにより実行する際に、上記した他方のクエリブロックの実行を完了した後に、該ＤＢオペレーションの実行を開始することができる。ここで、上記のように割り当て可能なメモリ資源量に制約を課す場合、ＤＢＭＳは、二つのクエリブロックの実行に対して、制約された割り当て可能なメモリ資源量の半分ずつをそれぞれ均等に割り当てたとする。このとき、ＤＢＭＳは、二つのクエリブロックを別々のタスクにより並行して実行し始めるが、上記した一方のクエリブロック内の該ＤＢオペレーションに対応するタスクについては、上記他方のクエリブロックの実行を完了するまで、その実行を開始することができず待たせることとなる。すると、当該タスクに割り当てられたメモリ資源は消費されたままとなり、限られたメモリ資源を有効に活用することができない。その結果、クエリ実行全体のタスク実行多重度、すなわちデータ読出し要求の多重度が低くなり、クエリ実行時間が伸びてしまうこととなる。そこで、本発明の目的は、複数のクエリブロックに関するクエリについて、限られたメモリ資源を有効に活用し、当該クエリの実行時間を短縮することにある。
【課題を解決するための手段】
【０００９】
ＤＢＭＳが、クエリ受付部と、クエリ実行プラン生成部と、クエリ実行部とを有する。例えば、ＤＢＭＳは、コンピュータプログラムであり、計算機で実行されることにより、クエリ受付部と、クエリ実行プラン生成部と、クエリ実行部とを計算機に構築する。【００１０】
クエリ受付部は、クエリを受け付ける。クエリ実行プラン生成部は、クエリを実行するために必要な１以上のＤＢオペレーションを表す情報を含むクエリ実行プランを生成する。クエリ実行プランは、複数のクエリブロックを含む。クエリブロックは、クエリ実行プランに含まれる情報であるＤＢオペレーションのうちの１以上のＤＢオペレーションの集合である。クエリ実行部は、生成したクエリ実行プランに基づいて、受け付けたクエリを実行する。【００１１】
クエリ実行部は、クエリの実行において、ＤＢオペレーションを実行するためのタスクを動的に生成し、動的に生成されたタスクを実行する。例えば、クエリ実行部は、前記クエリの実行において、（ａ）ＤＢオペレーションを実行するためのタスクを生成すること、（ｂ）生成されたタスクを実行することで、当該タスクに対応したＤＢオペレーションに必要なデータを読み出すためにＤＢへデータ読出し要求を発行すること、（ｃ）前記（ｂ）で実行されたタスクに対応したＮ番目のＤＢオペレーションの実行結果に基づき（Ｎ＋１）番目のＤＢオペレーションを実行する場合には、当該実行結果に基づくタスクを新たに生成すること（Ｎは１以上の整数）、及び、（ｄ）その新たに生成したタスクについて前記（ｂ）及び前記（ｃ）を行うこと、を行い、前記（ｂ）及び（ｄ）において、２以上の実行可能なタスクが存在する場合には、それら２以上のタスクのうちの少なくとも二つのタスクを並行して実行するようになっている。このクエリ実行部の動作は、前述した特許文献１に開示の技術に従う動作で良い。【００１２】
クエリ実行部は、前記クエリの実行において、タスクを新たに生成する場合に（例えば上記（ａ）又は（ｃ）の場合に）、同時生成タスク数決定処理を行う。同時生成タスク数決定処理は、それぞれのクエリブロックを対象に、当該クエリブロックを実行するタスクとして同時に生成可能なタスクの数である同時生成タスク数を算出することである。クエリ実行部は、動的に同時に生成されるタスクの数として、算出した同時生成タスク数以下のタスクを生成する。
【発明の効果】
【００１３】
本発明によれば、限られたメモリ資源の有効活用により、複数のクエリブロックに関するクエリの実行時間を短縮することができる。例えば、割り当て可能なメモリ資源量が限られる環境において、クエリ実行時に動的に生成されるタスクの数を、クエリブロック毎に適切な数とすることができる。これにより、割り当て可能なメモリ資源量に制約のある環境において、当該制約の範囲内でデータ読出し要求を最も高い多重度を以って発行することが期待でき、故に、クエリ実行時間の短縮化が期待できる。
【図面の簡単な説明】
【００１４】
【図１】図１は、実施例１に係る索引Ａ及び表Ａを示す。
【図２】図２は、実施例１に係る索引Ｂ及び表Ｂを示す。
【図３】図３は、実施例１に係るクエリを示す。
【図４】図４は、実施例１に係るクエリ実行プランを示す。
【図５】図５は、二つのクエリブロックの実行に対する割り当て可能なメモリ資源量の上限を同一のとした場合の、タスクの実行を説明するための模式図の一例である。
【図６】図６は、実施例１で二つのクエリブロックの実行に対する割り当て可能なメモリ資源量の上限を変化させる場合の、タスクの実行を説明するための模式図の一例である。
【図７】図７は、実施例１に係る計算機システムの構成を示す。
【図８】図８は、実施例１に係るクエリ実行管理表の構成を示す。
【図９】図９は、実施例１に係るクエリ実行の全体の流れを示す。
【図１０】図１０は、実施例１に係るタスク実行処理の流れを示す。
【図１１】図１１は、実施例１に係るタスク生成保留処理の流れを示す。
【図１２】図１２は、実施例１に係るＤＢオペレーション実行処理の流れを示す。
【図１３】図１３は、実施例１に係るＤＢオペレーション実行保留処理の流れを示す。
【図１４】図１４は、実施例１に係る同時生成タスク数決定処理の流れを示す。
【図１５】図１５は、実施例１に係るメモリ資源割り当て処理の流れを示す。
【図１６】図１６は、実施例１に係るメモリ資源解放処理の流れを示す。
【図１７】図１７は、実施例１に係るメモリ資源予約処理の流れを示す。
【図１８】図１８は、実施例１に係るメモリ資源増加処理の流れを示す。
【図１９】図１９は、実施例１に係るメモリ資源減少処理の流れを示す。
【図２０】図２０は、実施例１に係るサーバメモリ資源増加処理の流れを示す。
【図２１】図２１は、実施例１に係るサーバメモリ資源減少処理の流れを示す。
【図２２】図２２は、実施例１に係る優先度手動変更処理の流れを示す。
【図２３】図２３は、実施例１に係る優先度自動変更処理の流れを示す。
【図２４】図２４は、実施例１に係るタスク追加生成処理の流れを示す。
【図２５】図２５は、実施例２に係るクエリを示す。
【図２６】図２６は、実施例２に係るクエリ実行プランを示す。
【図２７】図２７は、実施例２に係る優先度自動変更処理の流れの一部を示す。
【図２８】図２８は、実施例３に係る計算機システムの構成を示す。
【発明を実施するための形態】
【００１５】
以下、図面を参照しながら、幾つかの実施例を説明する。なお、以下の説明により本発明が限定されるものではない。また、以下の説明では、データベースを「ＤＢ」、データベース管理システムを「ＤＢＭＳ」、ＤＢＭＳを実行するサーバを「ＤＢサーバ」と言う。ＤＢＭＳに対するクエリの発行元は、ＤＢＭＳの外部のコンピュータプログラム（例えばアプリケーションプログラム）で良い。外部のコンピュータプログラムは、ＤＢサーバ内で実行されるプログラムでも良いし、ＤＢサーバに接続された装置（例えばクライアント計算機）で実行されるプログラムでも良い。
【実施例１】
【００１６】
まず、本実施例の概要を説明する。【００１７】
ＤＢサーバは、ＤＢＭＳを実行する。ＤＢＭＳは、クエリを受け付け、受け付けたクエリを実行する。そして、その実行により生成された結果をクエリの発行元に返す。クエリの結果を生成するまでには、ＤＢＭＳは、１以上のＤＢオペレーションを実行する。ＤＢＭＳは、それらＤＢオペレーションのうちの少なくとも一つのＤＢオペレーションの実行において、ＤＢを格納した記憶デバイスに対して読出し要求を発行する場合がある。【００１８】
例えば、ＤＢＭＳは、図１及び図２に示す索引Ａ、表Ａ、索引Ｂ及び表Ｂを含むＤＢを記憶デバイス（例えば、ＤＢサーバと通信できるように接続された外部ストレージ装置）に格納しているとする。表は、１以上のレコードの集合であり、レコードは、１以上のカラムから構成される。索引は、表の中の１以上のカラムを対象に作成されるデータ構造であり、当該索引が対象とするカラムを含む選択条件による表へのアクセスを高速化する。例えば、索引は、対象とするカラムの値毎にその値を含む表の中のレコードを特定する情報（ＲｏｗＩＤ）を保持するデータ構造であり、Ｂ木構造等が用いられる。【００１９】
例えば、ＤＢＭＳは、索引Ａを用いて、表ＡのカラムＡ＿Ｔｙｐｅの値が「ＡＡＡ」であるレコードに対応したＲｏｗＩＤの集合であるＲｏｗＩＤ  Ｌｉｓｔ「ａ１」から、表Ａの五つのレコード（１レコード目、３レコード目、６レコード目、７レコード目、及び９レコード目）を特定することができる。ＤＢＭＳは、上記のように、索引ＡのカラムＡ＿Ｔｙｐｅの特定の値におけるＲｏｗＩＤ  Ｌｉｓｔを用いて、表ＡからＡ＿Ｔｙｐｅの当該値を含むレコードを特定し、そのレコードに含まれるカラムＡＣ１の値を特定することができる。同様に、ＤＢＭＳは、索引ＢのカラムＢ＿Ｔｙｐｅの特定の値におけるＲｏｗＩＤ  Ｌｉｓｔを用いて、表ＢからＢ＿Ｔｙｐｅの当該値を含むレコードを特定し、そのレコードに含まれるカラムＢＣ１の値を特定することができる。【００２０】
また、例えば、ＤＢＭＳが受け付けたクエリは、図３に示すクエリであるとする。図３のクエリは、表ＢのカラムＢ＿Ｔｙｐｅの値が「ＰＰＰ」であるレコードのカラムＢＣ１の値が、表ＡのカラムＡ＿Ｔｙｐｅの値が「ＡＡＡ」であるレコードのカラムＡＣ１の値の平均値よりも大きい値である場合に、このカラムＢＣ１の値を抽出するクエリである。図３に示すクエリのＡＶＧ（ＳＥＬＥＣＴ…）の記述部分が、サブクエリに対応する。図３のサブクエリには、サブクエリの外側部分との相関条件はない。ここで、相関条件の有無とは、サブクエリ内に、サブクエリの外側のＦＲＯＭ句に指定された表のカラムの記述が含まれているか否かを意味する。【００２１】
ＤＢＭＳは、図３のクエリを実行するために、例えば、図４に示すようなクエリ実行プランを生成する。クエリ実行プランは、例えば、データ読出しを伴う一つ以上のＤＢオペレーションを表す情報を含む。クエリ実行プランにおけるＤＢオペレーションの実行順序には木構造の順序関係が存在する。ＤＢＭＳは、図４のクエリ実行プランに基づき、索引Ａを用いて、表ＡのカラムＡ＿Ｔｙｐｅの指定値を含むレコードのカラムＡＣ１の値を抽出し、それらの値の平均値を算出する。また、ＤＢＭＳは、索引Ｂを用いて、表ＢのカラムＢ＿Ｔｙｐｅの指定値を含むレコードにおけるカラムＢＣ１の値を抽出する。ＤＢＭＳは、抽出したカラムＢＣ１の値が、算出した平均値より大きいものを選択し、クエリ実行の結果としてクエリ発行元に返す。例えば、ＤＢＭＳは、下記の処理を行う。
（Ｓ１）索引Ａを用いて、カラムＡ＿Ｔｙｐｅの指定値を含む表Ａのレコードに対応したＲｏｗＩＤ  Ｌｉｓｔを検索する、
（Ｓ２）上記（Ｓ１）で見つかったＲｏｗＩＤ  Ｌｉｓｔを用いて表Ａの該当するレコードを含むデータをフェッチし、該当するレコードのカラムＡＣ１の値を抽出する、
（Ｓ３）上記（Ｓ２）で抽出したカラムＡＣ１の全ての値の平均値を算出する、
（Ｓ４）索引Ｂを用いて、カラムＢ＿Ｔｙｐｅの指定値を含む表Ｂのレコードに対応したＲｏｗＩＤ  Ｌｉｓｔを検索する、
（Ｓ５）上記（Ｓ４）で見つかったＲｏｗＩＤ  Ｌｉｓｔを用いて表Ｂの該当するレコードを含むデータをフェッチし、該当するレコードのカラムＢＣ１の値を抽出する、
（Ｓ６）上記（Ｓ５）で抽出したカラムＢＣ１の値の内で、上記（Ｓ３）で算出した平均値よりも大きいものを選択する、
（Ｓ７）クエリ実行の結果として、選択したカラムＢＣ１の値をクエリ発行元に返す。【００２２】
図４に示すクエリ実行プランは、（Ｓ１）〜（Ｓ３）の実行に対応するクエリブロック１と、（Ｓ４）〜（Ｓ７）の実行に対応するクエリブロック２とを含む。ここで、「クエリブロック」とは、クエリ実行プランに基づいて実行されるＤＢオペレーションのうちの１以上のＤＢオペレーションの集合である。クエリブロックを複数含むクエリ実行プランとなるクエリとして、例えば、図３のようにサブクエリ内に集計処理を含むクエリ、また、ハッシュ結合処理を行うクエリ、ＵＮＩＯＮ等の集合演算を含むクエリ、ＥＸＩＳＴＳ句に関するサブクエリを含むクエリ等がある。ＤＢＭＳは、クエリブロック２の（Ｓ６）において、クエリブロック１の（Ｓ３）の結果を参照して、処理を実行する。すなわち、ＤＢＭＳは、図４に示すクエリ実行プランにおいて、クエリブロック２を、クエリブロック１の結果を参照するまで、つまり、（Ｓ６）の前までは、クエリブロック１と並行して実行することができる。【００２３】
上述の通り、ＤＢＭＳは、クエリ実行プランに従ってクエリを実行する。ここで、ＤＢＭＳが、図３のクエリを図４のクエリ実行プランに従って実行する際に、その実行に消費することができる最大のメモリ資源の量（割り当て可能なメモリ資源量）が制約されているとする。そして、ＤＢＭＳは、図４のクエリ実行プランにおける並行に実行できる二つのクエリブロックに対して、制約された割り当て可能なメモリ資源量の半分ずつをそれぞれ均等に割り当てたとする。すなわち、各クエリブロックの実行に対する割り当て可能なメモリ資源量の上限を同量とした場合である。この場合において、タスクを動的に生成していく例を図５に示す。以下、図５について説明する。なお、図５の表記は、次のルールに従う。
（＊）横軸は、時刻を表す。
（＊）図上部の横に長い五角形は、一つのタスクによるＤＢオペレーションを意味する。五角形の左端は、タスクが生成され、該タスクによるＤＢオペレーションが開始される時刻を表す。五角形の右端は、該タスクによるＤＢオペレーションが終了し、該タスクが終了される時刻を表す。
（＊）図上部の五角形の内部の値は、タスクに対応したＤＢオペレーションに伴いフェッチされるデータを表す。
（＊）図下部の縦軸は、各クエリブロックの実行において消費されるメモリ資源の量（割り当てられたメモリ資源の量）を表す。
（＊）図３のクエリ全体の実行に対して割り当て可能なメモリ資源量の上限は「６」であるとする。クエリブロック１及びクエリブロック２それぞれの実行に対して割り当て可能なメモリ資源量の上限は、破線１３、１４に示すようにそれぞれ同量の「３」と固定的に決まっているとする。
（＊）一つのタスクに対応するＤＢオペレーションに必要なメモリ資源量は「１」であるとする。なお、タスク自体の生成に要するメモリ資源は、クエリの実行に消費されるメモリ資源とは別に管理されているものとする。【００２４】
特許文献１の技術によれば、タスクにより実行されるＤＢオペレーションの結果に基づき１以上のタスクを動的に生成することができる。図５の例では、特許文献１の技術に対して、更に、ＤＢＭＳが、タスクを新たに生成する都度に、同時生成タスク数決定処理を行う技術を付加したものである。同時生成タスク数決定処理は、それぞれのクエリブロックを対象に、新たに生成可能なタスクの数である生成可能タスク数と、新たに生成するタスク当たりに割り当てを要するメモリ資源量である第１のメモリ資源量と、対象とするクエリブロックの実行に対して新たに割り当て可能なメモリ資源量である第２のメモリ資源量とを基に、当該クエリブロックの実行において同時に生成可能なタスクの数である同時生成タスク数を算出することである。本実施例では、第１のメモリ資源量は、新たに生成するタスクに対応したＤＢオペレーションに要するメモリ資源量（ＤＢオペレーションメモリ資源量）に基づくメモリ資源量である。例えば、第１のメモリ資源量は、ＤＢオペレーションメモリ資源量と同じ量、ＤＢオペレーションメモリ資源量よりも多くのメモリ資源量、或いは、他のタスクとメモリ資源を共通化可能等の理由があれば、ＤＢオペレーションメモリ資源量よりも少ないメモリ資源量である。動的に同時に生成されるタスクの数は、同時生成タスク数と同数でなくても良く、同時生成タスク数より少ない数でも良い。【００２５】
図５の例によれば、ＤＢＭＳは、以下の通り、図３のクエリを図４のクエリ実行プランに従って実行する。
（ｔ０）（クエリブロック１）索引Ａにアクセスするためのタスクを生成する際に、同時生成タスク数決定処理を行う。例えば、ＤＢＭＳは、生成可能タスク数「１」と、第１のメモリ資源量「１」と、第２のメモリ資源量「３」（クエリブロック１の実行に対して割り当て可能なメモリ資源量の上限「３」）とに基づき、同時生成タスク数を「１」と算出する。ＤＢＭＳは、算出した同時生成タスク数「１」と同数のタスク１１Ａを生成する。タスク１１Ａでは、表ＡのカラムＡ＿Ｔｙｐｅの値が「ＡＡＡ」であるレコードのＲｏｗＩＤ  Ｌｉｓｔの検索を行う。ＤＢＭＳは、タスク１１Ａの実行に必要なメモリ資源を割り当て、タスク１１Ａを実行する。【００２６】
（ｔ０）（クエリブロック２）索引Ｂにアクセスするためのタスクを生成する際に、同時生成タスク数決定処理を行う。例えば、ＤＢＭＳは、生成可能タスク数「１」と、第１のメモリ資源量「１」と、第２のメモリ資源量「３」（クエリブロック２の実行に対して割り当て可能なメモリ資源量の上限「３」）とに基づき、同時生成タスク数を「１」と算出する。ＤＢＭＳは、算出した同時生成タスク数「１」と同数のタスク１２Ａを生成する。タスク１２Ａでは、表ＢのカラムＢ＿Ｔｙｐｅの値が「ＰＰＰ」であるレコードのＲｏｗＩＤ  Ｌｉｓｔの検索を行う。ＤＢＭＳは、タスク１２Ａの実行に必要なメモリ資源を割り当て、タスク１２Ａを実行する。【００２７】
（ｔ１）（クエリブロック１）タスク１１Ａの実行によりＲｏｗＩＤ  Ｌｉｓｔ「ａ１」を得る。ＤＢＭＳは、その実行結果に基づき、表Ａの五つのレコード（１レコード目、３レコード目、６レコード目、７レコード目、及び９レコード目）を含むデータそれぞれをフェッチさせるためのタスクを五つ生成する際に、同時生成タスク数決定処理を行う。例えば、ＤＢＭＳは、生成可能タスク数「５」と、第１のメモリ資源量「１」と、第２のメモリ資源量「２」（クエリブロック１の実行に対して割り当て可能なメモリ資源量の上限「３」から割り当て済みのメモリ資源量「１」を減算した値）とに基づき、同時生成タスク数を「２」と算出する。ＤＢＭＳは、算出した同時生成タスク数「２」と同数のタスク１１Ｂ及び１１Ｃを生成する。タスク１１Ｂでは、表Ａの１レコード目を含むデータをフェッチし、タスク１１Ｃでは、表Ａの３レコード目を含むデータをフェッチする。ＤＢＭＳは、タスク１１Ｂ及び１１Ｃの実行に必要なメモリ資源をそれぞれ割り当て、タスク１１Ｂ及び１１Ｃを実行する。ここで、タスク１１Ａについて、その実行結果に基づいて新たに生成可能なタスクは残り三つあるので、ＤＢＭＳは、新たなタスクの生成が可能になるまでタスク１１Ａによるタスクの生成を待たせる。【００２８】
（ｔ１）（クエリブロック２）タスク１２Ａの実行によりＲｏｗＩＤ  Ｌｉｓｔ「ｂ１」を得る。ＤＢＭＳは、その実行結果に基づき、表Ｂの六つのレコード（１レコード目、５レコード目、６レコード目、９レコード目、１１レコード目、及び１４レコード目）を含むデータそれぞれをフェッチさせるためのタスクを六つ生成する際に、同時生成タスク数決定処理を行う。例えば、ＤＢＭＳは、生成可能タスク数「６」と、第１のメモリ資源量「１」と、第２のメモリ資源量「２」（クエリブロック２の実行に対して割り当て可能なメモリ資源量の上限「３」から割り当て済みのメモリ資源量「１」を減算した値）とに基づき、同時生成タスク数を「２」と算出する。ＤＢＭＳは、算出した同時生成タスク数と同数のタスク１２Ｂ及び１２Ｃを生成する。タスク１２Ｂでは、表Ｂの１レコード目を含むデータをフェッチし、タスク１２Ｃでは、表Ｂの５レコード目を含むデータをフェッチする。ＤＢＭＳは、タスク１２Ｂ及び１２Ｃの実行に必要なメモリ資源をそれぞれ割り当て、タスク１２Ｂ及び１２Ｃを実行する。ここで、タスク１２Ａについて、その実行結果に基づいて新たに生成可能なタスクは残り四つあるので、ＤＢＭＳは、新たなタスクの生成が可能になるまでタスク１２Ａによるタスクの生成を待たせる。【００２９】
（ｔ２）（クエリブロック１）タスク１１Ｂ及び１１Ｃの実行により、表Ａの該当するレコードそれぞれからＡＣ１の値を抽出する。そして、抽出したＡＣ１の各値を集計し、該タスクの実行を終える。ＤＢＭＳは、実行を終えたタスク１１Ｂ及び１１Ｃそれぞれについて、割り当てていたメモリ資源を解放しタスク１１Ｂ及び１１Ｃを終了する（ｔ２の直後）。これにより、クエリブロック１の実行に関する第２のメモリ資源量が「２」となったため、ＤＢＭＳは、タスクの生成を待っていたタスク１１Ａについて同時生成タスク数決定処理を行う。該処理により同時生成タスク数を「２」と算出し、算出した数と同数のタスク１１Ｄ及び１１Ｅを生成する。タスク１１Ｄでは、表Ａの６レコード目を含むデータをフェッチし、タスク１１Ｅでは、表Ａの７レコード目を含むデータをフェッチする。ＤＢＭＳは、タスク１１Ｄ及び１１Ｅの実行に必要なメモリ資源をそれぞれ割り当て、タスク１１Ｄ及び１１Ｅを実行する。ここで、タスク１１Ａについて、その実行結果に基づいて新たに生成可能なタスクは残り一つあるので、ＤＢＭＳは、新たなタスクの生成が可能になるまでタスク１１Ａによるタスクの生成を待たせる。【００３０】
（ｔ２）（クエリブロック２）タスク１２Ｂ及び１２Ｃの実行により、表Ｂの該当するレコードそれぞれからＢＣ１の値を抽出する。ＤＢＭＳは、該タスクにより抽出したＢＣ１の値それぞれについて、クエリブロック１の結果（平均値）を参照し比較する必要がある。しかしながら、クエリブロック１の実行を完了していないため、上記した比較処理を行うことができない。従って、ＤＢＭＳは、タスク１２Ｂ及び１２Ｃについて、抽出したＢＣ１の値が格納されたメモリ資源を割り当てたまま、クエリブロック１の実行が完了するまで、該タスクの実行を待たせる。【００３１】
（ｔ３）（クエリブロック１）タスク１１Ｄ及び１１Ｅの実行により、表Ａの該当するレコードそれぞれからＡＣ１の値を抽出する。そして、抽出したＡＣ１の各値を集計し、該タスクの実行を終える。ＤＢＭＳは、実行を終えたタスク１１Ｄ及び１１Ｅそれぞれについて、割り当てていたメモリ資源を解放し該タスクを終了する（ｔ３の直後）。これにより、クエリブロック１の実行に関する第２のメモリ資源量が「２」となったため、ＤＢＭＳは、タスクの生成を待っていたタスク１１Ａについて同時生成タスク数決定処理を行う。該処理により同時生成タスク数を「１」と算出し、算出した数と同数のタスク１１Ｆを生成する。ＤＢＭＳは、表Ａの９レコード目を含むデータをフェッチするためのタスク１１Ｆに対して、実行に必要なメモリ資源を割り当て、実行する。ここで、タスク１１Ａについて、その実行結果に基づいて生成可能であった五つのタスクを全て生成し実行開始したので、ＤＢＭＳは、タスク１１Ａに割り当てていたメモリ資源を解放しタスク１１Ａを終了する。【００３２】
（ｔ３）（クエリブロック２）タスク１２Ｂ及び１２Ｃについて、ｔ２と同様に、クエリブロック１の結果を得ることができないので、該タスクの実行を待たせる。【００３３】
（ｔ４）（クエリブロック１）タスク１１Ｆの実行により、表Ａの該当するレコードＡＣ１の値を抽出し集計することで、クエリブロック１の結果であるＡＣ１の平均値「３００」を得る（ｔ４の直後）。そして、該タスクの実行を終える。ＤＢＭＳは、タスク１１Ｆに割り当てていたメモリ資源を解放し、該タスクを終了する。
（ｔ４直後）（クエリブロック２）タスク１２Ｂ及び１２Ｃについて、ＤＢＭＳは、該タスクにより抽出したＢＣ１の値それぞれについて、上記で得られたクエリブロック１の結果（平均値）より大きいか判定する。ＤＢＭＳは、該判定をそれぞれ否定的とし、タスク１２Ｂ及び１２Ｃの実行を終える。ＤＢＭＳは、実行を終えたタスク１２Ｂ及び１２Ｃそれぞれについて、割り当てていたメモリ資源を解放し該タスクを終了する。これにより、クエリブロック２の実行に関する第２のメモリ資源量が「２」となったため、ＤＢＭＳは、タスクの生成を待っていたタスク１２Ａについて同時生成タスク数決定処理を行う。該処理により同時生成タスク数を「２」と算出し、算出した数と同数のタスク１２Ｄ及び１２Ｅを生成する。タスク１２Ｄでは、表Ｂの６レコード目を含むデータをフェッチし、タスク１２Ｅでは、表Ｂの９レコード目を含むデータをフェッチする。ＤＢＭＳは、タスク１２Ｄ及び１２Ｅの実行に必要なメモリ資源をそれぞれ割り当て、該タスクを実行する。ここで、タスク１２Ａについて、その実行結果に基づいて新たに生成可能なタスクは残り二つあるので、ＤＢＭＳは、新たなタスクの生成が可能になるまでタスク１２Ａによるタスクの生成を待たせる。【００３４】
（ｔ５）（クエリブロック２）タスク１２Ｄ及び１２Ｅの実行により、表Ｂの該当するレコードそれぞれからＢＣ１の値を抽出し、抽出した値がクエリブロック１の結果より大きいか判定する。ＤＢＭＳは、タスク１２Ｄについて、該判定を否定的とし、タスク１２Ｄの実行を終える。また、タスク１２Ｅについて、該判定を肯定的とし、クエリの結果としてクエリ発行元に返す。そして、タスク１２Ｅの実行を終える。ＤＢＭＳは、実行を終えたタスク１２Ｄ及び１２Ｅそれぞれについて、割り当てていたメモリ資源を解放し該タスクを終了する（ｔ５の直後）。これにより、クエリブロック２の実行に関する第２のメモリ資源量が「２」となったため、ＤＢＭＳは、タスクの生成を待っていたタスク１２Ａについて同時生成タスク数決定処理を行う。該処理により同時生成タスク数を「２」と算出し、算出した数と同数のタスク１２Ｆ及び１２Ｇを生成する。タスク１２Ｆでは、表Ｂの１１レコード目を含むデータをフェッチし、タスク１２Ｇでは、表Ｂの１４レコード目を含むデータをフェッチする。ＤＢＭＳは、タスク１２Ｆ及び１２Ｇの実行に必要なメモリ資源をそれぞれ割り当て、該タスクを実行する。ここで、タスク１２Ａについて、その実行結果に基づいて生成可能であった六つのタスクを全て生成し実行開始したので、ＤＢＭＳは、タスク１２Ａに割り当てていたメモリ資源を解放しタスク１２Ａを終了する。
（ｔ６）（クエリブロック２）タスク１２Ｆ及び１２Ｇの実行により、表Ｂの該当するレコードそれぞれからＢＣ１の値を抽出し、抽出した値がクエリブロック１の結果より大きいか判定する。ＤＢＭＳは、当該二つのタスクについて、該判定を肯定的とし、クエリの結果としてクエリ発行元に返す。そして、当該二つのタスクの実行を終える。ＤＢＭＳは、実行を終えたタスク１２Ｆ及び１２Ｇそれぞれについて、割り当てていたメモリ資源を解放し該タスクを終了する。【００３５】
このように、図５の例では、ＤＢＭＳは、新たにタスクを生成する都度に、それぞれのクエリブロックを対象にした同時生成タスク数決定処理により同時生成タスク数を決定する。そして、タスクに対応したＤＢオペレーションの実行結果に基づいて動的に生成するタスクの総数を、同時生成タスク数以下とする。これにより、各クエリブロックの実行に消費されるメモリ資源の量はそれぞれ、該クエリブロックの実行に対して割り当て可能なメモリ資源量の固定的な上限「３」を超えない。従って、クエリ実行全体に消費されるメモリ資源の量は、制約された割り当て可能なメモリ資源量の上限「６」を超えない。故に、クエリの実行に消費されるメモリ資源が枯渇してしまうことを回避することができる。なお、「同時に生成されるタスク」とは、或るＤＢオペレーションの結果に基づき、ほぼ同じ時間帯に生成されるタスクであることを意味する。【００３６】
しかしながら、上記した図５に示す例においては、クエリブロック１の実行結果を参照するクエリブロック２のタスク１２Ｂ及び１２Ｃについて、クエリブロック１の実行が終了するまで（ｔ４まで）、割り当てられたメモリ資源を確保したまま待つこととなる。このため、制約されたメモリ資源を有効に利用できておらず、その結果、クエリ実行全体のタスク実行多重度、すなわちデータ読出し要求の多重度が低くなり、クエリ実行時間が伸びてしまう問題がある。【００３７】
そこで、実施例１では、ＤＢＭＳは、クエリブロック毎に、割り当て可能なメモリ資源量の上限を、クエリの実行開始時及びその後に動的に変更する。これにより、メモリ資源の有効利用を図る。【００３８】
実施例１において、ＤＢＭＳが図３のクエリを図４のクエリ実行プランに従って実行する際に、メモリ資源を有効に利用できることを示す模式図の例を図６に示す。表記のルールは図５と同様である。なお、図６においては、クエリブロック１及びクエリブロック２の実行それぞれに対する割り当て可能なメモリ資源量の上限は、固定的に決まっていないとする。図６の例では、ＤＢＭＳは、以下の通り実行する。【００３９】
（ｔ０直前）クエリの実行を開始する際に、該クエリの実行全体に割り当て可能なメモリ資源量の上限を決定する。ＤＢＭＳは、例えば、クエリ発行元のＡＰ（Application  Program）の属性に基づき、該メモリ資源量の上限を「６」と決定する（図５と同様）。続いて、ＤＢＭＳは、例えば、クエリブロック間の参照関係に基づき、決定したクエリ実行全体に割り当て可能なメモリ資源量を、クエリブロック毎の実行に配分する比率を決定する。クエリブロック間の参照関係として、例えば、図４のクエリ実行プランのクエリブロック２において、クエリブロック１の結果を参照するまでのＤＢオペレーション（もしくはデータ読出し要求）の数と全体数との関係が挙げられる。具体的には、図４のクエリブロック２において、クエリブロック１の結果を参照するまでのＤＢオペレーション（もしくはデータ読出し要求）の数は、クエリブロック２のＤＢオペレーション（もしくはデータ読出し要求）の総数に対して少ないといった関係である。そこで、ＤＢＭＳは、クエリブロック１の実行とクエリブロック２の実行それぞれにメモリ資源を配分する比率を５：１と決定する。ＤＢＭＳは、該比率に基づき、クエリブロック１の実行に対する割り当て可能なメモリ資源量の上限を「５」とし、クエリブロック２の実行に対する割り当て可能なメモリ資源量の上限を「１」とする（ｔ０の破線１５及び１６）。【００４０】
（ｔ０）（クエリブロック１）索引Ａにアクセスするためのタスクを生成する際に、同時生成タスク数決定処理を行う。例えば、ＤＢＭＳは、生成可能タスク数「１」と、第１のメモリ資源量「１」と、第２のメモリ資源量「５」（クエリブロック１の実行に対して割り当て可能なメモリ資源量の上限「５」）とに基づき、同時生成タスク数を「１」と算出する。ＤＢＭＳは、算出した同時生成タスク数「１」と同数のタスク１１Ａを生成し、対応するＤＢオペレーションに必要なメモリ資源を割り当てて実行する。【００４１】
（ｔ０）（クエリブロック２）索引Ｂにアクセスするためのタスクを生成する際に、同時生成タスク数決定処理を行う。例えば、ＤＢＭＳは、生成可能タスク数「１」と、第１のメモリ資源量「１」と、第２のメモリ資源量「１」（クエリブロック２の実行に対して割り当て可能なメモリ資源量の上限「１」）とに基づき、同時生成タスク数を「１」と算出する。ＤＢＭＳは、算出した同時生成タスク数「１」と同数のタスク１２Ａを生成し、対応するＤＢオペレーションに必要なメモリ資源を割り当てて実行する。【００４２】
（ｔ１）（クエリブロック１）タスク１１Ａの実行結果に基づき、表Ａの五つのレコードを含むデータそれぞれをフェッチさせるためのタスクを五つ生成する際に、同時生成タスク数決定処理を行う。例えば、ＤＢＭＳは、生成可能タスク数「５」と、第１のメモリ資源量「１」と、第２のメモリ資源量「４」（クエリブロック１の実行に対して割り当て可能なメモリ資源量の上限「５」から割り当て済みのメモリ資源量「１」を減算した値）とに基づき、同時生成タスク数を「４」と算出する。ＤＢＭＳは、算出した同時生成タスク数「４」と同数のタスク（１１Ｂ、１１Ｃ、１１Ｄ、及び１１Ｅ）を生成し、対応するＤＢオペレーションに要するメモリ資源をそれぞれ割り当てて実行する。ここで、タスク１１Ａについて、その実行結果に基づいて新たに生成可能なタスクは残り一つあるので、ＤＢＭＳは、新たなタスクの生成が可能になるまでタスク１１Ａによるタスクの生成を待たせる。【００４３】
（ｔ１）（クエリブロック２）タスク１２Ａの実行結果に基づき、表Ｂの六つのレコードを含むデータそれぞれをフェッチさせるためのタスクを六つ生成する際に、同時生成タスク数決定処理を行う。例えば、ＤＢＭＳは、生成可能タスク数「６」と、第１のメモリ資源量「１」と、第２のメモリ資源量「０」（クエリブロック２の実行に対して割り当て可能なメモリ資源量の上限「１」から割り当て済みのメモリ資源量「１」を減算した値）とに基づき、同時生成タスク数を「０」と算出する。ＤＢＭＳは、算出した結果に基づき、新たなタスクを生成しない。そして、タスク１２Ａについて、新たなタスクの生成が可能になるまでタスク１２Ａによるタスクの生成を待たせる。【００４４】
（ｔ２）（クエリブロック１）タスク１１Ｂ、１１Ｃ、１１Ｄ、及び１１Ｅの実行を終え、該タスクに割り当てていたメモリ資源を解放し該タスクを終了する（ｔ２の直後）。これにより、クエリブロック１の実行に関する第２のメモリ資源量が「４」となったため、ＤＢＭＳは、タスクの生成を待っていたタスク１１Ａについて同時生成タスク数決定処理を行う。該処理により同時生成タスク数を「１」と算出し、算出した数と同数のタスク１１Ｆを生成し、必要なメモリ資源を割り当てて実行する。ここで、タスク１１Ａについて、その実行結果に基づいて生成可能であった五つのタスクを全て生成し実行開始したので、ＤＢＭＳは、タスク１１Ａに割り当てていたメモリ資源を解放しタスク１１Ａを終了する（ｔ２の直後）。【００４５】
（ｔ２直後）ＤＢＭＳは、例えば、クエリブロック毎の実行進捗状況に応じて、各クエリブロックの実行に配分するメモリ資源量を決定する。クエリブロックの実行進捗状況として、例えば、タスクの生成を待っているタスクの数がある。ｔ２の直後に、クエリブロック１におけるタスクの生成を待っているタスクの数がゼロになったことから、ＤＢＭＳは、例えば、クエリブロック１に対する割り当て可能なメモリ資源量の上限を「５」から「１」に下げ、クエリブロック２に対する割り当て可能なメモリ資源量の上限を「１」から「５」に上げる。【００４６】
（ｔ２直後）（クエリブロック２）クエリブロック２に関する第２のメモリ資源量が「４」（クエリブロック２の実行に対して割り当て可能なメモリ資源量の上限「５」から割り当て済みのメモリ資源量「１」を減算した値）となったため、タスクの生成を待っていたタスク１２Ａについて同時生成タスク数決定処理を行う。該処理により同時生成タスク数を「４」と算出し、算出した数と同数のタスク（１２Ｂ、１２Ｃ、１２Ｄ、及び１２Ｅ）を生成し、必要なメモリ資源をそれぞれ割り当てて実行する。ここで、タスク１２Ａについて、その実行結果に基づいて新たに生成可能なタスクは残り二つあるので、ＤＢＭＳは、新たなタスクの生成が可能になるまでタスク１２Ａによるタスクの生成を待たせる。【００４７】
（ｔ３）（クエリブロック１）タスク１１Ｆの実行により、クエリブロック１の結果を生成し、タスク１１Ｆの実行を終える（ｔ３の直後）。ＤＢＭＳは、タスク１１Ｆに割り当てていたメモリ資源を解放し、該タスクを終了する。
（ｔ３直後）ＤＢＭＳは、例えば、クエリブロックの実行進捗状況である、クエリブロック１を実行するタスクの数がゼロとなったことから、クエリブロック１に対する割り当て可能なメモリ資源量の上限を「１」から「０」に更に下げ、クエリブロック２に対する割り当て可能なメモリ資源量の上限を「５」から「６」に更に上げる。【００４８】
（ｔ３直後）（クエリブロック２）タスク１２Ｂ、１２Ｃ、１２Ｄ及び１２Ｅについて、クエリブロック１の結果を参照し、クエリの結果を生成して該タスクの実行を終了する。実行を終えた上記四つのタスクについて、割り当てていたメモリ資源を解放し該タスクを終了する。ＤＢＭＳは、クエリブロック２に関する第２のメモリ資源量が「５」（クエリブロック２の実行に対して割り当て可能なメモリ資源量の上限「６」から割り当て済みのメモリ資源量「１」を減算した値）となったため、タスクの生成を待っていたタスク１２Ａについて同時生成タスク数決定処理を行う。該処理により同時生成タスク数を「２」と算出し、算出した数と同数のタスク１２Ｆ及び１２Ｇを生成し、必要なメモリ資源を割り当てて実行する。タスク１２Ａについて、その実行結果に基づいて生成可能であった六つのタスクを全て生成し実行開始したので、ＤＢＭＳは、タスク１２Ａに割り当てていたメモリ資源を解放しタスク１２Ａを終了する。
（ｔ４）タスク１２Ｆ及び１２Ｇについて、クエリブロック１の結果を参照し、クエリの結果を生成して該タスクの実行を終了する。ＤＢＭＳは、タスク１２Ｆ及び１２Ｇについて、割り当てていたメモリ資源を解放し該タスクを終了する。【００４９】
このように、本実施例１では、クエリブロック１の結果を待つタスクの数を最小化でき、限られたメモリ資源を有効に活用してタスク実行多重度を最大化できる。その結果として、クエリの実行を終了する時間を、図５の例ではｔ６であったものを、本実施例１では、ｔ４とでき、クエリ実行時間を短縮化可能である。まとめると、実施例１では、ＤＢＭＳは、新たなクエリを実行する際や、クエリブロックを実行している状況に応じて、各クエリブロックの実行に対して割り当て可能なメモリ資源量の上限を動的に変更する。これにより、割り当て可能なメモリ資源量に制約のある環境において、当該制約の範囲内で、適切なタイミングに適切なクエリブロックの実行に対してメモリ資源を割り当てることができる。その結果、複数のクエリブロックを含むクエリ実行プランとなるクエリについて、その実行全体に渡って、タスクの実行多重度、すなわち、データ読出し要求の多重度を向上させる効果が期待でき、故に、クエリ実行時間の短縮化が期待できる。
なお、本実施例において、タスク自体の生成に要するメモリ資源の量の制約等により、クエリの実行に使用可能なタスクの数が限られる場合、各クエリブロックの実行に対して割り当て可能なメモリ資源量の上限を動的に変更することと合わせて、該当のクエリブロックを実行可能なタスクの数の上限を動的に決定しても良い。すなわち、図６において、各クエリブロックの実行に対して割り当て可能なメモリ資源量の上限である破線１５及び１６の変動と合わせて、各クエリブロックを実行可能なタスクの数の上限を変動させても良い。【００５０】
なお、クエリ毎の実行に割り当て可能なメモリ資源量の上限は、例えば、下記（１）又は（２）、
（１）同時に実行するクエリの総数が変化する、
（２）少なくとも一つのクエリの優先度が変化する、
を契機に変化して良い。
また、図５及び図６は、概要のイメージを表す模式的な図であり、ＤＢＭＳは、複数のタスクを同じ時点で開始しなくても良い。【００５１】
以下、実施例１を詳細に説明する。【００５２】
図７は、実施例１に係る計算機システムの構成を示す。【００５３】
ＤＢサーバ４０１が通信ネットワーク４０３を介して外部ストレージ装置４０２に接続されている。通信ネットワーク４０３を介した通信のプロトコルとしては、例えば、ＦＣ（Fibre  Channel）、ＳＣＳＩ（Small  Computer  System  Interface）、又は、ＴＣＰ／ＩＰ（Transmission  Control  Protocol／Internet  Protocol）が採用されて良い。【００５４】
ＤＢサーバ４０１は、計算機、例えば、パーソナルコンピュータ、ワークステーション又はメインフレーム、もしくは、これらのいずれかによって構成される仮想的な計算機（仮想マシン）である。ＤＢサーバ４０１は、ネットワークアダプタ４１３、メモリ４１６、ローカル記憶デバイス４１５及びそれらに接続されたプロセッサ（典型的にはマイクロプロセッサ）４１４を有する。プロセッサ４１４は、コンピュータプログラム、例えば、ＯＳ（Operating  System）４１５と、ＤＢＭＳ４１２と、ＤＢＭＳ４１２にクエリを発行するＡＰ（Application  Program）４１１とを実行する。メモリ４１６は、プロセッサ４１４によって実行されるプログラムと、プログラムが使用するデータとを一時的に記憶する。ローカル記憶デバイス４１５は、プログラム、及びプログラムが使用するデータを格納する。ネットワークアダプタ４１３は、通信ネットワーク４０３とＤＢサーバ４０１とを接続する。ＡＰ４１１は、ＤＢサーバ４０１ではなく、通信ネットワーク４０３に接続される図示しない別の計算機で動作しても良い。また、プロセッサ４１４は、ネットワークアダプタ４１３及びメモリ４１６等に接続された制御デバイスに含まれている要素で良い。制御デバイスは、プロセッサ４１４の他に、専用ハードウェア回路（例えば、データの暗号化及び／又は復号化を行う回路）を含んで良い。【００５５】
なお、ＤＢサーバ４０１は、性能面や冗長性の観点から、プロセッサ４１４、メモリ４１６、ローカル記憶デバイス４１５及びネットワークアダプタ４１３のうちの少なくとも一つの要素を複数備えていても良い。また、ＤＢサーバ４０１は、図示しない入力デバイス（例えば、キーボード及びポインティングデバイス）と表示デバイス（例えば液晶ディスプレイ）とを有して良い。入力デバイスと表示デバイスは一体になっていても良い。【００５６】
ＤＢサーバ４０１では、ＤＢＭＳ４１２が、ＡＰ４１１から発行されたクエリを実行する。ＤＢＭＳ４１２は、クエリの実行する際に、外部ストレージ装置４０２に格納されたＤＢ４５１に対するＩ／Ｏ要求をＯＳ４１５に発行する。ＯＳ４１５が、ＤＢＭＳ４１２から発行されたＩ／Ｏ要求を、外部ストレージ装置４０２に送信する。【００５７】
外部ストレージ装置４０２は、本実施例では、ディスクアレイ装置のような、複数の記憶デバイス４４３を有する装置である。それに代えて、外部ストレージ装置４０２は、単一の記憶デバイスであっても良い。外部ストレージ装置４０２は、ＤＢサーバ４０１が使用するデータ及びプログラムを記憶する。外部ストレージ装置４０２は、ＤＢサーバ４０１からＩ／Ｏ要求を受信し、Ｉ／Ｏ要求に対応した処理を実行し、処理結果をＤＢサーバ４０１に送信する。【００５８】
外部ストレージ装置４０２は、ネットワークアダプタ４４１、記憶デバイス群４４３及びそれらに接続されたコントローラ４４２を有する。【００５９】
ネットワークアダプタ４４１は、外部ストレージ装置４０２を通信ネットワーク４０３に接続する。【００６０】
記憶デバイス群４４３は、１以上の記憶デバイスを含む。記憶デバイスは、不揮発性の記憶媒体であって、例えば、磁気ディスク、フラッシュメモリ、その他半導体メモリである。記憶デバイス群４４３は、ＲＡＩＤ（Redundant  ARRAY  of  Independent  Disks）に従い所定のＲＡＩＤレベルでデータを記憶するグループであっても良い。記憶デバイス群４４３の記憶空間に基づいて、論理的な記憶デバイス（論理ボリューム）がＤＢサーバ４０１に提供されても良い。記憶デバイス群４４３は、ＤＢ４５１を記憶する。【００６１】
コントローラ４４２は、例えば、メモリ及びプロセッサを含む。コントローラ４４２は、ＤＢサーバ４０１からのＩ／Ｏ要求に従って、ＤＢ４５１を記憶した記憶デバイス群４４３にデータを入出力する。例えば、コントローラ４４２は、ＤＢサーバ４０１からの書込み要求に従う書込み対象のデータを記憶デバイス群４４３に格納する。また、ＤＢサーバ４０１からの読出し要求に従う読出し対象のデータを記憶デバイス群４４３から読み出し、そのデータをＤＢサーバ４０１に送信する。【００６２】
なお、外部ストレージ装置４０２は、性能面や冗長性確保の観点から、コントローラ４４２等の要素を複数備えても良い。【００６３】
ＤＢＭＳ４１２は、業務データを含むＤＢ４５１を管理する。ＤＢ４５１は、１以上の表４６２や索引４６１を含む。表は１以上のレコードの集合であり、レコードは１以上のカラムから構成される。索引は、表の中の１以上のカラムを対象に作成されるデータ構造であり、当該索引が対象とするカラムを含む選択条件による表へのアクセスを高速化する。例えば、索引は、対象とするカラムの値毎にその値を含む表の中のレコードを特定する情報（ＲｏｗＩＤ）を保持するデータ構造であり、Ｂ木構造等が用いられる。ＤＢの表や索引の構成例は、図１及び図２に示した通りである。【００６４】
ＤＢＭＳ４１２は、クエリ受付部４２１、クエリ実行プラン生成部４２２、クエリ実行部４２３、実行タスク管理部４２６及びＤＢバッファ管理部４２７を含む。【００６５】
クエリ受付部４２１は、ＡＰ４２１が発行するクエリを受け付ける。クエリは、例えばＳＱＬ（Structured  Query  Language）で記述される。【００６６】
クエリ実行プラン生成部４２２は、クエリ受付部４２１が受け付けたクエリについて、該クエリを実行するために必要な１以上のＤＢオペレーションを表す情報を有するクエリ実行プランを生成する。クエリ実行プランは、例えば、クエリの実行の際に行うべきＤＢオペレーションについてその実行順序を木構造で定義した情報であり、メモリ４１６に格納される。また、クエリ実行プランは、ＤＢオペレーション毎に、タスクによる実行の際に要するメモリ資源の量を表す情報を含んで良い。例えば、或る表のレコードを読み出すＤＢオペレーションを表す情報を含むクエリ実行プランの場合、そのクエリ実行プランは、該表のレコードをメモリ４１６内に格納するためのメモリ資源量に関する情報を含んで良い。クエリ実行プランの一例は、図４に示した通りである。【００６７】
実行タスク管理部４２６は、クエリを実行するためのタスクを管理する。例えば、実行タスク管理部４２６は、タスクを生成するためのメモリ資源を管理しており、クエリ実行部４２３からのタスクの生成要求に従って、タスク自体に要するメモリ資源を確保してタスクを生成する。また、クエリ実行部４２３からのタスクの終了要求に従って、タスク自体に要するメモリ資源を解放してタスクを終了する。ここで、タスクとしては、任意のモジュールを採用することができる。例えば、タスクは、ＯＳ４１５が管理するプロセス又はスレッドでも良いし、ＤＢＭＳ４１２で実装される疑似プロセス又は疑似スレッドでも良い。【００６８】
ＤＢバッファ管理部４２７は、ＤＢ４５１内のデータを一時的に格納するための記憶領域（ＤＢバッファ）を管理する。ＤＢバッファは、メモリ４１６上に構築される。また、ＤＢバッファは、ローカル記憶デバイス４１５上に構築されても良い。【００６９】
クエリ実行部４２３は、クエリ実行プラン生成部４２２が生成したクエリ実行プランに従って、クエリ実行プランに含まれる情報であるＤＢオペレーションを実行するためのタスクを動的に生成して実行する。そして、実行した結果をクエリ発行元に返す。例えば、クエリ実行部４２３は、（ａ）ＤＢオペレーションを実行するためのタスクを実行タスク管理部４２６に要求して生成すること、（ｂ）生成されたタスクを実行することで、当該タスクに対応したＤＢオペレーションに必要なデータを読み出す（ＤＢ４５１を有する外部ストレージ装置４０２へＯＳ４１５を介して読出し要求を発行する）こと、（ｃ）上記（ｂ）で実行されたタスクに対応したＮ番目のＤＢオペレーションの実行結果に基づき（Ｎ＋１）番目のＤＢオペレーションを実行する場合には、当該実行結果に基づくタスクを実行タスク管理部４２６に要求して新たに生成すること（Ｎは１以上の整数）、及び、（ｄ）その新たに生成したタスクについて上記（ｂ）及び上記（ｃ）を行うこと、を行う。クエリ実行部４２３は、上記（ｂ）及び（ｄ）において、２以上の実行可能なタスクが存在する場合には、それら２以上のタスクのうちの少なくとも二つのタスクを並行して実行する。【００７０】
クエリ実行部４２３は、タスクを新たに生成する場合に同時に生成可能なタスクの数である同時生成タスク数を決定する同時生成タスク数決定部４３１と、クエリの実行に割り当て可能なメモリ資源を管理するメモリ資源管理部４２５と、クエリの実行に関する情報を有するクエリ実行管理表４２４と、クエリブロック毎の実行に関する優先度を決定するクエリブロック優先度制御部４３２とを有する。クエリブロックについては図８で後述する。【００７１】
前述したクエリ受付部４２１、クエリ実行プラン生成部４２２、実行タスク管理部４２６、ＤＢバッファ管理部４２７、クエリ実行部４２３（同時生成タスク数決定部４３１、メモリ資源管理部４２５、及びクエリブロック優先度制御部４３２）の処理は、プロセッサ４１４がＤＢＭＳ４１２を実行することによって実現される。上記の処理のうち、少なくとも一つの処理部に関する処理の中の少なくとも一部が、ハードウェアで行われても良い。また、本実施例の説明において、処理部が主語になる場合は、実際にはプロセッサ４１４によってその処理部が実行されることを意味する。ここで、処理部の少なくとも一部がハードウェアで実現されている場合は、プロセッサ４１４に加えて、そのハードウェアも、主語とされ得る。ＤＢＭＳ４１２等のコンピュータプログラムは、例えば、プログラムソースからＤＢサーバ４０１にインストールされて良い。プログラムソースは、例えば、ＤＢサーバ４０１が読み取り可能な記憶メディアで良い。【００７２】
また、図７に示したＤＢＭＳ４１２の構成は、一例である。例えば、或る処理部が複数の処理部に分割されたり、複数の処理部の機能を統合した一つの処理部が構築されたりしても良い。【００７３】
図８は、クエリ実行管理表４２４の構成を示す。【００７４】
クエリ実行管理表４２４は、クエリブロック単位でその実行に関する情報を有する。「クエリブロック」とは、クエリ実行プランに含まれる情報であるＤＢオペレーションのうちの１以上のＤＢオペレーションの集合である。クエリブロックを複数含むクエリ実行プランとなるクエリとして、例えば、図３のようにサブクエリ内に集計処理を含むクエリ、ハッシュ結合処理を行うクエリ、ＵＮＩＯＮ等の集合演算を含むクエリ、ＥＸＩＳＴＳ句に関するサブクエリを含むクエリ等がある。このようなクエリ実行プランには、或るクエリブロックが、別のクエリブロックの実行結果（例えば、サブクエリに関する集計結果）を参照するＤＢオペレーションを含むことがある。すなわち、上記のようなクエリ実行プランは、参照される結果を生成する１以上のＤＢオペレーションを含むクエリブロック（被参照クエリブロック）と、被参照クエリブロックの結果を参照するＤＢオペレーションを含むクエリブロック（参照クエリブロック）を有する。ここで、被参照クエリブロックと参照クエリブロックとは、参照関係があると言う。より具体的な一例として、図３のようにサブクエリ内に集計処理を含むクエリの場合、そのクエリ実行プランは、図４に示した通り、サブクエリに関するクエリブロック１とクエリの残り部分（サブクエリの外側部分）に関するクエリブロック２との二つのクエリブロックを有する。クエリ実行部４２３は、クエリ実行プランにおける複数のクエリブロックを並行して実行することができる。なお、相関条件があるサブクエリを含むクエリについては、本実施例では基本的に対象とせず、後述する実施例２で述べる。
クエリ実行管理表４２４は、クエリブロック毎の情報として、優先度９０１、最優先フラグ９０２、目標実行時間９０３、実行開始時刻９０４、実行タスク数９０５、タスク生成待ちタスク数９０６、実行待ちタスク数９０７、実行達成率９０８、既割り当てメモリ資源量９０９及び既予約メモリ資源量９１０を有する。更に、クエリ実行管理表４２４は、複数のクエリブロックに共通の情報として、未予約メモリ資源量９１１及び割り当て可能総メモリ資源量９１２を有する。各種情報は、下記の通りである。
（＊）優先度９０１は、クエリブロックを実行する優先度を表す。優先度９０１としての数値が高いほど、優先度が高い。優先度は、例えば、クエリ実行プランにおける複数のクエリブロック間の参照関係、クエリブロック毎の実行進捗状況、又は、クエリブロック毎の実行に対して、必要とするメモリ資源量と割り当て可能なメモリ資源量との関係を基に、クエリブロック優先度制御部４３２により、或いはユーザにより決定されて良い。
（＊）最優先フラグ９０２は、最優先して実行されるクエリブロックである（オン）か否かを示すフラグである。本フラグ９０２は、ＤＢＭＳ４１２が受け付けるクエリ自体に指定されても良いし、クエリとは別にＤＢＭＳ４１２の外側からユーザにより手動で設定されても良いし、ＤＢＭＳ４１２の内部でクエリ実行プラン生成部４２２によりクエリ実行プランを生成される際にその内容に応じて設定されても良い。
（＊）目標実行時間９０３は、クエリブロックの実行にかける時間の目標値を示す。本目標値は、ユーザにより指定されても良いし、ＤＢＭＳ４１２（例えばクエリ実行プラン生成部４２２）により決定されても良い。例えば、クエリ実行プラン生成部４２２は、コスト計算を基にクエリ実行プランを生成する際に、その計算に基づく予測実行時間を目標実行時間９０３と決めても良い。
（＊）実行開始時刻９０４は、クエリブロックの実行を開始した時刻を示す。
（＊）実行タスク数９０５は、クエリブロックにおいて実行しているタスクの数を示す。
（＊）タスク生成待ちタスク数９０６は、クエリブロックの実行に際して新たなタスクの生成を待っているタスクの数を示す。
（＊）実行待ちタスク数９０７は、クエリブロックにおいて、参照関係のある被参照クエリブロックの実行が完了していないことから、実行の開始を待っているタスクの数を示す。
（＊）実行達成率９０８は、クエリブロックの実行が全体のうちのどこまで終了したかを示す。すなわち、実行達成率９０８は、クエリブロックの実行の進捗を示す。例えば、実行達成率９０８は、上記のコスト計算に基づく予測全Ｉ／Ｏ数（予測ＤＢオペレーション数）に対する、実行を完了したＩ／Ｏ数（完了ＤＢオペレーション数）の比率で良い。
（＊）既割り当てメモリ資源量９０９は、クエリブロックの既予約メモリ資源量９１０のうち、そのクエリブロックの実行に割り当て済みのメモリ資源量を示す。
（＊）既予約メモリ資源量９１０は、クエリブロックを実行するために予約済みのメモリ資源量を示す。
（＊）未予約メモリ資源量９１１は、割り当て可能総メモリ資源量９１２のうちいずれのクエリブロックの実行にも予約されていないメモリ資源の総量である。
（＊）割り当て可能総メモリ資源量９１２は、全てのクエリブロックの実行に対して割り当て可能なメモリ資源の総量である。【００７５】
メモリ資源管理部４２５は、クエリの実行に用いるメモリ資源に関する情報９０９〜９１２を管理する。メモリ資源管理部４２５は、少なくとも一つのクエリブロックの実行を開始する前に、割り当て可能総メモリ資源量９１２を登録していて良い。なお、クエリ実行部４２３は、クエリ実行管理表４２４を排他的に更新して良い。【００７６】
以下、図９〜図２４を参照して、本実施例で行われる種々の処理を説明する。【００７７】
図９は、ＤＢＭＳ４１２が受け付けたクエリの実行において、タスクを生成し実行する処理の全体の流れを示す。図９は、一つのクエリ実行の流れを示す。なお、同時に実行するクエリが２以上ある場合には、ＤＢＭＳ４１２は、その２以上のクエリについて並行して図９に示す処理を行って良い。【００７８】
Ｓ１００１で、クエリ実行プラン生成部４２２は、ＤＢ４５１のデータの統計情報（以下、「ＤＢ統計情報」）に基づいて、クエリ受付部４２１が受け付けたクエリに関するクエリ実行プランを生成する。クエリ実行プラン生成部４２２は、１以上のクエリ実行プランの候補の各々についてコスト計算を行い、そのうち一つのクエリ実行プランの候補をクエリ実行プランとして選んでも良い。ＤＢ統計情報は、例えば、各表４６２について、レコードの数を表す情報、カラム毎のデータの最大値及び最小値に関する情報、或いはカラム毎のデータの分布状況を表すヒストグラム等の統計情報を含んで良い。ＤＢ統計情報は、ローカル記憶デバイス４１５又はメモリ４１６に格納される。ＤＢ統計情報は、ＤＢＭＳ４１２がＤＢ４５１をチェックすることにより生成されても良いし、ＤＢＭＳ４１２の外部から入力されても良い。また、クエリ実行プランは、ＤＢ統計情報のみならず、クエリの記述に基づいて生成されても良い。クエリ実行プラン生成部４２２は、Ｓ１００１を行った時刻を、このクエリに対応するクエリブロックの実行開始時刻９０４としてクエリ実行管理表４２４に登録するようクエリ実行部４２３に指示して良い。また、クエリ実行プラン生成部４２２は、生成するクエリ実行プランに基づいて、クエリ実行管理表４２４における、そのクエリに対応するクエリブロックの優先度９０１、最優先フラグ９０２、及び、目標実行時間９０３を登録するようクエリ実行部４２３に指示しても良い。なお、クエリ実行部４２３は、生成したクエリ実行プランに含まれるクエリブロックそれぞれについて、対応する優先度９０１を、図２３に示す優先度自動変更処理により決定し、クエリ実行管理表４２４に登録する。【００７９】
Ｓ１００２で、クエリ実行部４２３は、Ｓ１００１で生成したクエリ実行プランに基づいて、新たに生成可能なタスク数である生成可能タスク数を算出する。例えば、クエリ実行部４２３は、クエリ実行プランを基に、複数のタスクにより並行して実行可能なクエリブロックの数を判別し、その判別したクエリブロックの数を生成可能タスク数として算出する。【００８０】
Ｓ１００３で、クエリ実行部４２３（同時生成タスク数決定部４３１）は、同時生成タスク数を決定する処理である同時生成タスク数決定処理を行う。同時生成タスク数決定処理の詳細は、図１４に示す通りである。図１４によれば、クエリ実行部４２３は、同時生成タスク数決定処理により、同時生成タスク数のタスク各々に割り当てるためのメモリ資源を予約する。【００８１】
Ｓ１００４で、クエリ実行部４２３は、Ｓ１００３で決定された同時生成タスク数と同じ数のタスクの生成を実行タスク管理部４２６に要求する。実行タスク管理部４２６は、要求された数のタスクを生成する。なお、生成したタスクの数が同時生成タスク数を下回る場合には、クエリ実行部４２３は、Ｓ１００３で予約したメモリ資源のうち、同時生成タスク数の中で生成していないタスクに関するメモリ資源の予約を解消しても良い。【００８２】
Ｓ１００５で、クエリ実行部４２３は、Ｓ１００４で生成した各々のタスクを実行する処理（タスク実行処理）を並行して行う。実行されるタスク実行処理の詳細は、図１０に示す通りである。なお、クエリ実行部４２３は、Ｓ１００３で決定した同時生成タスク数がゼロである場合には、Ｓ１００４及びＳ１００５のステップでは何も行わない。【００８３】
Ｓ１００６で、クエリ実行部４２３は、Ｓ１００２で算出した生成可能タスク数のタスクが全て生成された否かを判断する。クエリ実行部４２３は、該判断の結果が肯定的であれば、処理を終了する。該判断の結果が否定的であれば、Ｓ１００７を行う。なお、クエリ実行部４２３は、クエリの実行結果を、Ｓ１００５で実行したタスクの処理の延長で生成する。【００８４】
Ｓ１００７で、クエリ実行部４２３は、新たなタスクの生成が可能か否かを判断する。例えば、クエリ実行部４２３は、新たなタスクの生成が可能か否かを実行タスク管理部４２６に問い合わせる。実行タスク管理部４２６は、例えば、タスクを生成するために管理しているメモリ資源の割り当て状況に応じて、問合せに回答する。また、クエリ実行部４２３は、例えば、クエリ実行管理表４２４を参照し、未予約メモリ資源量９１１が新たなタスクに対応するＤＢオペレーションに必要なメモリ資源量を上回るかを判定する。クエリ実行部４２３は、この判定結果と実行タスク管理部４２６からの上記回答とに基づき、新たなタスクの生成が可能か否かを判断する。クエリ実行部４２３は、Ｓ１００７の判断の結果が肯定的であれば、再びＳ１００３を行い、Ｓ１００７の判断の結果が否定的であれば、Ｓ１００８を行う。【００８５】
Ｓ１００８で、クエリ実行部４２３は、タスク生成保留処理を行う。タスク生成保留処理の詳細は、図１１に示す通りである。【００８６】
図１０は、タスク実行処理（図９のＳ１００５及び図１０のＳ１１０７）の流れを示す。図１０は、一つの親タスク（図１０の説明において「対象親タスク」と言う）を例に取った流れを示す。また、図１０の説明において、「親タスク」とは、任意の一つのタスクを意味する。親タスクを元に生成されたタスクを「子タスク」と言う。クエリ実行部４２３により子タスクを元に別のタスクが生成された場合、子タスクが親タスクに相当し、生成された別のタスクが子タスクに相当する。なお、図１０の説明において、対象親タスクに関するクエリブロックを、「対象クエリブロック」と言う。【００８７】
Ｓ１１０１で、クエリ実行部４２３（メモリ資源管理部４２５）は、対象親タスクへのメモリ資源割り当て処理を行う。メモリ資源割り当て処理の詳細は、図１５に示す通りである。【００８８】
Ｓ１１０２で、クエリ実行部４２３は、対象クエリブロックに対応するクエリ実行管理表４２４の情報を更新する。具体的には、クエリ実行部４２３は、対象クエリブロックに対応する実行タスク数９０５に１を加算する。【００８９】
Ｓ１１０３で、クエリ実行部４２３は、対象親タスクに対応するＤＢオペレーション実行処理を行う。ＤＢオペレーション実行処理の詳細は、図１２に示す通りである。【００９０】
Ｓ１１０４で、クエリ実行部４２３は、Ｓ１１０３で実行したＤＢオペレーションの実行結果を基に、クエリ実行プラン上の次のＤＢオペレーションを行うために新たに生成可能な子タスクの数である生成可能タスク数を算出する。例えば、クエリ実行部４２３は、Ｓ１１０３で、対象親タスクにより、図１で示した索引ＡのＲｏｗＩＤ  Ｌｉｓｔ「ａ１」を検索するＤＢオペレーションを実行したとする。このとき、クエリ実行部４２３は、該実行結果に基づき、表Ａの五つのレコード（１レコード目、３レコード目、６レコード目、７レコード目、及び、９レコード目）を含むデータそれぞれをフェッチする（図４のクエリ実行プラン上の次のＤＢオペレーション）ために新たに生成できる子タスクの数を５と判別し、該数を生成可能タスク数として算出する。なお、対象親タスクに対応するＤＢオペレーションがクエリ実行の結果生成等であり次のＤＢオペレーションが無い場合には、クエリ実行部４２３は、生成可能タスク数をゼロと算出する。生成可能タスク数をゼロと算出した場合、クエリ実行部４２３は、Ｓ１１０５、Ｓ１１０６、Ｓ１１０７、及び、Ｓ１１０８のステップでは何も行わず、Ｓ１１０９のステップを行う。【００９１】
Ｓ１１０５で、クエリ実行部４２３（同時生成タスク数決定部４３１）は、同時生成タスク数決定処理を行う。同時生成タスク数決定処理の詳細は、図１４に示す通りである。図１４によれば、クエリ実行部４２３は、同時生成タスク数決定処理により、同時生成タスク数のタスク各々に割り当てるためのメモリ資源を予約する。【００９２】
Ｓ１１０６で、クエリ実行部４２３は、Ｓ１１０５で決定された同時生成タスク数と同じ数の子タスクの生成を実行タスク管理部４２６に要求する。実行タスク管理部４２６は、要求された数のタスクを生成する。なお、生成した子タスクの数が同時生成タスク数を下回る場合には、クエリ実行部４２３は、Ｓ１１０５で予約したメモリ資源のうち、同時生成タスク数の中で生成していないタスクに関するメモリ資源の予約を解消しても良い。【００９３】
Ｓ１１０７で、クエリ実行部４２３は、Ｓ１１０６で生成した各々の子タスクについて、Ｓ１１０３での対象親タスクに対応するＤＢオペレーションの実行結果に基づき、次のＤＢオペレーションを対応させてタスク実行処理（図１０に示す処理）を並行して行う。【００９４】
Ｓ１１０８で、クエリ実行部４２３は、Ｓ１１０４で算出した生成可能タスク数の子タスクが全て生成された否かを判断する。クエリ実行部４２３は、該判断の結果が肯定的であれば、Ｓ１１０９を行い、該判断の結果が否定的であれば、Ｓ１１１１を行う。【００９５】
Ｓ１１０９で、クエリ実行部４２３は、対象クエリブロックに対応するクエリ実行管理表４２４の情報を更新する。具体的には、クエリ実行部４２３は、対象クエリブロックに対応する実行タスク数９０５から１を減算する。【００９６】
Ｓ１１１０で、クエリ実行部４２３（メモリ資源管理部４２５）は、実行した対象親タスクについて解放可能なメモリ資源を解放するメモリ資源解放処理を行う。メモリ資源解放処理の詳細は、図１６に示す通りである。Ｓ１１１０の後、クエリ実行部４２３は、対象親タスクの終了を実行タスク管理部４２６に指示する。【００９７】
Ｓ１１１１で、クエリ実行部４２３は、新たな子タスクの生成が可能か否かを判断する。この処理は、図９のＳ１００７と同様である。クエリ実行部４２３は、Ｓ１１１１の判断の結果が肯定的であれば、再びＳ１１０５を行い、Ｓ１１１１の判断の結果が否定的であれば、Ｓ１１１２を行う。【００９８】
Ｓ１１１２で、クエリ実行部４２３は、タスク生成保留処理を行う。タスク生成保留処理の詳細は、図１１に示す通りである。【００９９】
図１１は、タスク生成保留処理（図９のＳ１００８、及び、図１０のＳ１１１２）の流れを示す。図１１では、一つのタスクを例に取った流れを示し、該タスクを「対象タスク」、対象タスクにより実行しているクエリブロックを「対象クエリブロック」と言う。【０１００】
Ｓ１２０１で、クエリ実行部４２３は、対象クエリブロックに対応するクエリ実行管理表４２４の情報を更新する。具体的には、クエリ実行部４２３は、対象クエリブロックに対応するタスク生成待ちタスク数９０６に１を加算する。【０１０１】
Ｓ１２０２で、クエリ実行部４２３は、新たなタスクの生成が可能になるか、一定時間が経過するまで対象タスクを待たせる。「新たなタスクの生成が可能か否か」を判断する処理は、図９のＳ１００７と同様である。Ｓ１２０２では、クエリ実行部４２３は、例えば、新たなタスクの生成が可能になるまでＳ１００７と同様の処理を所定の時間間隔で繰り返す。タスク生成保留処理において、例えば、下記の（ｙ）又は（ｚ）、
（ｙ）対象クエリブロックについて、優先度９０１が高くなったり、最優先フラグ９０２が付与されたりする等の原因により、対象クエリブロックの実行に対して割り当て可能なメモリ資源量が増えた、
（ｚ）未予約メモリ資源量９１１又は割り当て可能総メモリ資源量９１２が増えた、
等の事象が発生することにより、新たなタスクを生成可能になることが考えられる。なお、Ｓ１２０２で、クエリ実行部４２３は、クエリ実行管理表４２４を参照して、対象クエリブロックに対応する実行開始時刻９０４から所定の時間を経過した場合、対象クエリブロックに関するクエリの実行をエラー終了しても良い。クエリの実行をエラー終了する際には、該クエリの実行に関連するメモリ資源を解放且つ予約解消して、関連するタスクを終了する。【０１０２】
Ｓ１２０３で、クエリ実行部４２３は、対象クエリブロックに対応するクエリ実行管理表４２４の情報を更新する。具体的には、クエリ実行部４２３は、対象クエリブロックに対応するタスク生成待ちタスク数９０６から１を減算する。【０１０３】
図１２は、ＤＢオペレーション実行処理（図１０のＳ１１０３）の流れを示す。図１２の説明において、実行する対象のＤＢオペレーションを「対象ＤＢオペレーション」、対象ＤＢオペレーションを含むクエリブロックを「対象クエリブロック」、対象ＤＢオペレーションに対応するタスクを「対象タスク」と言う。【０１０４】
Ｓ２４０１で、クエリ実行部４２３は、対象タスクに割り当てたメモリ資源に、対象ＤＢオペレーションを実行するための情報（例えば、対象ＤＢオペレーションに要するデータのアクセス先、及び、結果を生成するために必要なフェッチ済みのデータ）を設定する。上記の対象ＤＢオペレーションを実行するための情報は、対象タスクの生成元であるタスクが有する情報に基づいて設定される。そして、クエリ実行部４２３は、対象ＤＢオペレーションを実行するために必要なＤＢ４５１のデータを取得する条件が揃っているか否かを判断する。ここで、データを取得する条件が揃っていることとは、例えば、対象ＤＢオペレーションに必要なデータのアクセス先が確定していることである。クエリ実行部４２３は、Ｓ２４０１の判断の結果が肯定的であれば、Ｓ２４０３を行い、Ｓ２４０１の判断の結果が否定的であれば、Ｓ２４０２を行う。【０１０５】
Ｓ２４０２で、クエリ実行部４２３は、ＤＢオペレーション実行保留処理を行う。ＤＢオペレーション実行保留処理の詳細は、図１３に示す通りである。図１３によれば、クエリ実行部４２３は、ＤＢオペレーション実行保留処理により、対象タスクの実行の開始を待たせる。例えば、対象ＤＢオペレーションの実行に必要なデータのアクセス先について、該アクセス先として参照される被参照クエリブロックの結果の生成を待たせる。【０１０６】
Ｓ２４０３で、クエリ実行部４２３は、ＤＢ４５１からデータを取得する。具体的には、クエリ実行部４２３は、ＤＢ４５１から対象ＤＢオペレーションに必要なデータを読み出す要求を発行する。そして、該要求に対する応答を受けることで、対象ＤＢオペレーションに必要なデータを取得する。なお、クエリ実行部４２３は、対象ＤＢオペレーションに必要なデータがＤＢバッファにある場合には、ＤＢバッファ上の該データを取得する。【０１０７】
Ｓ２４０４で、クエリ実行部４２３は、対象ＤＢオペレーションを実行する条件が揃っているか否かを判断する。例えば、対象ＤＢオペレーションが或るレコードからのカラムの抽出である場合を考える。このとき、対象ＤＢオペレーションを実行する条件が揃っていることとは、Ｓ２４０３で取得したデータに含まれるレコードにおいて、対象ＤＢオペレーションの実行対象であるレコードを選択する条件が確定していることである。クエリ実行部４２３は、Ｓ２４０４の判断の結果が肯定的であれば、Ｓ２４０６を行い、Ｓ２４０４の判断の結果が否定的であれば、Ｓ２４０５を行う。【０１０８】
Ｓ２４０５で、クエリ実行部４２３は、ＤＢオペレーション実行保留処理を行う。ＤＢオペレーション実行保留処理の詳細は、図１３に示す通りである。図１３によれば、クエリ実行部４２３は、ＤＢオペレーション実行保留処理により、対象タスクの実行の開始を待たせる。例えば、対象ＤＢオペレーションから参照される被参照クエリブロックの結果の生成を待たせる。【０１０９】
Ｓ２４０６で、クエリ実行部４２３は、対象ＤＢオペレーションを実行する。例えば、クエリ実行部４２３は、Ｓ２４０３で取得したデータに含まれるレコードから、Ｓ２４０４で述べた選択条件を満たすレコードを選択し、該レコードから指定されたカラムを抽出する。【０１１０】
Ｓ２４０７で、クエリ実行部４２３は、対象ＤＢオペレーションがＥＸＩＳＩＴＳ句に関する場合には、対象ＤＢオペレーションの実行結果に基づいて、関連するタスクの実行をキャンセルする。【０１１１】
ここで、上記したＥＸＩＳＴＳ句は、相関条件のないサブクエリに関するものであるとする。相関条件のない、ＥＸＩＳＴＳ句に関するサブクエリを含むクエリについて、クエリ実行部４２３は、該サブクエリに関するクエリブロックと、該サブクエリの外側部分のクエリブロックとを並行して実行することができる。ステップＳ２４０７において、該サブクエリに関するクエリブロックのＥＸＩＳＴＳ句の評価結果が真であれば、クエリ実行部４２３は、該サブクエリに関するクエリブロックに関連するタスク（実行中のタスク、或いは、タスク生成待ちのタスク）の実行をキャンセルする。具体的には、クエリ実行部４２３は、該タスクを終了し、該タスクに割り当てられたメモリ資源の解放と、該メモリ資源に対する予約の解消とを実行する。このとき、該サブクエリの外側部分のクエリブロックについて、クエリ実行部４２３は、実行を継続する。ここで、クエリ実行部４２３（クエリブロック優先度制御部４３２）は、該サブクエリに関するクエリブロックの優先度を、実行を継続する該サブクエリの外側部分のクエリブロックに割り振るようにしても良い。一方、該サブクエリに関するクエリブロックのＥＸＩＳＴＳ句の評価結果が偽であれば、クエリ実行部４２３は、該サブクエリに関するクエリブロックと、該サブクエリの外側部分のクエリブロックとに関連する全てのタスクの実行をキャンセルする。そして、クエリに該当するレコードが存在しない旨をクエリ発行元に返す。ここで、クエリ実行部４２３は、タスクの実行をキャンセルする際に、キャンセルするタスクがＯＳや外部ストレージ装置に対してＩ／Ｏ要求を発行している場合には、該Ｉ／Ｏ要求をキャンセルする指示をＯＳや外部ストレージ装置に出しても良い。
なお、上記したＥＸＩＳＴＳ句が相関条件のあるサブクエリに関するものである場合も、クエリ実行部４２３は、上記と同様の処理を行っても良い。具体的には、ＥＸＩＳＴＳ句を有するサブクエリを含むクエリであって、該サブクエリ内に、該サブクエリの外側のＦＲＯＭ句に指定された表のカラムを含むクエリを実行する場合である。このとき、クエリ実行部４２３は、ＥＸＩＳＴＳ句の評価結果が真であれば、該評価結果を生成した該サブクエリに関するクエリブロックに関連するタスクの実行をキャンセルして良い。そして、当該クエリブロックの実行に起因した、該サブクエリの外側部分のクエリブロックに関するタスクの実行を継続しても良い。一方、ＥＸＩＳＴＳ句の評価結果が偽であれば、クエリ実行部４２３は、該評価結果を生成した該サブクエリに関するクエリブロックに関連するタスクの実行をキャンセルして良い。そして、当該クエリブロックの実行に起因した、該サブクエリの外側部分のクエリブロックに関するタスクの実行を終了しても良い。【０１１２】
Ｓ２４０８で、クエリ実行部４２３は、対象ＤＢオペレーションの実行結果に基づいて、Ｓ２４０２又はＳ２４０５で実行を保留中のタスクのうち、対応するＤＢオペレーションの実行を再開できるタスクがあれば、当該タスクの実行を再開する。例えば、対象ＤＢオペレーションの実行によって対象クエリブロックの結果を生成した場合、クエリ実行部４２３は、対象クエリブロックの結果を参照するために実行の開始を待っているタスクがあれば、該タスクの実行を再開する。【０１１３】
Ｓ２４０９で、クエリ実行部４２３は、対象クエリブロックに対応するクエリ実行管理表４２４の情報を更新する。具体的には、クエリ実行部４２３は、対象クエリブロックに対応する実行達成率９０８を更新する。【０１１４】
図１３は、ＤＢオペレーション実行保留処理（図１２のＳ２４０２、及び、Ｓ２４０５）の流れを示す。図１３の説明において、実行を保留する対象のＤＢオペレーションを「対象ＤＢオペレーション」、対象ＤＢオペレーションを含むクエリブロックを「対象クエリブロック」、対象ＤＢオペレーションに対応するタスクを「対象タスク」と言う。【０１１５】
Ｓ２５０１で、クエリ実行部４２３は、対象クエリブロックの実行待ちタスクに割り当てられたメモリ資源量が所定量より大きく（または対象クエリブロックの実行待ちタスク数が所定値より大きく）、且つ、対象クエリブロックの実行達成率が所定値以下であるか否かを判断する。クエリ実行部４２３は、Ｓ２５０１の判断の結果が肯定的であれば、Ｓ２５０５を行う。Ｓ２５０１の判断の結果が肯定的な状況とは、対象クエリブロックの実行において、参照関係のある他のクエリブロックの実行完了を多くのタスクが待つため、メモリ資源を無駄に消費している可能性が高く、且つ、対象クエリブロックの実行進捗度が全体に対して少ない状況である。一方、クエリ実行部４２３は、Ｓ２５０１の判断の結果が否定的であれば、Ｓ２５０２を行う。【０１１６】
Ｓ２５０２で、クエリ実行部４２３は、対象クエリブロックに対応するクエリ実行管理表４２４の情報を更新する。具体的には、クエリ実行部４２３は、対象クエリブロックに対応する実行待ちタスク数９０７に１を加算する。【０１１７】
Ｓ２５０３で、クエリ実行部４２３は、対象ＤＢオペレーションの実行が開始可能になるまで対象タスクを待たせる。なお、実行を保留中のタスクについて、クエリ実行部４２３は、図１２のＳ２４０８において、ＤＢオペレーションの結果に基づき、実行を開始可能なタスクがあれば、該タスクの実行を再開する。【０１１８】
Ｓ２５０４で、クエリ実行部４２３は、対象クエリブロックに対応するクエリ実行管理表４２４の情報を更新する。具体的には、クエリ実行部４２３は、対象クエリブロックに対応する実行待ちタスク数９０７から１を減算する。【０１１９】
Ｓ２５０５で、クエリ実行部４２３は、対象クエリブロックに関する全てのタスク（実行中のタスク、タスク生成待ちのタスク、及び、実行を保留中のタスク）の実行及び実行結果をキャンセルする。具体的には、クエリ実行部４２３は、該タスクを終了し、該タスクの実行及び実行結果のために割り当てられたメモリ資源の解放と、該メモリ資源に対する予約の解消とを実行する。なお、クエリ実行部４２３は、タスクの実行をキャンセルする際に、キャンセルするタスクがＯＳや外部ストレージ装置に対してＩ／Ｏ要求を発行している場合には、該Ｉ／Ｏ要求をキャンセルする指示をＯＳや外部ストレージ装置に出しても良い。【０１２０】
Ｓ２５０６で、クエリ実行部４２３は、対象クエリブロックに対応する優先度を、対象クエリブロックと参照関係にある被参照クエリブロックの優先度に割り振るように、クエリ実行管理表４２４の該当する優先度９０１を変更する。このようにクエリブロックの優先度が変更されるので、被参照クエリブロックの実行に対する割り当て可能なメモリ資源が増えることなる。これにより、クエリ実行部４２３は、対象クエリブロックの実行に割り当てていたメモリ資源を、被参照クエリブロックの実行に利用することができるようになる。【０１２１】
Ｓ２５０７で、クエリ実行部４２３は、対象クエリブロックを先頭のＤＢオペレーションから再実行する。具体的には、クエリ実行部４２３は、例えば、対象クエリブロックの先頭のＤＢオペレーションに対応するタスクを生成する。そして、図１０のタスク実行処理に従って、該タスクに必要なメモリ資源を割り当てて実行する。これにより、一度キャンセルされた対象クエリブロックは、適切な優先度の元で再実行されることとなる。【０１２２】
図１４は、同時生成タスク数決定処理（図９のＳ１００３、及び、図１０のＳ１１０５）の流れを示す。【０１２３】
Ｓ１３０１で、同時生成タスク数決定部４３１は、新たに生成するタスク当たりに割り当てを要するメモリ資源量である第１のメモリ資源量を、クエリ実行プランに含まれる情報である、新たに生成するタスクに対応するＤＢオペレーションに要するメモリ資源量に基づき算出する。なお、ＤＢオペレーションに必要な一部のメモリ資源を、新たに生成するタスクを含む複数のタスクの間で共有する場合には、同時生成タスク数決定部４３１は、該共有するメモリ資源の量をタスク間で重複して計上しないように、第１のメモリ資源量を算出して良い。【０１２４】
Ｓ１３０２で、同時生成タスク数決定部４３１は、Ｓ１３０１で算出した第１のメモリ資源量と、本同時生成タスク数決定処理の直前のステップ（図９のＳ１００２、又は、図１０のＳ１１０４）で算出した生成可能タスク数とを基に、新たに生成するタスクに割り当てるために予約するメモリ資源の量である予約メモリ資源量を決定する。予約メモリ資源量は、例えば、第１のメモリ資源量と生成可能タスク数との積で良い。【０１２５】
Ｓ１３０３で、同時生成タスク数決定部４３１は、Ｓ１３０２で決定された予約メモリ資源量分のメモリ資源の予約をメモリ資源管理部４２５に要求する。メモリ資源管理部４２５は、その要求を受けて、図１７に示すメモリ資源予約処理を行い、予約に成功したメモリ資源の量を同時生成タスク数決定部４３１に通知する。予約に成功するメモリ資源の量は、例えば、第１のメモリ資源量の整数倍で良い。【０１２６】
Ｓ１３０４で、同時生成タスク数決定部４３１は、Ｓ１３０３で予約に成功したメモリ資源の量と、Ｓ１３０１で算出した第１のメモリ資源量とを基に、同時生成タスク数を決定する。同時生成タスク数は、例えば、（Ｓ１３０３で予約に成功したメモリ資源の量）を（第１のメモリ資源量）で除した値で良い。同時生成タスク数決定部４３１は、余りのメモリ資源が生じた場合、メモリ資源管理部４２５に余りのメモリ資源量分の予約を解消するよう要求しても良い。【０１２７】
図１５は、メモリ資源割り当て処理（図１０のＳ１１０１）の流れを示す。図１５は、一つのタスク（図１５の説明において「対象タスク」と言う）を例に取った流れを示す。なお、図１５の説明において、対象タスクにより実行するクエリブロックを「対象クエリブロック」と言う。【０１２８】
Ｓ１４０１で、メモリ資源管理部４２５は、クエリ実行管理表４２４を参照し、対象クエリブロックに関する情報を得る。【０１２９】
Ｓ１４０２で、メモリ資源管理部４２５は、Ｐ＋ＱがＲ以下であるか否かを判断する。Ｐ、Ｑ及びＲは、下記の通りである。また、下記において、新規割り当てメモリ資源量Ｑは、クエリ実行プランに基づく第１のメモリ資源量（図１４のＳ１３０１での算出値）から予測することができる。しかし、該予測は必ずしも完全というわけではなく、実際に対象タスクを実行する際のＱは、予測したメモリ資源量、すなわち図１４のＳ１３０３で予約したメモリ資源の量とは異なる可能性もある。
Ｐ＝対象クエリブロックに対応する既割り当てメモリ資源量９０９。
Ｑ＝対象タスクを実行するために必要とする新規割り当てメモリ資源量。
Ｒ＝対象クエリブロックに対応する既予約メモリ資源量９１０。【０１３０】
Ｓ１４０２の判断の結果が否定的であれば（Ｓ１４０２：Ｆ）、メモリ資源管理部４２５は、対象クエリブロックに対応する下記（１）〜（３）のイベント、
（１）既割り当てメモリ資源量９０９が減少する、
（２）既予約メモリ資源量９１０が増加する、及び
（３）一定時間が経過する、
のうちのいずれかのイベントを検出するまで待つ。そのいずれかのイベントを検出した場合に、メモリ資源管理部４２５は、再度、Ｓ１４０２を行って良い。Ｓ１４０２の判断の結果が肯定的であれば（Ｓ１４０２：Ｔ）、メモリ資源管理部４２５は、Ｓ１４０３を行う。【０１３１】
Ｓ１４０３で、メモリ資源管理部４２５は、クエリ実行管理表４２４を更新する。例えば、Ｓ１４０２での新規割り当てメモリ資源量を、対象クエリブロックに対応する既割り当てメモリ資源量９０９に加算する。【０１３２】
Ｓ１４０４で、メモリ資源管理部４２５は、予約しているメモリ資源の中から新規割り当てメモリ資源量分のメモリ資源を、対象タスクに割り当てる。【０１３３】
図１６は、メモリ資源解放処理（図１０のＳ１１１０）の流れを示す。図１６は、一つのタスク（図１６の説明において「対象タスク」と言う）を例に取った流れを示す。なお、図１６の説明において、対象タスクにより実行したクエリブロックを「対象クエリブロック」と言う。【０１３４】
Ｓ１５０１で、メモリ資源管理部４２５は、対象タスクに対して割り当てられているメモリ資源を解放する。なお、メモリ資源管理部４２５は、対象タスクに割り当てられたメモリ資源のうち、対象タスクと異なるタスクにより共有されるメモリ資源については解放しない。【０１３５】
Ｓ１５０２で、メモリ資源管理部４２５は、Ｓ１５０１で解放したメモリ資源量分のメモリ資源の予約を解消する。【０１３６】
Ｓ１５０３で、メモリ資源管理部４２５は、対象クエリブロックに対応するクエリ実行管理表４２４の情報を更新する。例えば、メモリ資源管理部４２５は、Ｓ１５０１で解放されたメモリ資源の量を、対象クエリブロックに対応する既割り当てメモリ資源量９０９及び既予約メモリ資源量９１０から減算し、且つ、当該メモリ資源の量を未予約メモリ資源量９１１に加算する。【０１３７】
図１７は、メモリ資源予約処理（図１４のＳ１３０３）の流れを示す。図１７は、一つのタスク（図１７の説明において「対象タスク」と言う）を例に取った流れを示す。なお、図１７の説明において、対象タスクに関するクエリブロックを「対象クエリブロック」と言う。【０１３８】
Ｓ１６０１で、メモリ資源管理部４２５は、クエリ実行管理表４２４を参照し、対象クエリブロックに関する情報を得る。【０１３９】
Ｓ１６０２で、メモリ資源管理部４２５は、対象クエリブロックに対応する最優先フラグ９０２がオンか否かを判断する。【０１４０】
Ｓ１６０２の判断の結果が肯定的であれば（Ｓ１６０２：Ｔ）、Ｓ１６０３で、メモリ資源管理部４２５は、下記（ａ）及び（ｂ）、
（ａ）要求された予約メモリ資源量、
（ｂ）未予約メモリ資源量９１１、
のうち小さい方のメモリ資源量を算出する。【０１４１】
Ｓ１６０２の判断の結果が否定的であれば（Ｓ１６０２：Ｆ）、Ｓ１６０４で、メモリ資源管理部４２５は、下記（ａ）〜（ｃ）、
（ａ）要求された予約メモリ資源量、
（ｂ）未予約メモリ資源量９１１、
（ｃ）対象クエリブロックの実行に対して割り当て可能なメモリ資源量の上限から、対象クエリブロックに対応する既予約メモリ資源量９１０を減算することにより得られるメモリ資源量、
のうちの最小のメモリ資源量を算出する。【０１４２】
なお、（ｃ）の「対象クエリブロックの実行に対して割り当て可能なメモリ資源量の上限」とは、割り当て可能総メモリ資源量９１２を、実行中のクエリブロック毎の優先度９０１に基づき、クエリブロック毎に配分（例えば比例配分）した値のうちの、対象クエリブロックに対応した値である。例えば、図８に示したように、割り当て可能総メモリ資源量９１２が「１００ＭＢ（メガバイト）」であり、クエリブロック１〜３の優先度が「３」、「２」及び「５」である場合を考える。また、割り当て可能総メモリ資源量９１２をクエリブロック毎の優先度９０１に基づき比例配分すると仮定する。このとき、各クエリブロックの実行に対して割り当て可能なメモリ資源量の上限は、クエリブロック１については「３０ＭＢ」、クエリブロック２については「２０ＭＢ」、クエリブロック３については「５０ＭＢ」である。【０１４３】
また、例えば、同時に実行しているクエリブロックの数が増えた場合や、最優先フラグ９０２がオンであるクエリブロックを実行中の場合、（ｃ）のメモリ資源量は、負の値になることがある。その場合、メモリ資源管理部４２５は、Ｓ１６０４で算出するメモリ資源量を、ゼロとする。【０１４４】
Ｓ１６０５で、メモリ資源管理部４２５は、クエリ実行管理表４２４を更新する。例えば、メモリ資源管理部４２５は、対象クエリブロックに対応する既予約メモリ資源量９１０に、Ｓ１６０３又はＳ１６０４で算出したメモリ資源量を加算する。更に、メモリ資源管理部４２５は、未予約メモリ資源量９１１から、Ｓ１６０３又はＳ１６０４で算出したメモリ資源量を減算する。【０１４５】
Ｓ１６０６で、メモリ資源管理部４２５は、クエリ実行に割り当て可能なメモリ資源のうち、予約されていないメモリ資源の中から、Ｓ１６０３又はＳ１６０４で算出した量のメモリ資源を予約する。【０１４６】
本実施例で述べたクエリの実行に割り当て可能なメモリ資源の総量は、様々な要因により増減することがある。例えば、ＤＢＭＳ４１２の内部において、実行タスク管理部４２６で管理するメモリ資源量（クエリを実行するためのタスク用途）を増減すること、又は、ＤＢバッファ管理部４２７で管理するメモリ資源量（ＤＢバッファ用途）を増減すること、等が起因する。また、例えば、ＤＢＭＳ４１２の外部において、同じメモリ４１６上で実行される他のコンピュータプログラムのメモリ資源の利用状況、メモリ４１６の増設又は減設、又は、ＤＢサーバ４０１が仮想マシンである場合に該仮想マシンの総メモリ資源量の変化、等に起因する。特に、近年普及しつつあるクラウド環境における計算機資源の仮想化により、クエリの実行に割り当て可能なメモリ資源の総量は、状況に応じて変化することがある。【０１４７】
図１８は、メモリ資源増加処理の流れを示す。【０１４８】
メモリ資源増加処理は、クエリの実行に割り当て可能なメモリ資源の総量である割り当て可能総メモリ資源量９１２を増加するための処理である。この処理は、上記したメモリ資源量の増加要因が発生した際に開始されて良い。【０１４９】
Ｓ１７０１で、メモリ資源管理部４２５は、クエリ実行管理表４２４を参照する。【０１５０】
Ｓ１７０２で、メモリ資源管理部４２５は、クエリ実行に用いるために、割り当て可能総メモリ資源量９１２に増加する量のメモリ資源を初期化し、予約されていないメモリ資源として管理する。【０１５１】
Ｓ１７０３で、メモリ資源管理部４２５は、クエリ実行管理表４２４を更新する。例えば、メモリ資源管理部４２５は、Ｓ１７０２で管理されたメモリ資源の量を、未予約メモリ資源量９１１及び割り当て可能総メモリ資源量９１２に加算する。【０１５２】
図１９は、メモリ資源減少処理の流れを示す。【０１５３】
メモリ資源減少処理は、割り当て可能総メモリ資源量９１２を減少するための処理である。この処理は、上記したメモリ資源量の減少要因が発生した際に開始されて良い。【０１５４】
Ｓ１８０１で、メモリ資源管理部４２５は、クエリ実行管理表４２４を参照する。【０１５５】
Ｓ１８０２で、メモリ資源管理部４２５は、未予約メモリ資源量９１１と、割り当て可能総メモリ資源量９１２から減少する量とのうち、小さい方の量を判別する。メモリ資源管理部４２５は、該判別した量のメモリ資源を、クエリ実行に割り当て可能なメモリ資源のうち、予約されていないメモリ資源の中から解放する。【０１５６】
Ｓ１８０３で、メモリ資源管理部４２５は、クエリ実行管理表４２４を更新する。例えば、メモリ資源管理部４２５は、Ｓ１８０２で解放されたメモリ資源の量を、未予約メモリ資源量９１１及び割り当て可能総メモリ資源量９１２から減少する。【０１５７】
Ｓ１８０４で、メモリ資源管理部４２５は、割り当て可能総メモリ資源量９１２から減少する量のメモリ資源が解放されたか否かを判断する。該判断の結果が肯定的であれば、メモリ資源管理部４２５は、処理を終了する。一方、該判断の結果が否定的であれば、メモリ資源管理部４２５は、再びＳ１８０２を行う。該判断の結果が否定的となるケースは、Ｓ１８０２で、メモリ資源管理部４２５が未予約メモリ資源量９１１分のメモリ資源を解放したケースである。すなわち、Ｓ１８０２で解放されたメモリ資源の量は、割り当て可能総メモリ資源量９１２から減少する量よりも少ないケースである。該ケースにおいて、メモリ資源管理部４２５は、再度Ｓ１８０２を行い、割り当て可能総メモリ資源量９１２から減少する量と、前回のＳ１８０２で解放されたメモリ資源の量との差分の量のメモリ資源を解放する。【０１５８】
図２０は、サーバメモリ資源増加処理の流れを示す。【０１５９】
サーバメモリ資源増加処理は、例えば、ＤＢサーバ４０１のメモリ４１６が増設された場合に、又は、ＤＢサーバ４０１が仮想マシンであり該仮想マシンの総メモリ資源量が増加された場合に、ＯＳ４１５に認識される総メモリ資源量を増加する処理である。【０１６０】
Ｓ１９０１で、ＯＳ４１５は、総メモリ資源量を増加する。例えば、ＤＢサーバ４０１の管理者により、ＤＢサーバ４０１のメモリ４１６を増設されたとする。又は、ＤＢサーバ４０１が仮想マシンである場合には、該仮想マシンの総メモリ資源量が増加されたとする。このとき、ＯＳ４１５は、上記増設又は増加された量分の総メモリ資源量の増加を認識する。【０１６１】
Ｓ１９０２で、ＤＢＭＳ４１２内のメモリ資源管理部４２５は、Ｓ１９０１で増加されたメモリ資源の量について、図１８に示したメモリ資源増加処理を行う。なお、ＤＢＭＳ４１２は、ＤＢＭＳ４１２内で使用するメモリ資源である、実行タスク管理部４２６で管理するメモリ資源又はＤＢバッファ管理部４２７で管理するメモリ資源等の量を増加しても良い。【０１６２】
図２１は、サーバメモリ資源減少処理の流れを示す。【０１６３】
サーバメモリ資源減少処理は、例えば、ＤＢサーバ４０１のメモリ４１６が減設された場合に、又は、ＤＢサーバ４０１が仮想マシンであり該仮想マシンの総メモリ資源量が減少された場合に、ＯＳ４１５に認識される総メモリ資源量を減少する処理である。【０１６４】
Ｓ２００１で、ＤＢＭＳ４１２内のメモリ資源管理部４２５は、減少するメモリ資源量について、図１９に示したメモリ資源減少処理を行う。なお、ＤＢＭＳ４１２は、ＤＢＭＳ４１２内で使用するメモリ資源である、実行タスク管理部４２６で管理するメモリ資源又はＤＢバッファ管理部４２７で管理するメモリ資源等の量を減少しても良い。【０１６５】
Ｓ２００２で、ＯＳ４１５は、総メモリ資源量を減少する。例えば、ＤＢサーバ４０１の管理者により、Ｓ２００１で減少されたメモリ資源の量に相当するメモリ４１６を減設されたとする。又は、ＤＢサーバ４０１が仮想マシンである場合には、Ｓ２００１で減少されたメモリ資源の量だけ該仮想マシンの総メモリ資源量が減少されたとする。このとき、ＯＳ４１５は、上記減設又は減少された量分の総メモリ資源量の減少を認識する。【０１６６】
図２２は、優先度手動変更処理の流れを示す。以下、一つのクエリブロック（図２２の説明において「対象クエリブロック」と言う）を例に取る。【０１６７】
Ｓ２１０１で、クエリ受付部４２１は、対象クエリブロックに関する優先度変更指示を受け付け、クエリ実行部４２３に、対象クエリブロックの優先度変更指示を出す。優先度変更指示の送信元は、対象クエリブロックに関するクエリの発行元と同じであっても異なっていても良い。クエリ実行部４２３（クエリブロック優先度制御部４３２）は、該指示を受けて、クエリ実行管理表４２４の対象クエリブロックに対応する優先度９０１又は最優先フラグ９０２を、該指示の内容に従い変更する。【０１６８】
図２３は、優先度自動変更処理の流れを示す。本処理は、受け付けたクエリの実行を開始するとき、或いは、実行しているクエリブロックの実行進捗状況（例えば、該クエリブロックを実行しているタスクの状況）が変わったとき等、クエリ実行管理表４２４が更新されることを契機に開始されて良い。本処理は、クエリ実行管理表４２４において上記更新される対象であるクエリブロックについて、優先度を決定する処理である。以下、優先度を決定する対象であるクエリブロック（図２３の説明において「対象クエリブロック」と言う）を例に取る。また、図２３の説明において、対象クエリブロックを含むクエリ実行プランに対応するクエリを「対象クエリ」と言う。【０１６９】
Ｓ２２０１で、クエリブロック優先度制御部４３２は、クエリ実行管理表４２４を参照し、対象クエリブロックの情報を得る。【０１７０】
Ｓ２２０２で、クエリブロック優先度制御部４３２は、対象クエリブロックが実行中であるか否かを判断する。例えば、クエリブロック優先度制御部４３２は、対象クエリブロックに対応する実行タスク数９０５、又は、実行達成率９０８がゼロより大きいか否かを判断する。クエリブロック優先度制御部４３２は、Ｓ２２０２の判断の結果が肯定的であれば、Ｓ２２０６を行う。一方、Ｓ２２０２の判断の結果が否定的であれば、クエリブロック優先度制御部４３２は、対象クエリの実行開始時であることを意味しているので、Ｓ２２０３を行う。【０１７１】
Ｓ２２０３で、クエリブロック優先度制御部４３２は、下記（ａ）乃至（ｅ）、
（ａ）外部指定、
（ｂ）対象クエリ発行元のＡＰ属性、
（ｃ）対象クエリ発行元のユーザ属性、
（ｄ）対象クエリのクエリ実行プランの内容、
（ｅ）対象クエリの内容、及び、実行中の他のクエリブロックの内容と実行進捗状況、
のいずれかに基づき、対象クエリの優先度を決定する。
例えば、（ａ）において、クエリブロック優先度制御部４３２は、対象クエリ自体に指定された優先度に基づいて、対象クエリの優先度を決定しても良い。また、例えば、（ｅ）において、クエリブロック優先度制御部４３２は、対象クエリにおいてアクセスするＤＢ４５１のデータが、実行中の他のクエリブロックにおいてアクセスするＤＢ４５１のデータと大凡同じく、且つ、当該実行中の他のクエリブロックの実行達成率９０８が所定値未満である場合、対象クエリの優先度を、実行中の他のクエリブロックの優先度９０１より高い数値としても良い。【０１７２】
Ｓ２２０４で、クエリブロック優先度制御部４３２は、対象クエリのクエリ実行プランにおいて、対象クエリブロックが複数含まれるか否かを判断する。クエリブロック優先度制御部４３２は、Ｓ２２０４の判断の結果が肯定的であれば、Ｓ２２０５を行う。一方、Ｓ２２０４の判断の結果が否定的であれば、クエリブロック優先度制御部４３２は、対象クエリに関する対象クエリブロックは一つであるので、Ｓ２２０３で決定した優先度を対象クエリブロックの優先度として決定し、Ｓ２２０７を行う。【０１７３】
Ｓ２２０５で、クエリブロック優先度制御部４３２は、下記（ｐ）乃至（ｒ）、
（ｐ）対象クエリブロック間の参照関係、
（ｑ）対象クエリブロック毎の実行に要するメモリ資源量の、対象クエリ（全ての対象クエリブロック）の実行に対して割り当て可能なメモリ資源量の上限に占める割合、
（ｒ）対象クエリブロックの内容、及び、実行中の他のクエリブロックの内容と実行進捗状況、
のいずれかに基づき、Ｓ２２０３で決定した対象クエリの優先度に対する、対象クエリブロック間の比率を決定する。クエリブロック優先度制御部４３２は、決定した対象クエリブロック間の比率に基づいて、対象クエリブロック毎の優先度を決定する。
例えば、（ｐ）において、クエリブロック優先度制御部４３２は、複数の対象クエリブロックのうち、参照クエリブロックにおける、被参照クエリブロックの結果を参照するまでのコスト計算に基づく予測ＤＢオペレーションの数（もしくは予測Ｉ／Ｏ数）と、該参照クエリブロックの予測ＤＢオペレーションの総数（もしくは予測総Ｉ／Ｏ数）との関係を基に、対象クエリブロック間の比率を決定しても良い。また、例えば、同じく（ｐ）において、クエリブロック優先度制御部４３２は、複数の対象クエリブロック毎のＤＢ統計情報に基づく予測タスク実行多重度を基に、対象クエリブロック間の比率を決定しても良い。【０１７４】
ここで、対象クエリのクエリ実行プランに含まれる対象クエリブロックとして、相関条件のないサブクエリに関するクエリブロック（被参照クエリブロック）と、該サブクエリの外側部分に関する、被参照クエリブロックの結果を参照するＤＢオペレーションを含むクエリブロック（参照クエリブロック）との二つが含まれるケースを考える。本ケースにおいて、対象クエリブロック間の比率を決定する具体的な例を以下に説明する。【０１７５】
＜（ｐ）に基づいて比率を決定する具体例１＞
クエリブロック優先度制御部４３２は、参照クエリブロックにおいて、コスト計算に基づく予測ＤＢオペレーションの総数に対して、少ない予測ＤＢオペレーションの後に被参照クエリブロックの結果を参照する場合、被参照クエリブロックの比率を、参照クエリブロックの比率よりも上げることがある。すなわち、被参照クエリブロックの優先度を、参照クエリブロックの優先度よりも上げることがある。例えば、図６のｔ０において、各クエリブロックの実行に対する割り当て可能なメモリ資源量の上限それぞれは、本例に従い決定したクエリブロック毎の優先度に基づく。【０１７６】
＜（ｐ）に基づいて比率を決定する具体例２＞
クエリブロック優先度制御部４３２は、参照クエリブロック及び被参照クエリブロックのうちの一方のクエリブロックについて、前述のＤＢ統計情報に基づく予測タスク実行多重度が小さい場合、該一方のクエリブロックの比率を、他方のクエリブロックの比率の所定割合以上とすることがある。すなわち、該一方のクエリブロックの優先度を、該他方のクエリブロックの優先度の所定割合以上とすることがある。本例に該当する対象クエリブロックとして、例えば、複数の表のネストループ結合処理に関するものであり、ネストループ結合処理の最も外側の表から抽出するレコード数が少数であり、且つ、該複数の表の関連性が１対１であるクエリブロックが挙げられる。【０１７７】
＜（ｑ）に基づいて比率を決定する具体例＞
クエリブロック優先度制御部４３２は、被参照クエリブロック又は参照クエリブロックの実行に要するメモリ資源量が、対象クエリの実行に割り当て可能なメモリ資源量の上限に対して所定の割合以上である場合、被参照クエリブロックの比率を、参照クエリブロックの比率よりも上げることがある。すなわち、被参照クエリブロックの優先度を、参照クエリブロックの優先度よりも上げることがある。クエリブロック毎の実行に要するメモリ資源量は、例えば、クエリ実行プランに含まれる情報、又は、所定の量である。より具体的には、参照クエリブロックの比率をゼロとし、Ｓ２２０３で決定した対象クエリの優先度を、被参照クエリブロックの優先度として決定することがある。ここで、「対象クエリの実行に対して割り当て可能なメモリ資源量の上限」とは、割り当て可能総メモリ資源量９１２を、実行中のクエリブロック毎の優先度９０１とＳ２２０３で決定した対象クエリの優先度とに基づき、該実行中のクエリブロックと対象クエリのそれぞれに配分（例えば比例配分）した値のうちの、対象クエリに対応した値である。本例に該当するクエリとして、例えば、クエリ実行プランが二つの表のハッシュ結合処理に関するものであるクエリが挙げられる。このとき、該クエリ実行プランにおける被参照クエリブロックは、ハッシュ結合処理におけるハッシュ表のビルド処理に関するＤＢオペレーションを含んでおり、且つ、該ハッシュ表に要するメモリ資源量が多いケースである。【０１７８】
＜（ｒ）に基づいて比率を決定する具体例＞
クエリブロック優先度制御部４３２は、被参照クエリブロックと参照クエリブロックとの内容が、ＤＢ４５１のほぼ同じデータにアクセスすることを表す内容である場合、被参照クエリブロックと参照クエリブロックの比率を同率とすることがある。すなわち、被参照クエリブロックと参照クエリブロックの優先度を同じとすることがある。なお、被参照クエリブロックの内容と、実行中の他のクエリブロックの内容とが、ＤＢ４５１のほぼ同じデータにアクセスすることを表す内容であり、且つ、該実行中の他のクエリブロックの実行達成率９０８が所定値未満である場合、被参照クエリブロックの比率を、参照クエリブロックの比率よりも上げるようにしても良い。すなわち、被参照クエリブロックの優先度を、参照クエリブロックの優先度よりも上げるようにしても良い。より具体的には、参照クエリブロックの比率をゼロとし、Ｓ２２０３で決定した対象クエリの優先度を、被参照クエリブロックの優先度として決定しても良い。【０１７９】
Ｓ２２０６で、クエリブロック優先度制御部４３２は、下記（ｖ）乃至（ｘ）、
（ｖ）対象クエリブロックの実行タスク数９０５に対する、実行待ちタスク数９０７もしくはタスク生成待ちタスク数９０６の比率、
（ｗ）対象クエリブロックの実行タスク数９０５、タスク生成待ちタスク数９０６、もしくは、コスト計算に基づく実行達成率９０８、
（ｘ）対象クエリブロックの目標実行時間９０３と実行経過時間（現在時刻から実行開始時刻９０４を減じた時間）との関係、
のいずれかに基づき、対象クエリブロックの優先度を決定する。【０１８０】
ここで、Ｓ２２０５における説明と同じく、対象クエリのクエリ実行プランに含まれる対象クエリブロックとして、相関条件のないサブクエリに関する被参照クエリブロックと、該サブクエリの外側部分に関する、被参照クエリブロックの結果を参照するＤＢオペレーションを含む参照クエリブロックとの二つが含まれるケースを考える。本ケースにおいて、Ｓ２２０６で、対象クエリブロックの優先度を決定する具体的な例を以下に説明する。
＜（ｖ）に基づいて優先度を決定する具体例＞
クエリブロック優先度制御部４３２は、参照クエリブロックの実行待ちタスク数９０７（もしくはタスク生成待ちタスク数９０６）が実行タスク数９０５に対して所定比率を超えた場合、対象クエリ全体としての優先度を変えないように、参照クエリブロックの優先度を以前の値より下げ、被参照クエリブロックの優先度を以前の値より上げることがある。なお、参照クエリブロックの実行待ちタスク（もしくはタスク生成待ちタスク）に割り当てられたメモリ資源量が所定量を超えた場合に、クエリブロック優先度制御部４３２は、対象クエリブロックの優先度を上記と同様に変更しても良い。【０１８１】
＜（ｗ）に基づいて優先度を決定する具体例＞
クエリブロック優先度制御部４３２は、被参照クエリブロックのコスト計算に基づく実行達成率９０８が所定率以上であり、被参照クエリブロックの実行タスク数（又は、タスク生成待ちタスク数）が所定数以下である場合、対象クエリ全体としての優先度を変えないように、被参照クエリブロックの優先度を以前の値より下げ、参照クエリブロックの優先度を以前の値より上げることがある。この場合、被参照クエリブロックの実行が終了間際であることを示している。上記のように対象クエリブロック毎の優先度を変更することで、クエリ実行部４２３は、必要なメモリ資源が減少しつつある被参照クエリブロックについてそのクエリブロックの実行に対して割り当て可能であったメモリ資源を、参照クエリブロックの実行に対して割り当てられるようにすることができる。例えば、図６のｔ２及びｔ３において、各クエリブロックの実行に対する割り当て可能なメモリ資源量の上限それぞれの変動は、本例に従い決定したクエリブロック毎の優先度の変更に基づく。なお、クエリブロック優先度制御部４３２は、被参照クエリブロックの実行を終え、更に参照クエリブロックの実行の終了間際となった場合には、対象クエリブロック全体（対象クエリ）としての優先度を以前の値より下げても良い。これにより、実行中の他のクエリブロックに対して割り当てられるメモリ資源量が増えることとなる。
＜（ｘ）に基づいて優先度を決定する具体例＞
クエリブロック優先度制御部４３２は、下記（１）〜（３）のうちの少なくとも一つの方法を基に対象クエリブロックの優先度を決定することがある。
（１）上記実行経過時間が目標実行時間９０３に所定割合接近した場合に、対象クエリブロックの優先度を以前の値より上げる。
（２）上記実行経過時間が目標実行時間９０３を所定割合経過した場合に、対象クエリブロックの優先度を以前の値より上げる。
（３）実行達成率９０８が所定割合以上であり、且つ、上記実行経過時間が目標実行時間９０３の所定割合未満である場合に、対象クエリブロックの優先度を以前の値より下げる。【０１８２】
Ｓ２２０７で、クエリブロック優先度制御部４３２は、クエリ実行管理表４２４内の対象クエリブロックに対応する優先度９０１を、Ｓ２２０５又はＳ２２０６で決定した優先度に変更する。【０１８３】
上記、優先度自動変更処理によると、クエリブロック優先度制御部４３２は、クエリの実行開始時に各クエリブロックの実行に適した優先度を決定することができるとともに、クエリの実行中において、動的に各クエリブロックの実行に適した優先度を決定することができる。【０１８４】
図２４は、タスク追加生成処理の流れを示す。【０１８５】
タスク追加生成処理は、例えば、下記の（１）又は（２）の事象が発生した契機に開始される処理である。
（１）クエリ実行管理表４２４の割り当て可能総メモリ資源量９１２又は未予約メモリ資源量９１１が増加した。
（２）クエリ実行管理表４２４のあるクエリブロックの優先度９０１が変化した、又は、最優先フラグ９０２がオンになった。
なお、本タスク追加生成処理は、クエリ実行管理表４２４の未予約メモリ資源量９１１が所定値以上の場合、クエリ実行管理表４２４の全てのクエリブロックについて、タスクの生成を保留するタスクが存在しなくなるまで繰り返されても良い。【０１８６】
Ｓ２３０１で、クエリ実行部４２３は、クエリ実行管理表４２４を参照し、タスクの生成を保留しているタスク（図９のＳ１００８又は図１０のＳ１１１２）が存在するクエリブロックのうち、優先度９０１が最も高いクエリブロックを選択する。具体的には、タスク生成待ちタスク数９０６がゼロ以上であるクエリブロックについて、優先度９０１が最も高いクエリブロックを選択する。【０１８７】
Ｓ２３０２で、クエリ実行部４２３は、Ｓ２３０１で選択したクエリブロックについて、該クエリブロックの実行に対して割り当て可能なメモリ資源量の上限に対する、既割り当てメモリ資源量９０９の割合が、所定割合以上か否かを判断する。ここで、「クエリブロックの実行に対して割り当て可能なメモリ資源量の上限」とは、図１７のＳ１６０４における説明の通りである。クエリ実行部４２３は、上記判断の結果が肯定的であれば、Ｓ２３０３を行い、上記判断の結果が否定的であれば、Ｓ２３０４を行う。上記判断の結果が否定的となるケースは、Ｓ２３０１で選択したクエリブロックの実行の開始間際、又は、終了間際であることが多い。【０１８８】
Ｓ２３０３で、クエリ実行部４２３は、Ｓ２３０１で選択したクエリブロックにおいて、タスクの生成を待っているタスクのうち、該タスクに対応するＤＢオペレーションより後続のＤＢオペレーションの数が少ないタスクを選択する。【０１８９】
Ｓ２３０４で、クエリ実行部４２３は、Ｓ２３０１で選択したクエリブロックにおいて、タスクの生成を待っているタスクのうち、該タスクに対応するＤＢオペレーションより後続のＤＢオペレーションの数が多いタスクを選択する。【０１９０】
Ｓ２３０５で、クエリ実行部４２３は、Ｓ２３０３又はＳ２３０４で選択されたタスクの生成待ちを優先的に解除する。
【実施例２】
【０１９１】
以下、実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略又は簡略する。【０１９２】
ＤＢＭＳ４１２は、図１及び図２に示す表Ａ、索引Ｂ及び表Ｂを含むＤＢ４５１を外部ストレージ装置４０２に格納しているとする。実施例２において、表Ａは、カラムＡＣ２を含み、表Ｂは、カラムＢＣ２を含むとする。また、ＤＢ４５１は、表ＡのカラムＡＣ２を対象とする索引Ａ’を含むとする。実施例２においては、ＤＢＭＳ４１２は、図２５に示すような相関条件のあるサブクエリを含むクエリを実行する。図２５のクエリは、カラムＢ＿Ｔｙｐｅの値が「ＰＰＰ」である表Ｂのレコードについて、カラムＢＣ２の値と表ＡのカラムＡＣ２の値とが一致し、且つ、カラムＡ＿Ｔｙｐｅの値が「ＡＡＡ」である表Ａのレコードが存在する場合に、カラムＢＣ１の値を抽出するクエリである。図２５のＥＸＩＳＴＳ句に関するサブクエリは、該サブクエリの外側のＦＲＯＭ句に指定された表Ｂのカラムの記述を含む。従って、該サブクエリは、サブクエリの外側部分との相関条件を有していると言える。【０１９３】
ＤＢＭＳ４１２は、図２５のクエリを実行するために、図２６に示すようなクエリ実行プランを生成する。ＤＢＭＳ４１２は、図２６のクエリ実行プランに基づき、索引Ｂを用いて、表ＢのカラムＢ＿Ｔｙｐｅの指定値を含んだレコードにおけるカラムＢＣ１、ＢＣ２の値を抽出する。そして、索引Ａ’を用いて、抽出したＢＣ２の値と一致する表ＡのカラムＡＣ２の値を含んだレコードを抽出する。そのレコードにおいて、カラムＡ＿Ｔｙｐｅが指定値であるレコードが存在するか判定し、該判定が肯定的な場合に抽出されたカラムＢＣ１の値をクエリ実行結果とする。具体的には、ＤＢＭＳ４１２は、下記の処理を行う。
（Ｓ１）索引Ｂを用いて、カラムＢ＿Ｔｙｐｅの指定値を含む表Ｂのレコードに対応したＲｏｗＩＤ  Ｌｉｓｔを検索する、
（Ｓ２）上記（Ｓ１）で見つかったＲｏｗＩＤ  Ｌｉｓｔを用いて表Ｂの該当するレコードを含むデータをフェッチし、該当するレコードのカラムＢＣ１及びＢＣ２の値を抽出する、
（Ｓ３）索引Ａ’を用いて、上記（Ｓ２）で抽出したカラムＢＣ２の値と一致するカラムＡＣ２の値を含んだ表ＡのレコードのＲｏｗＩＤ  Ｌｉｓｔを検索する、
（Ｓ４）上記（Ｓ３）で見つかったＲｏｗＩＤ  Ｌｉｓｔを用いて表Ａの該当するレコードを含むデータをフェッチし、該当するレコードについてカラムＡ＿Ｔｙｐｅが指定値であるものを抽出する、
（Ｓ５）上記（Ｓ４）で抽出されたレコードが存在するか否かを判定し、該レコードが存在する場合に、下記（Ｓ６）を行う
（Ｓ６）クエリ実行の結果として、上記（Ｓ２）で抽出したカラムＢＣ１の値をクエリ発行元に返す。【０１９４】
図２６に示すクエリ実行プランは、（Ｓ１）、（Ｓ２）、及び、（Ｓ６）の実行に対応するクエリブロック１と、（Ｓ３）〜（Ｓ５）の実行に対応するクエリブロック２とを含む。すなわち、図２６のクエリ実行プランは、相関条件のあるサブクエリに関するクエリブロック２と、該サブクエリの外側部分に関するクエリブロック１とを含む。ＤＢＭＳ４１２は、図２６のクエリ実行プランに基づき、クエリブロック１の実行により抽出される表Ｂのレコード毎に、クエリブロック２を実行してＥＸＩＳＴＳ句の評価を行う。従って、限られたメモリ資源を各クエリブロックの実行に対してどのように割り当てるかによって、クエリブロック１の実行により表Ｂのレコードが抽出される速度と、クエリブロック２の実行によりＥＸＩＳＴＳ句の評価を行う速度との関係が変動し、故に、クエリ実行時間が異なってくる。【０１９５】
実施例２は、実施例１とは、ＤＢＭＳ４１２のクエリブロック優先度制御部４３２により実行される優先度自動変更処理（図２３参照）の一部が異なる。【０１９６】
図２７は、実施例２に係る優先度自動変更処理の流れの一部を示す。【０１９７】
実施例２に係る優先度自動変更処理は、図２３に示す優先度自動変更処理におけるＳ２２０５を、図２７に示すＳ２２１０に代えたものである。図２７の説明においても、図２３の説明と同様に、優先度を決定する対象であるクエリブロックを「対象クエリブロック」と言い、対象クエリブロックを含むクエリ実行プランに対応するクエリを「対象クエリ」と言う。【０１９８】
Ｓ２２１０で、クエリブロック優先度制御部４３２は、下記（ｐ）乃至（ｔ）、
（ｐ）対象クエリブロック間の参照関係、
（ｑ）対象クエリブロック毎の実行に要するメモリ資源量の、対象クエリ（全ての対象クエリブロック）の実行に対して割り当て可能なメモリ資源量の上限に占める割合、
（ｒ）対象クエリブロックの内容、及び、実行中の他のクエリブロックの内容と実行進捗状況、
（ｓ）対象クエリブロックが相関条件のあるサブクエリに関する場合、対象クエリブロックにおける予測ＤＢオペレーション数、予測タスク実行多重度、又は、その実行に要するメモリ資源量、
（ｔ）対象クエリブロックが相関条件のあるＥＸＩＳＴＳ句を含むサブクエリに関する場合、該サブクエリの外側部分に関するクエリブロックの予測ＤＢオペレーション数、
のいずれかに基づき、図２３のＳ２２０３で決定した対象クエリの優先度に対する、対象クエリブロック間の比率を決定する。クエリブロック優先度制御部４３２は、決定した対象クエリブロック間の比率に基づいて、対象クエリブロック毎の優先度を決定する。【０１９９】
ここで、対象クエリのクエリ実行プランに含まれる対象クエリブロックとして、相関条件のあるサブクエリに関するクエリブロック（相関サブクエリブロック）と、該サブクエリの外側部分に関するクエリブロック（メインクエリブロック）との二つが含まれるケースを考える。本ケースにおいて、対象クエリブロック間の比率を決定する具体的な例を以下に説明する。なお、（ｐ）、（ｑ）、（ｒ）については、相関条件のないサブクエリに関して具体的に説明した実施例１と同様であるので、説明を省略する。【０２００】
＜（ｓ）に基づいて比率を決定する具体例＞
クエリブロック優先度制御部４３２は、対象クエリのクエリ実行プランに相関サブクエリブロックを含む場合、下記（ｓ１）、（ｓ２）、及び（ｓ３）、
（ｓ１）相関サブクエリブロックにおけるコスト計算に基づく予測ＤＢオペレーション数（もしくは予測Ｉ／Ｏ数）、
（ｓ２）相関サブクエリブロックにおけるＤＢ統計情報に基づく予測タスク実行多重度、
（ｓ３）相関サブクエリブロック全体の実行に要するメモリ資源量の、対象クエリの実行に対して割り当て可能なメモリ資源量の上限に占める割合、
のいずれか一つの数値が所定値を超える場合に、相関サブクエリブロックの比率を、メインクエリブロックの比率よりも上げることがある。（ｓ３）における「相関サブクエリブロック全体の実行に要するメモリ資源量」とは、例えば、メインクエリブロックの実行により抽出されて相関サブクエリブロックを実行されるレコード数と、相関サブクエリブロックの実行に要するメモリ資源量との積で良い。【０２０１】
（ｓ）に基づいて対象クエリブロック間の比率を決定するケースは、相関サブクエリブロックの実行に関するタスク実行多重度が大きくなる（又は消費するメモリ資源量が大きくなる）と予測されるクエリを実行するケースである。この場合、（ｓ）に基づいて対象クエリブロック毎の優先度を決定することによって、クエリ実行部４２３は、限られたメモリ資源を相関サブクエリブロックの実行に優先して割り当てることができる。これにより、クエリ実行部４２３は、メインクエリブロックの実行に関してタスクの生成を抑制し、相関サブクエリブロックを実行するタスクを優先的に生成し実行できることとなる。相関サブクエリブロックの実行は、クエリの結果を生成するために必要なことであり、クエリの結果を生成すれば、該結果の生成に関連して消費されたメモリ資源を解放することができる。従って、相関サブクエリブロックを優先的に実行することは、クエリの結果生成を優先すること、すなわち、結果生成に関連して消費されたメモリ資源を早期に解放することにつながり、故に、限られたメモリ資源を有効に活用することにつながる。【０２０２】
＜（ｔ）に基づいて比率を決定する具体例＞
クエリブロック優先度制御部４３２は、対象クエリのクエリ実行プランにＥＸＩＳＴＳ句に関する相関サブクエリブロックを含む場合、メインクエリブロックにおける、コスト計算に基づく予測ＤＢオペレーション数（もしくは予測Ｉ／Ｏ数）、又は、ＤＢ統計情報に基づく予測タスク実行多重度が所定値を超える場合に、メインクエリブロックの比率を、ＥＸＩＳＴＳ句に関する相関サブクエリブロックの比率よりも上げることがある。【０２０３】
（ｔ）に基づいて対象クエリブロック間の比率を決定する場合、クエリ実行部４２３は、ＥＸＩＳＴＳ句に関する相関サブクエリブロックにおけるタスク実行多重度を抑制することができる。ＥＸＩＳＴＳ句の内部のＤＢオペレーションについて、ＥＸＩＳＴＳ句の特性上、全てのＤＢオペレーションを実行する必要がない場合がある。そのため、ＥＸＩＳＴＳ句に関する相関サブクエリブロックにおけるタスク実行多重度を抑制することで、クエリ実行の全体として、実行するＤＢオペレーション数（Ｉ／Ｏ数）を削減でき、限られたメモリ資源を有効に活用できる。【０２０４】
なお、上述のケース（対象クエリブロックとして、相関サブクエリブロックとメインクエリブロックとの二つを含むケース）において、図２３のＳ２２０６の（ｖ）に基づき、実施例２における対象クエリブロック毎の優先度を決定する具体的な例を以下に説明する。クエリブロック優先度制御部４３２は、メインクエリブロックのタスク生成待ちタスク数９０６が実行タスク数９０５に対して所定比率を超えた場合、対象クエリ全体としての優先度を変えないように、メインクエリブロックの優先度を以前の値より下げ、相関サブクエリブロックの優先度を以前の値より上げることがある。ここで、メインクエリブロックのタスク生成待ちタスクに割り当てられたメモリ資源量が所定量を超えた場合に、クエリブロック優先度制御部４３２は、対象クエリブロックの優先度を上記と同様に変更しても良い。
【実施例３】
【０２０５】
以下、実施例３を説明する。その際、実施例１及び２との相違点を主に説明し、実施例１及び２との共通点については説明を省略或いは簡略する。【０２０６】
図２８は、実施例３に係る計算機システムの構成を示す。【０２０７】
アプリケーションサーバ（以下、ＡＰサーバ）３１０２は、ＤＢサーバ４０１に、通信ネットワーク３１１２を介して通信できるように接続されている。また、ＤＢサーバ４０１は、外部ストレージ装置４０２に、通信ネットワーク４０３を介して通信できるように接続されている。ユーザ端末（クライアント端末）３１０１は、ＡＰサーバ３１０２に、通信ネットアーク３１１１を介して通信できるように接続されている。ＤＢサーバ４０１は、ＤＢ４５１を管理するＤＢＭＳ４１２を実行する。外部ストレージ装置４０２は、ＤＢ４５１を格納する。ＡＰサーバ３１０２は、ＤＢサーバ４０１で実行されるＤＢＭＳ４１２に対してクエリを発行するＡＰを実行する。ユーザ端末３１０１は、ＡＰサーバ３１０２で実行されるＡＰに要求を出す。なお、ユーザ端末３１０１、又は、ＡＰサーバ３１０２は、複数存在しても良い。【０２０８】
ＡＰサーバ管理端末３１０３は、通信ネットワーク３１１４を介してＡＰサーバ３１０２に接続されている。ＤＢサーバ管理端末３１０４は、通信ネットワーク３１１５を介してＤＢサーバ４０１に接続されている。ストレージ管理端末３１０５は、通信ネットワーク３１１６を介して外部ストレージ装置４０２に接続されている。ＡＰサーバ管理端末３１０３は、ＡＰサーバ３１０２を管理する端末である。ＤＢサーバ管理端末３１０４は、ＤＢサーバ４０１を管理する端末である。ストレージ管理端末３１０５は、外部ストレージ装置４０２を管理する端末である。ＤＢサーバ管理者又はユーザは、ＤＢサーバ管理端末３１０４から、クエリ実行管理表４２４内の部分クエリに対応する優先度９０１及び最優先フラグ９０２等を設定して良い。なお、管理端末３１０３〜３１０５のうちの少なくとも二つが共通（一体）であっても良い。また、通信ネットワーク３１１１、３１１２、３１１４、３１１５、３１１６、及び４０３のうちの少なくとも二つが共通（一体）であっても良い。【０２０９】
実施例３では、例えば、下記の通り処理が実行される。
（Ｓ３１）ユーザ端末３１０１は、ＡＰサーバ３１０２に要求（以下、ユーザ要求）を発行する。
（Ｓ３２）ＡＰサーバ３１０２は、Ｓ３１で受信したユーザ要求に従いクエリを生成する。そして、生成したクエリをＤＢサーバ４０１に発行する。
（Ｓ３３）ＤＢサーバ４０１は、ＡＰサーバ３１０２からのクエリを受け付け、受け付けたクエリを実行する。ＤＢサーバ４０１は、受け付けたクエリの実行において必要なデータ入出力要求（例えばデータ読出し要求）を外部ストレージ装置４０２に発行する。ＤＢサーバ４０１は、一つのクエリの実行において、複数のデータ入出力要求を並行して発行することがある。そのため、ＤＢサーバ４０１は、一つのクエリの実行において、Ｓ３３の要求を複数回並行して行うことがある。
（Ｓ３４）外部ストレージ装置４０２は、Ｓ３３で発行されたデータ入出力要求について、ＤＢサーバ４０１に応答する。外部ストレージ装置４０２は、Ｓ３４の応答を複数回並行して行うことがある。
（Ｓ３５）ＤＢサーバ４０１は、クエリの実行結果を生成し、ＡＰサーバ３１０２に送信する。
（Ｓ３６）ＡＰサーバ３１０２は、クエリの実行結果を受信する。そして、該実行結果に従う、Ｓ３１で受信したユーザ要求に対する回答を、ユーザ端末３１０１に送信する。
なお、ＡＰサーバ３１０２に発行されるユーザ要求、又は、ＤＢサーバへ発行されるクエリは、同時に複数あっても良い。【０２１０】
以上、幾つかの実施例を説明したが、本発明は、これらの実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。【０２１１】
例えば、実施例１及び２では、「メモリ資源量」の大きさは、メモリ資源の量（例えばメガバイト）で定義されるが、本発明ではこれに限らず、他の単位、例えば、タスクの数（すなわち、幾つのタスクを生成し実行できる大きさのメモリ資源であるか）で定義されても良い。
【符号の説明】
【０２１２】
４１２…データベース管理システム（ＤＢＭＳ）
【図１】
0005858151.tif 000002
【図２】
0005858151.tif 000003
【図３】
0005858151.tif 000004
【図４】
0005858151.tif 000005
【図５】
0005858151.tif 000006
【図６】
0005858151.tif 000007
【図７】
0005858151.tif 000008
【図８】
0005858151.tif 000009
【図９】
0005858151.tif 000010
【図１０】
0005858151.tif 000011
【図１１】
0005858151.tif 000012
【図１２】
0005858151.tif 000013
【図１３】
0005858151.tif 000014
【図１４】
0005858151.tif 000015
【図１５】
0005858151.tif 000016
【図１６】
0005858151.tif 000017
【図１７】
0005858151.tif 000018
【図１８】
0005858151.tif 000019
【図１９】
0005858151.tif 000020
【図２０】
0005858151.tif 000021
【図２１】
0005858151.tif 000022
【図２２】
0005858151.tif 000023
【図２３】
0005858151.tif 000024
【図２４】
0005858151.tif 000025
【図２５】
0005858151.tif 000026
【図２６】
0005858151.tif 000027
【図２７】
0005858151.tif 000028
【図２８】
0005858151.tif 000029