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