説明

データベース管理システム及び方法

【課題】 一つのクエリの実行に要する時間を短縮化する。
【解決手段】 クエリを受け付けるクエリ受付部7と、受け付けたクエリを実行するクエリ実行部9とが備えられる。クエリ実行部9は、動的にタスクを生成していき、生成された複数のタスクを並行して実行する。クエリ実行部9は、各タスクの実行において、データベースのデータを必要とする都度に、そのデータを取得するためのタスクを生成し、該生成されたタスクの実行において、必要に応じて、データベースからデータを読み出すためのデータ読出し要求を発行する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データベース管理技術に関わる。
【背景技術】
【0002】
例えば、特開2004−192292号公報には、バーチャリゼーション環境上にDB(データベース)を構築したシステムにおける管理サーバが開示されている。その管理サーバは、DBMS(データベース管理システム)からDB処理の実行計画や処理優先度等のDB処理情報を取得し、その情報を基にこれからアクセスが行われるデータとそのアクセス順を予測し、予測結果に基づいて近い将来アクセスが行われるデータを記憶装置のキャッシュ上に読み出すよう指示し、最も近い将来にアクセスが行われるデータを自サーバのキャッシュメモリに読み出す。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2004−192292号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
ところで、通常、DBMSは、クエリを受け付け、クエリを受け付けた場合には、そのクエリを実行してその実行結果を出力するようになっている。クエリの実行結果を出力するまでには、複数段階のデータベースオペレーションが実行される場合がある。それら複数段階のデータベースオペレーションは、一般に、所定の順序で実行されるようになっており、それら複数段階のデータベースオペレーションのうちの少なくとも一つのデータベースオペレーションでは、記憶装置に対して読出し要求を発行する必要のある場合がある。以下、図1A〜図1Cを参照して一つの具体例を説明する。
【0005】
例えば、DBMSが、DBMSの上位にあるコンピュータプログラム(例えばアプリケーションプログラム)からクエリを受け付けた場合に、そのクエリの実行プラン(以下、単に「クエリプラン」と言う)として、図1Aに記載のクエリプランを生成したとする。そして、図1Bに記載のパート表23A、ラインアイテム表23B、オーダ表23C及び各種インデックス25が、記憶装置(例えば、DBMSを備えた情報処理端末に通信可能に接続された外部記憶装置)に格納されているとする。
【0006】
図1Aに例示したクエリプランによれば、パート表23Aから未読の行がなくなるまで、データベースオペレーション(以下、「OP」と略記)1〜5が繰り返される。OP1は、初期データベースオペレーションであり、パート表23A(図1B参照)から1行読む処理である。OP2は、読まれた行中のPIDに対応するラインアイテム表23B(図1B参照)のポインタ(rowid)をラインアイテムインデックス25Aで検索する処理である。OP3は、得られたポインタでラインアイテム表23Bをフェッチし、OIDでフィルタをかける処理(例えば、OIDが504未満のもののみを出力する処理)である。OP4は、出力されたOIDに対応するオーダ表23C(図1B参照)のポインタ(rowid)をオーダインデックス25Bで検索する処理である。OP5は、得られたポインタでオーダ表23Cをフェッチし、結果としてリターンする処理である。以上のようなOP1〜OP5が繰り返されることにより、図1Cに例示するようなクエリ実行結果を、クエリの発行元のコンピュータプログラムに返すことができる。
【0007】
上記のようにして一つのクエリを実行する場合には、複数のOPが繰り返し実行され、且つ、各回の実行において、一つのOPが終了してから次のOPが開始される。このため、例えば、或るOP(例えばOP3)において、読出し要求が発行された場合には、その読出し要求に応答してデータが読み出されるまで処理が中断してしまう。故に、一つのクエリの実行に要する時間が長くなってしまう。
【0008】
また、上記のようにして一つのクエリを実行する場合には、記憶装置をランダムアクセスすることがある。具体的には、ラインアイテム表23B、オーダ表23C及びインデックスの読み込みがランダムになってしまうことがある。より具体的には、例えば、ラインアイテム表23Bの一行目にアクセスした後、6行目及び9行目もパート表23Aの行に対応した行であるにも関わらず、一旦12行目にアクセスした後に、6行目へのアクセスが行われてしまう。一つのクエリの実行の際、DBMSから読出し要求が複数回発行されることになるが、上記のようなランダムアクセスが行われると、全体としてのデータ読出し待ち時間が長くなってしまう。
【0009】
従って、本発明の一つの目的は、一つのクエリの実行に要する時間を短縮化することにある。具体的には、例えば、一つのクエリの実行における全体としてのデータ読出し待ち時間を短縮化することにある。
【0010】
本発明の他の目的は、後述の説明から明らかになるであろう。
【課題を解決するための手段】
【0011】
本発明の一つの観点に従うデータベース管理システムは、クエリを受け付けるクエリ受付部と、前記受け付けたクエリを実行し、その際、必要に応じて、記憶装置(例えば主記憶装置)からデータベースのデータを読み出すためのデータ読出し要求を発行するクエリ実行部とを備える。前記クエリ実行部は、動的にタスクを生成していき、生成された複数のタスクを並行して実行する。前記クエリ実行部は、各タスクの実行において、前記データベースのデータを必要とする都度に、そのデータを取得するためのタスクを生成する。また、前記クエリ実行部は、該生成されたタスクの実行において、必要に応じて、前記データベースからデータを読み出すための前記データ読出し要求を発行する。
【0012】
このデータベース管理システムの具体例としては、以下の通りである。すなわち、データベース管理システムは、上位のコンピュータプログラム(例えば、アプリケーションプログラム)からクエリ(例えばSQL)を受け付けるクエリ受付部と、該受け付けたクエリを実行するプランであるクエリプランを生成するクエリプラン生成部と、該生成されたクエリプランに従いクエリを実行するクエリ実行部とを備えることができる。クエリプランは、例えば、データ読出しを伴う一つ以上のデータベースオペレーションで構成され、該データベースオペレーション間の実行順序には木構造の順序関係が存在する。クエリ実行部は、他のデータベースオペレーションに依存しない初期データベースオペレーションを抽出してタスクを割り当てるステップと、該割り当てられたタスクを実行するステップとで構成することができる。
【0013】
該データベースオペレーションに対応したタスクを実行するステップでは、以下の(A)〜(D)のステップ、
(A)データ読出し処理に対して複数の独立したタスクを生成するステップ、
(B)該生成された複数のタスクのデータ読出し処理において、外部記憶装置からのデータ読出しが必要な場合、オペレーティングシステムにデータ読出し要求を発行するステップ、
(C)該データ読出しが完了したタスクから当該データベースオペレーションの実行を再開するステップ、
(D)該データベースオペレーションに依存した次のデータベースオペレーションがある場合、該次のデータベースオペレーションを実行するステップ、
を実行することができる。
【0014】
第一の態様では、前記クエリ実行部は、所定の状況にあるタスクの現存数が所定数に達している場合には、新たなタスクの生成を待ち、前記現存数が減った場合に、前記新たなタスクを生成することができる。所定の状況とは、例えば、単に現存している状況であっても良いし、データ取得待ちの状況であっても良い。
【0015】
第二の態様では、データベース管理システムは、読出し順序制御部を更に備えることができる。読出し順序制御部は、前記クエリ実行部から発行された複数個のデータ読出し要求を受け、受け付けた複数個のデータ読出し要求を、前記複数個のデータ読出し要求を受け付けた順序とは異なる、全体としてのデータ読出し時間長(すなわち、複数個のデータ読出し要求に応じてデータが読み出されるまでの時間長)を短縮化するための順序で発行することができる。
【0016】
具体的には、例えば、データベース管理システムは、前記クエリ実行部からのデータ読出し要求を受け付け、そのデータ読出し要求をオペレーティングシステムに発行する読出し最適化部を備えることができる。読出し最適化部は、受け付けたデータ読出し要求をキューイングし、データ読出し要求を発行するタイミングを制御するための条件(例えば、後述する第二実施例のバッチスケジューリング駆動条件)が満たされた場合に、キューイングされた複数のデータ読出し要求の出力順序を変更することで、データ読出し時間を最適化することができる。
【0017】
第三の態様では、データベース管理システムは、優先順位の異なる複数のキューを更に備えることができる。前記クエリ実行部は、前記生成されたタスクの実行により、前記複数のキューのうち、所定の条件に適合する優先度に対応したキューに、前記データ読出し要求を格納することができる。前記読出し順序制御部は、優先度の高いキューに格納されているデータ読出し要求ほど優先的に発行することができる。
【0018】
具体的には、例えば、読出し最適化部は、スケジュール対象外を含む複数の読出し要求キューを有し、読出し要求キュー毎に設定された処理手順に従い、データ読出し要求を発行することができる。この場合において、タスクを実行することによってデータ読出し要求を読出し最適化部へ発行する際に、以下の(a)〜(c)の処理、
(a)読出し要求に対するスケジューリングフラグを付与する処理、
(b)該スケジューリングフラグの値に応じて複数の読出し要求キューの中から一つの読出し要求キューを選択する処理、
(c)選択した読出し要求キューへ読出し要求を格納する処理、
を実行することができる。読出し最適化部では、データ読出し要求をキューに保管し続ける時間長を変更することができる。
【0019】
第四の態様では、上述の第三の実施態様において、前記読出し順序制御部は、所定のコマンドを受け付けた場合には、或る優先度のキューに格納されている少なくとも一つの読出し要求を別の優先度のキューに移動させることができる。
【0020】
具体的には、例えば、データベース管理システムは、スケジュール対象の読出し要求キューにキューイングされたデータ読出要求に対してスケジュールキャンセルコマンドを発行することにより、該データ読出し要求をスケジュール対象外の読出し要求キューに移すことができる。
【0021】
第五の態様では、上述の第三の態様において、前記クエリ実行部は、前記受け付けたクエリの実行プランの内容、又は、前記受け付けたクエリの実行に求められる性能要件に応じて、どの優先度のキューに読出し要求を格納するかを決定することができる。
【0022】
第六の態様では、上述の第三の態様において、データベース管理システムは、タスク管理部を備えることができる。タスク管理部は、クエリ実行プランに基づいて、残存ステップ数を計算し、計算された残存ステップ数の少ないタスクの優先度を上げることができる。この場合において、前記クエリ実行部が、優先度の上がったタスクを実行することにより発行される読出し要求を、該優先度に対応するキューに格納することができる。ここで、残存ステップとは、例えば、残存するデータオペレーションの数とすることができる。
【0023】
第七の態様では、前記クエリ実行部は、生成された各タスクの実行において、前記データベースのデータの取得を待ち、該データを取得した後、データの取得待ちを開始した順序と同じ順序で、タスクの実行を再開することができる。これは、上記第二の態様においても行うことができる。
【0024】
本発明の別の観点に従うコンピュータシステムは、上述したデータベース管理システムと、読出し順序制御部とを備える。読出し順序制御部は、データベース管理システムから発行された複数個のデータ読出し要求を受け付け、受け付けた複数個のデータ読出し要求を、前記複数個のデータ読出し要求を受け付けた順序とは異なる、全体としてのデータ読出し時間長を短縮化するための順序で発行する。
【発明の効果】
【0025】
本発明に従うデータベース管理システムによれば、一つのクエリの実行に要する時間長を短縮化することができる。
【図面の簡単な説明】
【0026】
【図1】図1Aは、クエリプランの一例を示す。図1Bは、パート表、ラインアイテム表及びオーダ表の構成例と表同士の関連とを示す。図1Cは、クエリの実行結果として出力される情報の例を示す。
【図2】図2は、本発明の第一実施例に係るシステムの構成例を示す。
【図3】図3は、クエリ実行部9が行う処理の流れの一例を示す。
【図4】図4Aは、図3のS2のタスク生成待ち処理において行われる処理の流れの一例を示す。図4Bは、図3のS11のデータ取得処理において行われる処理の流れの一例を示す。
【図5】図5Aは、従来のクエリ実行の流れの一例を示す。図5Bは、本発明の第一実施例におけるクエリ実行の流れの一例を示す。
【図6】図6は、本発明の第二実施例に係るシステムの構成例を示す。
【図7】図7Aは、本発明の第二実施例で行われるデータ取得処理の流れの一例を示す。図7Bは、I/O要求発行処理の流れの一例を示す。
【図8】図8は、I/O最適化部27の説明図である。
【図9】図9Aは、I/O最適化部27が行う処理の流れの一例を示す。図9Bは、即時発行処理の流れの一例を示す。
【図10】図10Aは、スケジュールキャンセル処理の流れの一例を示す。図10Bは、バッチスケジュール処理の流れの一例を示す。
【図11】図11A及び図11Bは、本発明の第一実施例のDBMS5によって期待される効果の一例の説明図である。具体的には、図11Aは、第一実施例におけるI/O要求の発行とデータの読み出しの流れの一例を示す。図11Bは、図11Aに示した流れにおけるディスクシークイメージの一例を示す。
【図12】図12A及び図12Bは、本発明の第二実施例のDBMS5によって期待される効果の一例であって、即時発行処理が行われない場合の説明図である。
【図13】図13A及び図13Bは、本発明の第二実施例のDBMS5によって期待される効果の一例であって、即時発行処理が行われる場合の説明図である。
【図14】図14Aは、本発明の第三実施例におけるデータ取得待ち表の構成例を示す。図14Bは、生成された子タスクが第一実施例で行う処理との第一の相違部分を示す。図14Cは、生成された子タスクが第一実施例で行う処理との第二の相違部分を示す。
【図15】図15Aは、データ取得処理の開始順序、データの取得順序、及びタスクの再開順序の関係の一例を示す。図15Bは、図15Aにおけるディスクシークイメージの一例を示す。
【発明を実施するための形態】
【0027】
以下、図面を参照して、本発明についての幾つかの実施例を説明する。
【実施例1】
【0028】
図2は、本発明の第一実施例に係るシステムの構成例を示す。
【0029】
データベースサーバ1と、データベースサーバ1の外に存在する記憶装置である外部記憶装置19とが、通信ネットワーク17を介して通信可能に接続されている。
【0030】
外部記憶装置19は、記憶資源を有する装置であればどのような装置であっても良い。例えば、外部記憶装置19は、ファイルサーバであっても良いし、単体のディスクドライブ(例えばハードディスクドライブ)であっても良いし、複数のディスクドライブを備えた記憶装置システムであっても良い。外部記憶装置19は、データベース21を有し、データベース21内に、複数の電子的な索引25、25、…と、複数の電子的な表23、23、…とを記憶することができる。各索引25は、例えば、或る表における各行と別の表における各行との繋がりを表すポインタを複数個備えるデータ(例えば、図1Bにおけるインデックス25A、25B)であり、B-木インデクスなどが用いられる。各表23は、複数の行要素から成る行を複数個有するデータ(例えば、図1Bにおけるパート表23A、ラインアイテム表23B又はオーダ表23C)である。
【0031】
データベースサーバ1は、例えば、格別図示しないが、複数のコンピュータプログラムを記憶することができる記憶資源(例えばメモリやハードディスク)や、記憶資源からコンピュータプログラムを読み込んで実行することができるプロセッサ(例えばCPU)等を有するコンピュータマシンである。記憶資源に記憶されているコンピュータプログラムとして、例えば、クエリ(例えばSQL(Structured Query Language))を発行するアプリケーションプログラム(以下、AP)3と、AP3からクエリを受けて実行し実行結果をAP3に返すデータベース管理システム(以下、DBMS)5と、ウィンドウズ(登録商標)等のオペレーティングシステム(以下、OS)15とがある。OS15の上位にDBMS5があり、DBMS5の上位にAP3が存在する。なお、APはDBMSと異なるコンピュータに存在していても良い。その場合には、APからの問合せ要求はネットワーク経由で受け付ける。また、記憶資源の一部を利用して、例えば、DBMS5で利用されるデータベースバッファ(以下、DBバッファ)12を構築することができる。
【0032】
DBMS5は、例えば、AP3からクエリを受け付けるクエリ受付部7と、クエリ受付部7が受け付けたクエリに基づいて例えば図1Aに例示したようなクエリプランを生成するクエリプラン生成部11と、生成されたクエリプランに従がってクエリを実行するクエリ実行部9と、クエリの実行のためのタスクを管理する(例えばタスクに対してCPUやメモリ等のリソースを割り当てる)実行タスク管理部13とを有する。クエリプランは、複数のデータベースオペレーション(OP)の実行順序を定義したものである。
【0033】
この第一実施例では、特にクエリ実行部9が行う処理に特徴がある。クエリ実行部9は、少なくとも一つのOPを割り当てたタスクを実行することにより、当該少なくとも一つのOPを実行することができる。そして、クエリ実行部9は、そのタスクの実行中において、外部記憶装置19からのデータの読出しが必要になれば、そのデータを読み出して次のOPを実行するタスクを生成し、生成されたタスクを実行することにより、データの入出力要求(以下、「I/O要求」と記載)を発行することができる。タスクを複数個生成した場合には、複数個のタスクを並行して実行することができ、故に、複数個のI/O要求を並行して発行することができる。なお、タスクの実装としては、OSが管理するプロセスやスレッド、または、アプリケーションやミドルウェアが実装する擬似プロセスや擬似スレッドなど任意の実行環境が利用できる。
【0034】
以下、クエリ実行部9が行う処理について説明する。なお、以下、説明を分かり易くするために、一つのタスクを実行することにより一つのOPが実行されるものとする。しかし、勿論それに限定する必要は無く、例えば、一つのタスクを実行することにより、複数のOPが実行されても良い。具体的には、例えば、一つのタスクが、或るOPを実行し、その実行結果を引き継いで、次のOPを実行しても良い。
【0035】
図3は、クエリ実行部9が行う処理の流れの一例を示す。
【0036】
クエリ実行部9は、或る段階のデータベースオペレーション(OP)を割り当てたタスク(以下、便宜上「親タスク」と言う)を実行することにより、そのOPを実行することができる。
【0037】
実行された親タスクは、そのOPの実行において、残りのデータ(例えば、索引25又は表23から未だ読み出されていないデータ)があれば(ステップS1で「データあり」)、タスク生成待ち処理を実行する(S2)。タスク生成待ち処理により、タスクを生成することができるようになったら、親タスクは、残りのデータを読み出して次のOPを実行することを割り当てたタスク(以下、便宜上「子タスク」と言う)31を生成する(S3)。親タスクの実行中においては(S4で「親タスク」)、再びS1が実行される。また、S1で「データなし」の場合には、当該親タスクは消滅することができる。
【0038】
クエリ実行部9は、並行して、生成された子タスク31を実行することができる。S1からS4の「親タスク」の処理が繰り返されることにより、同一の次のOPを実行する子タスクが複数個生成された場合には、生成された複数個の子タスク31、31、…を並行して実行することができる。
【0039】
実行された子タスク31は、S1における残りのデータを取得するデータ取得処理を実行し(S11)、データを取得できれば(S11で「データあり」)、その取得されたデータが選択条件にマッチするか否かを判断するS12の処理を行う(なお、このS12は、OPの種類によっては行われない)。マッチすれば(S12で「あり」)、子タスク31は、自分に割り当てられたOPの次のOPがあれば(S13で「あり」)、次のOPを実行し(S14)、なければ(S13で「なし」)、結果をリターンする(S15)。次のOPがあるか否かは、例えば、クエリプラン生成部11によって生成された図1Aに例示したクエリプランを参照することにより判別することができる。また、S14の次のOPの実行では、当該子タスクは、親タスクとして、上述したS1の処理を実行し、S3で子タスクを生成することができる。
【0040】
図4Aは、図3のS2のタスク生成待ち処理において行われる処理の流れの一例を示す。
【0041】
親タスクは、自分より高い優先度のタスクが生成待ちか否かを判定する(S2−1)。具体的には、例えば、親タスクは、クエリプランを参照し、他の親タスクの実行において生成待ちとなっている子タスクが、自分よりも後段のOPを実行するタスクか否かを判定する。
【0042】
S2−1の判定の結果、待ちであれば(S2−1で「あり」)、親タスクは、タスクの生成が行われる契機となるイベントの発生を待つ(S2−2)。
【0043】
一方、S2−1の判定の結果、待ちでなければ(S2−1で「なし」)、親タスクは、現存するデータ取得待ちタスク数が所定の閾値未満か否かを判定する(S2−3)。現存するデータ取得待ちタスク数は、例えば、クエリ実行部9が、タスクを生成する都度に所定のカウント値を1増やし、データ取得が完了する都度にそのカウント値を1減らすことで、そのカウント値を参照することにより、判別することができる。また、閾値は、データベースサーバ1の記憶資源に記憶される値である。閾値は、例えば、一種のチューニングパラメータであり、DBMS5の管理者が所望の値とすることができる。また、閾値は、DBMSシステム全体で決めることも可能であるし、問合せやユーザなど任意の単位で設定することが可能である。
【0044】
S2−3の判定の結果、残存タスク数が所定の閾値未満であれば(S2−3で「はい」)、親タスクは、図3のS2のタスク生成待ち処理を終えて次のS3を実行することができ、そうでなければ(S2−3で「いいえ」)、少なくとも一つのタスクが消滅する契機となるイベントの発生を待つ(S2−4)。ここでのイベントとしては、例えば、図3のS1において「データなし」となることが挙げられる。
【0045】
図4Bは、図3のS11のデータ取得処理において行われる処理の流れの一例を示す。
【0046】
子タスクは、DBバッファ12にアクセスし、過去に読み出されたデータが残っている等の理由により、DBバッファ12に、自分の読出し対象のデータが存在していれば(S11−1で「ヒット」)、そのデータをDBバッファ12から取得して(S11−5)、このデータ取得処理を終える。
【0047】
子タスクは、DBバッファ12に、自分の読出し対象のデータが存在していない場合(S11−1で「フォルト」)、そのデータが存在する領域に対してI/O要求が未だ発行されていなければ(S11−2で「未」)、OSシステムコールによるI/O発行を行う(S11−3)。すなわち、子タスクは、OS15にI/O要求を出すことで、OS15から外部記憶装置19に対するI/O要求を発行させる。子タスクの実行は、それに応答して、外部記憶装置19からOS15を介してデータが読み出されるまで待ちとなる。データが読み出されたならば(S11−5)、子タスクは、処理を再開し、読み出されたデータをDBバッファ12に格納して、このデータ取得処理を終える。
【0048】
子タスクは、S11−1で「フォルト」の場合、自分の読出し対象のデータが存在する領域に対してI/O要求が既に発行されていれば(S11−2で「既」)、I/O要求の完了を待つ(S11−4)。データが読み出されたならば(S11−5)、子タスクは、処理を再開し、読み出されたデータをDBバッファ12に格納して、このデータ取得処理を終える。なお、自分の読出し対象のデータが存在する領域に対してI/O要求が既に発行されているか否かは、例えば、各タスクが、I/O要求をOS15に発行する都度に、そのI/O要求によるアクセス先に関するI/O先情報を、データベースサーバ1の記憶資源上の所定記憶領域に書き、子タスクは、その所定記憶領域上の各I/O先情報を参照することにより、判定することができる。I/O先情報としては、例えば、外部記憶装置19に設けられた論理ユニットの識別子(例えば論理ユニット番号)と、アクセス先の論理ブロックアドレス(以下、LBA)とを含んだ情報とすることができる。データベースサーバ1の記憶資源は、例えば、DBオブジェクト(例えば、表23、索引25、又は表23や索引25上の各行要素(例えばPID、OID等))と記憶位置(例えば、論理ユニット識別子及び/又はLBA)との対応関係を表すマッピング情報を記憶することができ、各タスクは、そのマッピング情報に基づいて、OS15に対してI/O要求を発行したり、上記I/O先情報を所定記憶領域に書き込んだりすることができる。
【0049】
上述した第一実施例によれば、クエリ実行部9は、タスクの実行中において、外部記憶装置19からのデータの読出しが必要になれば、そのデータを読み出して次のOPを実行するタスクを生成し、生成されたタスクを実行することにより、I/O要求を発行することができる。タスクを複数個生成した場合には、複数個のタスクを並行して実行することができ、故に、複数個のI/O要求を並行して発行することができる。このことを、図1Aに例示したクエリプランに従がってクエリを実行する場合を例に採って説明すると、従来の技術によれば、図5Aに示すように、パート表23Aから未読の行がなくなるまで、OP1からOP5までを終えて再びOP1から開始することを繰り返す必要があるが、上述した第一実施例によれば、図5Bに示すように、同一段階のOPを並行して実行することができる。具体的には、例えば、パート表23Aの行数は3なので、OP1が割り当てられたタスクが実行されることにより、複数の子タスクが生成され、それら複数の子タスクが並行して実行されることにより、パート表23Aの3行にそれぞれ対応した3つのOP2を並行して実行することができる。各OP2の実行後、OP3も並行して実行され、その実行結果に応じて、タスクが消滅してOP4以降が実行されなかったり(例えば、フェッチされたOIDが504未満であったため図3のS12の選択条件にマッチしないが故に終了となってタスクが消滅したり)、一つのOP3の実行後に更に複数のOP4が並行して実行されたりする(例えば、PID「301」に対応する行が2つ見つかったために2つの行にそれぞれ対応した2つのOP4が並行して実行されたりする)。I/O要求を発行する処理が必要となるOPが並行して実行されるため、複数のI/O要求が並行して発行される。これにより、例えば、生成されたタスク毎に読出し要求が発行され、その読出し要求に応答してデータが読み出されるまで該タスクの処理が中断しても、他の生成されたタスクは独立して実行されるので、クエリの実行それ自体が中断してしまうわけではない。以上の結果、従来に比べて、一つのクエリの実行に要する時間を短縮することができる。
【0050】
また、上述した第一実施例によれば、タスクが無制限に生成されるわけではなく、現存するデータ取得待ちタスク数が所定値になったら、新たにタスクは生成されず、現存のデータ取得待ちタスク数が所定値未満になった場合に、新たなタスクの生成が行われる。これにより、DBMS5での処理によって消費されるコンピュータリソース(例えば、CPU使用率、メモリ使用量等)の量を抑えることができる。
【実施例2】
【0051】
以下、本発明の第二実施例を説明する。なお、その際、第一実施例との相違点を主に説明し、第一実施例との共通点については、重複した説明を省くために、説明を簡略或いは省略する。
【0052】
図6は、本発明の第二実施例に係るシステムの構成例を示す。この図において、第一実施例と同一の要素については同一の番号を付してある。
【0053】
この第二実施例では、DBMS5に、I/O最適化部27が備えられる。この場合、クエリ実行部9は、OS15にではなく、I/O最適化部27にI/O要求を発行する。I/O最適化部27は、クエリ実行部9から並行して発行された複数のI/O要求を受けて保持し、受け付けた複数のI/O要求の順序を、データ読出し時間長を最適化するための順序に変更し、変更後の順序で複数のI/O要求をOS15に発行することができる。
【0054】
以下、この第二実施例について詳細に説明する。
【0055】
図7Aは、本発明の第二実施例で行われるデータ取得処理の流れの一例を示す。
【0056】
この図7Aにおいて、S31、S32、S35及びS36は、図4AのS11−1、S11−2、S11−4及びS11−5にそれぞれ対応している。相違点は、S33及びS34である。
【0057】
S33では、クエリ実行部9によって実行されている子タスクは、発行するI/O要求をスケジュール対象とするか否かを判断し、スケジュール対象とする場合に、スケジュールフラグを付与することを決定する。スケジュール対象とする場合とは、例えば、I/O要求をOS15に発行する緊急性が低い場合であり、そうではなく、その緊急性が高い場合には、スケジュール対象外となる。スケジュール対象とするか否かは、例えば、クエリプランの内容、又は、クエリの実行に求められる性能要件に応じて、決定することができる。前者の具体例では、当該子タスクが、クエリプランを参照し、当該子タスクに割り当てられているOPが或る段階よりも後段のOPであると認識された場合に、スケジュール対象外とし、そうではない場合には、スケジュール対象としても良い。後者の具体例では、当該子タスクは、意思決定支援システムなどの緊急性の低いアクセス特性を有するデータベースアクセスのためのI/O要求を発行する場合には、スケジュール対象とし、オンライントランザクションシステムなどの緊急性の高いアクセス特定を有するデータベースアクセスのためのI/O要求を発行する場合には、スケジュール対象外としてもよい。
【0058】
S33の後、当該子タスクは、I/O要求発行処理を実行する(S34)。
【0059】
図7Bは、I/O要求発行処理の流れの一例を示す。
【0060】
子タスクは、スケジュールフラグを付与する場合(S34−1で「有」)、スケジュール対象キューに、I/O要求を挿入し(S34−2)、スケジュールフラグを付与しない場合(S34−1で「無」)、スケジュール対象外キューに、I/O要求を挿入する。
【0061】
ここで、スケジュール対象キュー及びスケジュール対象外キューとは、I/O最適化部27が有するキューである。
【0062】
図8は、I/O最適化部27の説明図である。
【0063】
I/O最適化部27は、スケジュール対象外キュー61Aと、スケジュール対象キュー61Bとを有する。スケジュール対象外キュー61Aの優先度(換言すれば、I/O要求の発行の緊急度)は、スケジュール対象キュー61Bの優先度よりも高い。スケジュール対象外キュー61Aには、スケジュール対象外とされたI/O要求63がクエリ実行部9によって格納され、スケジュール対象キュー61Bには、スケジュール対象とされたI/O要求63がクエリ実行部9によって格納される。
【0064】
以下、図9A、図9B、図10A及び図10Bを参照して、I/O最適化部27が行う処理の流れについて説明する。その際、適宜に、図8も参照する。
【0065】
図9Aは、I/O最適化部27が行う処理の流れの一例を示す。
【0066】
I/O最適化部27は、条件1〜条件3のうちの少なくとも一つの条件にマッチするイベントが発生するのを待つ(S41)。ここで、条件1とは、スケジュール対象外キュー61AにI/O要求が格納されることである。条件2とは、スケジュールキャンセルコマンドの到着である。条件3とは、後述するバッチスケジューリング駆動条件の成立である。
【0067】
上記の条件1〜条件3のうちの少なくとも一つの条件にマッチするイベントが発生した場合には、I/O最適化部27は、発生したイベントがマッチする条件を判別し(S42)、判別された条件に応じた処理を実行する。すなわち、I/O最適化部27は、条件1であると判別された場合には、即時発行処理を実行し(S43)、条件2であると判別された場合には、スケジュールキャンセル処理を実行し(S44)、条件3であると判別された場合には、バッチスケジュール処理を実行する(S45)。なお、複数の条件にマッチした場合には、例えば、I/O最適化部27は、優先順位の高い条件に対応した処理を優先して実行することができる。例えば、条件1の方が条件3よりも優先順位が高い場合において、条件1及び条件3の両方にマッチしたイベントが発生した場合には、I/O最適化部27は、条件1に対応した即時発行処理を、条件3に対応するバッチスケジュール処理よりも先に実行することができる。
【0068】
図9Bは、即時発行処理の流れの一例を示す。
【0069】
I/O最適化部27は、スケジュール対象外キュー61Aから全てのI/O要求を取り出し(S43−1)、取り出したI/O要求を、OS15のシステムコールを用いて発行する(S43−2)。これにより、外部記憶装置19へとI/O要求が発行される。この即時発行処理は、スケジュール対象外キュー61AにI/O要求が格納されていることがI/O最適化部27によって検出される度に行われるので、後述のバッチスケジュール処理よりも、キューにおけるI/O要求の滞在時間が短い。
【0070】
図10Aは、スケジュールキャンセル処理の流れの一例を示す。
【0071】
I/O最適化部27は、図8で点線で示すように、スケジュールキャンセルコマンドで指定されているI/O要求63Tをスケジュール対象キュー61Bから取得し(S44−1)、取得されたI/O要求63Tをスケジュール対象外キュー61Aに挿入する(S44−2)。挿入する位置は、どこでも良い。例えば、スケジュール対象外キュー61Aに存在する一以上のI/O要求の最後尾であっても良いし、先頭であっても良いし、それらの間の任意の位置であっても良い。
【0072】
図10Bは、バッチスケジュール処理の流れの一例を示す。
【0073】
このバッチスケジュール処理は、前述したように、バッチスケジューリング駆動条件が成立した場合に開始される。バッチスケジューリング駆動条件としては、例えば、直前回にバッチスケジュール処理が行われてから所定時間経過した、又は、スケジュール対象キュー61Bの使用率が所定値以上になったという条件を採用することができる。
【0074】
I/O最適化部27は、スケジュール対象キュー61Bに格納されている複数のI/O要求の順序を、それら複数のI/O要求のトータルのデータ読出し時間長を最適化するための順序に並び替える(S45−1)。この並び替えは、例えば、前述したマッピング情報に基づいて行うことができる。具体的には、例えば、I/O最適化部27は、各I/O要求毎のアクセス先LBAを特定し、外部記憶装置19におけるディスクシーク時間長が最も短くなるような順序に並び替えることができる。なお、並び替えの対象は、例えば、バッチスケジュール処理が開始された時点でスケジュール対象キュー61Bに存在するI/O要求とすることができる。この場合、バッチスケジュール処理を開始した後にスケジュール対象キュー61BにI/O要求が入っても、そのI/O要求は、今回のバッチスケジュール処理では並び替えの対象とされず、次回以降のバッチスケジュール処理で、並び替えの対象とされることになる。
【0075】
I/O最適化部27は、スケジュール対象外キュー61Aが空か否かを判別し(S45−2)、空あれば(S45−2でYES)、スケジュール対象キュー61BにI/O要求があるか否かを判断し(S45−3)、あれば(S45−3で「あり」)、スケジュール対象キュー61BからI/O要求を取り出し、取り出したI/O要求をOS15に発行する。I/O最適化部27は、S45−2において、スケジュール対象外キュー61Aが空でなければ(S45−2でNO)、スケジュール対象外キュー61AにおけるI/O要求を優先して出すために、バッチスケジュール処理を一旦終え、図9AのS41及びS42を経てS43の即時処理を実行することができる。
【0076】
以上が、第二実施例についての説明である。この第二実施例によれば、クエリ実行部9から発行された複数のI/O要求が、クエリ実行部9から発行された順序で外部記憶装置19に送信されるのではなく、一旦、蓄積され、蓄積された複数のI/O要求の順序が、I/O最適化部27によって最適化されてから出力される。これにより、複数のI/O要求がクエリ実行部9から発行されてからクエリ実行部9にデータが読出されるまでの全体としての読出し時間長を短縮することができる。以下、この第二実施例で期待される効果について、第一実施例で期待される効果と比較して説明する。なお、以下の説明は、第一実施例と第二実施例の理解をより深めるためのものに過ぎず、以下の期待される効果を奏しないからといって、本願発明の技術的範囲から外れるものではない。故に、その説明で用いる図11A〜図13Bは、必ずしも精密な記載にはなっていない。例えば、図11B、図12B及び図13Bのディスクシークイメージの図において、横軸における単位距離が表す時間長は必ずしも同じではない。
【0077】
例えば、第一実施例において、図11Aに例示するように、クエリ実行部9から、6つのI/O要求A〜Fが発行されたとする。第一実施例では、I/O最適化部27が存在しないので、DBMS5において、第二実施例のように、DBMS5内で、OS15へ発行する複数のI/O要求A〜Fの並び替えは行われない。この場合には、例えば、OS15のカーネル、或いは、外部記憶装置19の機能によって、I/O要求の並び替えが行われる場合がある。例えば、全I/O要求A〜Fのうち、I/O要求A〜CとD〜Fとの各グループ別に並び替えが行われる場合がある。全I/O要求A〜Fではなく、グループ別に行われるのは、例えば、OS15や外部記憶装置19にとっては、どれだけの数のI/O要求が来るかわからないので、所定数或いは一定時間待って蓄積された段階でI/O要求の並び替えを行わないと、上位の装置或いはコンピュータプログラムを長く待たせてしまうことになるからである。図11Aの例では、OS15又は外部記憶装置19が、I/O要求A〜Cまで受け付けた段階で、「A→B→C」の順から「B→C→A」の順に並び替えてデータ読出しを行う。次に、OS15又は外部記憶装置19が、次のI/O要求D〜Fまで受け付けた段階で、「D→E→F」の順から「E→F→D」の順に並び替えてデータ読出しを行う。この結果、図11Bに例示するように、I/O要求A〜Fに対応するデータの読み出しのためのディスクシーク時間長をある程度短縮化することができる(しかし、前述したようにI/O要求が並行して発行されるので、これでも、従来技術に比べれば、短縮化される)。
【0078】
これに対し、第二実施例では、図12Aに例示するように、DBMS5内で、OS15へ発行する複数のI/O要求A〜Fの順序が最適化され、最適化後の順序で、I/O要求がOS15を介して外部記憶装置19へと発行される。このため、図12Bに例示するように、第一実施例に比べて、I/O要求A〜Fに対応するデータの読み出しのためのディスクシーク時間長を短縮化することができる。なお、この第二実施例において、第一実施例のように、OS15或いは外部記憶装置19によってI/O要求の並び替えが行われたとしても、I/O最適化部27によって並び返された順序と同じ順序になる可能性が大きいので、図12A及び図12Bに例示の効果が期待される。
【0079】
また、第二実施例において、例えば、バッチスケジュール処理によってI/O要求の発行順序が最適化された後に、スケジュール対象外のI/O要求が発行されて、そのI/O要求が優先的にDBMS5から発行された場合には、I/O要求A〜Fに対応するデータの読み出しのためのディスクシーク時間長は、図13A及び図13Bに例示するように、即時発行が全く無い場合に比べて、長くなる可能性がある。しかし、それでも、少なくとも従来よりは、I/O要求A〜Fに対応するデータの読み出しのためのディスクシーク時間長を短縮化することができる。なお、図13A、図13Bにおいて、I/O最適化部27は、I/O要求Eの即時発行が決まった場合、残りのI/O要求A〜D及びFの並び替えをやり直しても良い。
【実施例3】
【0080】
以下、本発明の第三実施例について説明する。
【0081】
この第三実施例では、クエリ実行部9は、第一実施例(又は第二実施例)において、複数のデータが読み出された場合、読み出された順にタスクの実行を再開していくのではなく、データ取得処理を開始した順に、タスクの実行を再開していく。タスクの実行を再開する順序を制御するための方法として、例えば、データ取得待ち表を用いる方法がある。
【0082】
図14Aは、本発明の第三実施例におけるデータ取得待ち表の構成例を示す。
【0083】
データ取得待ち表71は、データベースサーバ1の記憶資源に記憶される情報である。データ取得待ち表71は、複数の待ち情報71R、71R、…から構成される。待ち情報71Rは、データ取得順序番号とタスクIDとで構成される。データ取得順序番号は、データ取得処理を開始する順序を表した番号である。タスクIDは、待ち情報71Rを記述したタスクのIDである。
【0084】
図14Bは、生成された子タスクが第一実施例で行う処理との第一の相違部分を示す。
【0085】
生成された子タスクは、データ取得処理を実行する前に、データ取得待ち表71に、自分に対応した待ち情報を挿入する(S61)。具体的には、当該子タスクは、自分に対応した待ち情報71Rとして、図3のS11のデータ取得処理を開始する順番であるデータ取得順序番号と、自分のタスクのIDとを、データ取得待ち表71に挿入する。
【0086】
図14Cは、生成された子タスクが第一実施例で行う処理との第二の相違部分を示す。
【0087】
当該子タスクは、データ取得処理によってデータが取得された場合、データ取得待ち表71を検索し、自タスクが最も古い待ちタスクとなるまで待ち、そうなった後、データ取得待ち表71から、S61で自分が挿入した待ち情報71Rを削除する(S62)。なお、最も古い待ちタスクになったかどうかは、データ取得待ち表71に記入されているデータ取得順序番号の中で、自分が挿入した待ち情報71R中のデータ取得順序番号が若い番号かどうかを判別することにより、特定することができる。なお、別法として、例えば、データ取得待ち表71Rが、待ち行列であって、自分が書いた待ち情報71Rが先頭アドレスになったときに、自タスクが最も古い待ちタスクであると判別しても良い。
【0088】
以上の処理により、生成された複数の子タスクは、データ取得処理によってデータ待ちとなった場合、データが取得された順に実行の再開となるのではなく、データ取得処理を開始した順に、実行の再開となる。具体的には、例えば、図15Aに例示するように、データ取得処理の開始順序と同じ順序でI/O要求A〜Fが発行された場合、その順序と違って、例えば、I/O要求Aに対応したデータAよりも先に、I/O要求B、Cの応答としてデータB、Cが取得されたとしても、データB、Cを処理するタスクB、Cの実行の再開は待ちとなり、データAが取得されてそれを処理するタスクAの実行が再開された後に、タスクB、Cの順序で実行が再開される(なお、ディスクシークイメージとしては、図15Bに例示する通りであり、例えば第一実施例と同じである)。このように、この第三実施例では、各タスクの実行を、データ取得処理の開始順序と同じ順序で再開していくことができる。
【0089】
以上、本発明の好適な幾つかの実施例を説明したが、本発明は、それらの実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【0090】
例えば、第二実施例において、I/O最適化部27は、別種の所定のキャンセルコマンドを受け付けた場合には、そのキャンセルコマンドで指定されているI/O要求、又は、スケジュール対象外キュー61Aに残っている全てのI/O要求を、スケジュール対象外キュー61Aから取り出し、取り出されたI/O要求を、スケジュール対象キュー61Bに格納してもよい。
【0091】
また、例えば、各実施例において、DBMS5の処理は、それを読込んだプロセッサによって実行することができる。具体的には、例えば、親タスクを実行するプロセッサは、データベースサーバ1の記憶資源(例えばメモリ)上に子タスクを生成し、その子タスクを読込んで実行することにより、例えば図3のS11以降の処理を実行することができる。
【0092】
また、例えば、実行タスク管理部13が、所定のタイミングで、クエリプランに基づいて、残存ステップ数(例えば、最後のOPまでに残っているOPの数)を計算し、残存ステップ数の少ないタスクの優先度を上げても良い。この場合、例えば、図3のS2、S3の処理によって、優先度が上げられたタスクを優先的に生成することができる。また、そのタスクは、自分の優先度が高いので、I/O要求を発行する場合、スケジュール対象外キュー61Aに、発行したI/O要求を挿入することができる。
【0093】
また、例えば、第二実施例において、スケジュール対象とスケジュール対象外との二種類のキューではなく、三以上の優先度の異なるキューが用意されても良い。その場合、クエリ実行部9は、I/O要求の優先度に応じた値のスケジュールフラグを決定し、その決定されたスケジュールフラグ値に応じたキューに、I/O要求を格納してもよい。
【0094】
また、例えば、第二実施例において、I/O最適化部27は、DBMS5の外に存在しても良い。具体的には、例えば、I/O最適化部27は、DBMS5とOS15との間に介在しても良い。I/O最適化部27は、DBMS5から発行された複数のI/O要求を受け付けることができる。また、I/O最適化部27は、AP3からもI/O要求をうつけても良い。I/O最適化部27は、受け付けた複数のI/O要求(発行元はDBMS5又はAP3)を、受け付けた順序と異なる順序に並び替え、並び替え後の順序でI/O要求をOS15に発行することができる。
【0095】
また、例えば、データベース管理システムは、一つのコンピュータマシン上に構築されてもよいし、複数のコンピュータマシン上に構築されても良い。具体的には、例えば、各実施例にけるDBMS5の処理は複数のコンピュータ上で並列に動作する並列DBMSにおいても同様に適用することができる。並列DBMSでは、クエリ生成部でクエリプランを生成した後、処理を複数のDBMSサーバに割り当てる。そのため、各DBMSサーバにおいて、本発明の技術を用いて、割り当てられた処理を複数のタスクを生成しながらI/O要求を並列に処理することで、問合せの実行時間の短縮を図ることが可能である。
【符号の説明】
【0096】
1…データベースサーバ 3…アプリケーションプログラム 5…データベース管理システム 7…クエリ受付部 9…クエリ実行部 11…クエリプラン生成部 12…データベースバッファ 13…実行タスク管理部 15…オペレーティングシステム 17…通信ネットワーク 19…外部記憶装置 21…データベース 23…表 25…索引 27…I/O最適化部 61A…スケジュール対象外キュー 61B…スケジュール対象キュー 63…I/O要求

【特許請求の範囲】
【請求項1】
クエリを受け付けるクエリ受付部と、
前記受け付けたクエリを実行し、その際、必要に応じて、記憶装置からデータベースのデータを読み出すためのデータ読出し要求を発行するクエリ実行部と
を備え、
前記クエリ実行部は、
動的にタスクを生成していき、生成された複数のタスクを並行して実行するようになっており、
各タスクの実行において、前記データベースのデータを必要とする都度に、そのデータを取得するためのタスクを生成し、
該生成されたタスクの実行において、必要に応じて、前記データベースからデータを読み出すための前記データ読出し要求を発行する、
データベース管理システム。
【請求項2】
前記クエリ実行部は、所定の状況にあるタスクの現存数が所定数に達している場合には、新たなタスクの生成を待ち、前記現存数が減った場合に、前記新たなタスクを生成する、
請求項1記載のデータベース管理システム。
【請求項3】
前記クエリ実行部から発行された複数個のデータ読出し要求を受け付け、受け付けた複数個のデータ読出し要求を、前記複数個のデータ読出し要求を受け付けた順序とは異なる、全体としてのデータ読出し時間長を短縮化するための順序で発行する読出し順序制御部を更に備える、
請求項1記載のデータベース管理システム。
【請求項4】
優先度の異なる複数のキューを更に備え、
前記クエリ実行部が、前記生成されたタスクの実行により、前記複数のキューのうち、所定の条件に適合する優先度に対応したキューに、前記データ読出し要求を格納し、
前記読出し順序制御部は、優先度の高いキューに格納されているデータ読出し要求ほど優先的に発行する、
請求項3記載のデータベース管理システム。
【請求項5】
前記読出し順序制御部は、所定のコマンドを受け付けた場合には、或る優先度のキューに格納されている少なくとも一つの読出し要求を別の優先度のキューに移動させる、
請求項4記載のデータベース管理システム。
【請求項6】
前記クエリ実行部は、前記受け付けたクエリの実行プランの内容、又は、前記受け付けたクエリの実行に求められる性能要件に応じて、どの優先度のキューに読出し要求を格納するかを決定する、
請求項4記載のデータベース管理システム。
【請求項7】
クエリ実行プランに基づいて残存ステップ数を計算し、前記計算された残存ステップ数の少ないタスクの優先度を上げるタスク管理部を更に備え、
前記クエリ実行部が、優先度の上がったタスクを実行することにより発行される読出し要求を、該優先度に対応するキューに格納する、
請求項4記載のデータベース管理システム。
【請求項8】
前記クエリ実行部は、生成された各タスクの実行において、前記データベースのデータの取得を待ち、該データを取得した後、データの取得待ちを開始した順序と同じ順序で、タスクの実行を再開する、
請求項1又は3記載のデータベース管理システム。
【請求項9】
クエリを受け付けるステップと、
前記受け付けたクエリを実行し、その際、必要に応じて、記憶装置からデータベースのデータを読み出すためのデータ読出し要求を発行するクエリ実行ステップと
を有し
前記クエリ実行ステップでは、
動的にタスクを生成していき、生成された複数のタスクを並行して実行し、
各タスクの実行において、前記データベースのデータを必要とする都度に、そのデータを取得するためのタスクを生成し、
該生成されたタスクの実行において、必要に応じて、前記データベースからデータを読み出すための前記データ読出し要求を発行する、
データベース管理方法。
【請求項10】
請求項1記載のデータベース管理システムと、
前記データベース管理システムから発行された複数個のデータ読出し要求を受け付け、受け付けた複数個のデータ読出し要求を、前記複数個のデータ読出し要求を受け付けた順序とは異なる、全体としてのデータ読出し時間長を短縮化するための順序で発行する読出し順序制御部と
を備えるコンピュータシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate


【公開番号】特開2011−34575(P2011−34575A)
【公開日】平成23年2月17日(2011.2.17)
【国際特許分類】
【出願番号】特願2010−214239(P2010−214239)
【出願日】平成22年9月24日(2010.9.24)
【分割の表示】特願2005−213090(P2005−213090)の分割
【原出願日】平成17年7月22日(2005.7.22)
【出願人】(000158703)
【Fターム(参考)】