(57)【特許請求の範囲】
【請求項１】
メモリを備えた計算機と、データを記憶する記憶装置と、を含む計算機システムにおいて、
前記計算機は、
前記メモリ上にバッファを割り当て、
前記バッファに格納されたデータの排他ロック制御、参照及び取得を含む動作を管理する共有ＤＢデータ管理部と、要求されたデータを取得するデータ処理部と、前記データ処理部から異なるスレッド又はプロセスにより独立に動作し前記バッファに格納されているデータを参照してデータを先読みする先読み部と、を有し、
前記共有ＤＢデータ管理部は、前記データ処理部からのデータ取得要求により、データ取得要求時処理を実行し、前記先読み部からのデータ参照要求により、前記データ取得要求時処理と異なるデータ参照要求時処理とを実行し、
前記共有ＤＢデータ管理部は、前記データ取得要求時処理において、前記データの排他ロック制御及び取得を行うことを特徴とする計算機システム。
【請求項２】
前記計算機を複数含むことを特徴とする請求項１に記載の計算機システム。
【請求項３】
前記計算機は、前記先読み部を制御する実行管理部を有し、
前記実行管理部は、実行パラメータを前記先読み部に設定し、
前記先読み部は、前記設定された実行パラメータに基づいて、先読みすることを特徴とする請求項１に記載の計算機システム。
【請求項４】
前記実行管理部は、
前記計算機のＣＰＵの利用率を取得し、
取得したＣＰＵの利用率に応じた実行パラメータを前記先読み部に設定することを特徴とする請求項３に記載の計算機システム。
【請求項５】
前記実行管理部は、
前記バッファ内のデータのロック状態を取得し、
取得したロック状態に応じた実行パラメータを前記先読み部に設定することを特徴とする請求項３に記載の計算機システム。
【請求項６】
前記先読み部は、複数のデータを並列して先読みすることを特徴とする請求項１に記載の計算機システム。
【請求項７】
計算機で実行されることによって、記憶装置に格納されているデータを管理するデータベース管理システムプログラムであって、
前記計算機のメモリ上にバッファを割当てる処理と、
前記バッファに格納されたデータの排他ロック制御、参照及び取得を含む動作を管理する処理と、
要求されたデータを取得する処理と、
前記データを取得する処理と異なるスレッド又はプロセスにより独立に動作し、前記バッファに格納されているデータを参照してデータを先読みする処理と、を前記計算機に実行させ、
前記管理する処理では、前記取得する処理からのデータ取得要求により、データ取得要求時処理を実行し、前記先読みする処理からのデータ参照要求により、前記データ取得要求時処理と異なるデータ参照要求時処理とを実行し、
前記管理する処理では、前記データ取得要求時処理において、前記データの排他ロック制御及び取得を行うことを特徴とするデータベース管理システムプログラム。
【請求項８】
さらに、前記先読みする処理に関する管理情報である先読み処理情報に実行パラメータを設定する処理と、
前記設定された実行パラメータに基づいて、データを先読みする処理と、を前記計算機に実行させることを特徴とする請求項７に記載のデータベース管理システムプログラム。
【請求項９】
さらに、前記計算機のＣＰＵの利用率を取得する処理と、
前記取得したＣＰＵの利用率に応じた実行パラメータを設定する処理と、を前記計算機に実行させることを特徴とする請求項８に記載のデータベース管理システムプログラム。
【請求項１０】
さらに、前記バッファ内のデータのロック状態を取得する処理と、
前記取得したロック状態に応じた実行パラメータを設定する処理と、を前記計算機に実行させることを特徴とする請求項８に記載のデータベース管理システムプログラム。
【請求項１１】
さらに、複数のデータを並列して先読みする処理を前記計算機に実行させることを特徴とする請求項７に記載のデータベース管理システムプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース管理システムプログラムを有する計算機を含む計算機システムに関し、特に、データベース管理システムで処理されるデータの先読み方法に関する。
【背景技術】
【０００２】
近年、計算機システムで扱われるデータ量の増大とともに、これらのデータを管理するためのソフトウェアであるデータベース管理システム（以下、ＤＢＭＳ）は極めて重要なものとなった。ＤＢＭＳにおける処理性能は記憶装置に格納されたデータへのアクセス性能と密接に関連しており、そのアクセス性能がＤＢＭＳの処理性能の決定要因となることは珍しくない。
【０００３】
記憶装置へのアクセス性能による影響を軽減しＤＢＭＳの処理性能を向上するための手法として、これから利用されるデータを計算機のメモリ等、高速アクセス可能な記憶領域にあらかじめ読み出しておく「先読み」と呼ばれる手法が存在する。先読みにおける課題はこれから利用されるデータを事前に把握する方法である。先読みに関連した技術としては、以下のものが存在する。
【０００４】
オペレーティングシステム（以下「ＯＳ」）が、プログラムから発行されたヒントを用いて計算機上のファイルキャッシュにデータを先読みする機能と、その制御方法について論じている（例えば、非特許文献１参照。）。本技術では、今後アクセスが行われるファイルとアクセス先領域に関するヒントをプログラムが発行するよう、管理者等によってプログラムが修正される。非特許文献１では、本技術をＤＢＭＳに対して適用した例として、Ｂ−Ｔｒｅｅ索引による検索処理中で検索キー値に対応するポインタにより示される領域をヒントとして与え、先読みする方法を述べている。
【０００５】
ＤＢＭＳにおける処理の実行計画である「クエリプラン」を利用した記憶装置における先読み技術を開示している（特許文献１参照。）。本技術では、クエリプランやその他ＤＢＭＳが有する管理情報を記憶装置内の先読み機能が取得する。先読み機能は、取得情報を基にＤＢＭＳが管理するデータの解析を行う。先読み機能は、その結果としてこれからアクセスされるデータを把握し、それらを記憶装置が有する高速アクセス可能な記憶領域であるキャッシュに先読みする。本技術ではＤＢＭＳが行う通常の問い合わせ処理（以下「ＤＢＭＳ主処理」）から独立して先読みが実施され、高い先読み効果が期待できる。
【特許文献１】特開２００３−１５０４１９号公報
【非特許文献１】R. H. Patterson et al, "Informed Prefetching and Caching," In proceeding of the 15th ACM Symposium on Operationg Systems Principles, pp. 79-95, Dec. 1995.
【発明の開示】
【発明が解決しようとする課題】
【０００６】
これまで説明した背景技術では、以下の点が課題となる。
【０００７】
非特許文献１に記載された技術では、ＤＢＭＳが実行するＤＢＭＳ主処理の一部としてヒントを発行する。そのため、データの排他ロック等が原因で処理が停止するとヒントの発行も停止される。その結果、先読み処理も停止してしまい、高い先読み効果を得ることができない。
【０００８】
特許文献１で開示された技術で非特許文献１の課題は解決する。ただ、特許文献１で開示された技術では先読み機能がＤＢＭＳとは独立にデータを保持・管理する。そのため、計算機システム内で同じデータが二重に保持されることになる。通常、ＤＢＭＳでは「バッファ」と呼ぶ計算機のメモリ上に確保した記憶領域に高頻度で利用されるデータを保持することにより性能を向上する手法を利用する。一般に、バッファ用に確保したメモリ量が多いほどＤＢＭＳは高い性能を発揮する。先読み機能とＤＢＭＳを同じ計算機で実行した場合、同じデータが計算機上に二重に保持されることになり、その分バッファとして利用できるメモリ量が減りＤＢＭＳの性能が低下する可能性が高い。
【０００９】
本発明の目的は、ＤＢＭＳの通常の問い合わせ処理（ＤＢＭＳ主処理）から独立して先読み機能を実施する場合に、必要とされるメモリ量を抑えることである。これによって、ＤＢＭＳが稼動する計算機上で先読み機能を動作させるときに、計算機が有するメモリ量が少ない場合でも先読み処理によって高い処理性能を得ることができるようにする。
【課題を解決するための手段】
【００１０】
本発明は、メモリを備えた計算機と、データを記憶する記憶装置と、を含む計算機システムにおいて、前記計算機は、前記メモリ上にバッファを割り当て、前記バッファに格納されたデータの排他ロック制御、参照及び取得を含む動作を管理する共有ＤＢデータ管理部と、要求されたデータを取得するデータ処理部と、前記データ処理部から異なるスレッド又はプロセスにより独立に動作し前記バッファに格納されているデータを参照してデータを先読みする先読み部と、を有し、前記共有ＤＢデータ管理部は、前記データ処理部からのデータ取得要求により、データ取得要求時処理を実行し、前記先読み部からのデータ参照要求により、前記データ取得要求時処理と異なるデータ参照要求時処理とを実行し、前記共有ＤＢデータ管理部は、前記データ取得要求時処理において、前記データの排他ロック制御及び取得を行うことを特徴とする。
【発明の効果】
【００１１】
本発明によれば、ＤＢＭＳが稼動する計算機上で先読み機能を動作させるとき、必要とされるメモリ量を削減できる。そのため、より多くのメモリをＤＢＭＳのバッファとして利用できるので、高いシステム性能を得ることができる。
【発明を実施するための最良の形態】
【００１２】
ＤＢＭＳが稼動する計算機上で、先読み部を動作させる。当該先読み部は、ＤＢＭＳ主処理を行うデータ処理部と独立して先読み処理を行う。その際、データ処理部が設定するデータへのロックの影響を先読み部が受けないようにする。そして、データ処理部及び先読み部がデータを共有することによって、計算機のメモリの利用量を抑えながら高い先読み効果を得ることができる。また、計算機の動作状況又はＤＢＭＳ主処理の動作状況等に応じて先読み部を外部から調整することによって、好適な先読み動作を実現する。
【００１３】
（第１の実施の形態）
第１の実施の形態では、一台の計算機上でＤＢＭＳが動作する。そして、当該計算機のメモリ上に割り当てられたバッファをデータ処理部及び先読み部が共有する。
【００１４】
また、第１の実施の形態では、先読み部は、ＤＢＭＳ中の一つの機能として実現される。
【００１５】
図１は、本発明の第１の実施の形態の計算機システムのブロック図である。
【００１６】
計算機システムは、ＤＢサーバ４２、ＡＰサーバ４４及び記憶装置４６を含む。
【００１７】
ＡＰサーバ４４は、ＡＰプログラムを実行することによって、ＤＢＭＳ６０に対して処理の要求を発行する計算機である。
【００１８】
ＤＢサーバ４２とＡＰサーバ４４とは、ネットワーク２４を経由して接続され、相互に通信可能である。また、ＤＢサーバ４２は、Ｉ／Ｏパス３４を経由して一台以上の記憶装置４６に接続される。
【００１９】
記憶装置４６は、ＤＢサーバ４２にデータの記憶領域を提供する。記憶装置４６は、例えば、複数のディスク装置（ＨＤＤ）にデータを記憶する。
【００２０】
ＤＢサーバ４２は、ＤＢＭＳ６０を実行する計算機である。また、ＤＢサーバ４２は、ＣＰＵ１２、メモリ１４、ＨＤＤ１６、ＣＤ−ＲＯＭドライブ１８、ネットワークＩ／Ｆ２２及びＩ／ＯパスＩ／Ｆ３２を備える。
【００２１】
ＣＰＵ１２、メモリ１４、ＨＤＤ１６、ＣＤ−ＲＯＭドライブ１８、ネットワークＩ／Ｆ２２及びＩ／ＯパスＩ／Ｆ３２は、内部バス２０で接続される。
【００２２】
ＣＰＵ１２は、メモリ１４上のプログラムを実行することによって各種処理を実行する。なお、なお、ＤＢサーバ４２は、本説明図においてＣＰＵ１２を二つ備えているが、いくつ備えていてもよい。
【００２３】
メモリ１４は、ＤＢＭＳ６０、共有管理情報６２、共有バッファ６４及びＯＳ５２を記憶する。ＯＳ５２は、ＤＢサーバ４２の全体を制御する。例えば、ＯＳ５２は、プログラム実行制御、ハードウェア制御、計算機間の通信、ＨＤＤ１６の記憶領域の管理又は記憶装置４６の記憶領域の管理等を行う。更に、本実施の形態においては、ＯＳ５２は、ＣＰＵ１２の利用率を計測し、それを他のプログラムに提供する。また、ＯＳ５２は、マルチスレッド実行モデルに対応したスレッド機能を有する。なお、本実施の形態は、スレッド機能の代りに、ＯＳ５２等が提供するマルチプロセス機能を利用してもよい。
【００２４】
ＤＢＭＳ６０は、データベース（ＤＢ）に関する処理を実施するプログラムである。なお、ＤＢサーバ４２は、複数のＤＢＭＳ６０を実行してもよい。ＤＢＭＳ６０が管理するＤＢのデータは、記憶装置４６に格納される。
【００２５】
共有管理情報６２は、図２で詳細を説明するが、ＤＢＭＳ６０の処理に関する情報である。
【００２６】
共有バッファ６４は、高頻度で利用されるデータを記憶する領域である。
【００２７】
なお、ＯＳ５２及びＤＢＭＳ６０等は、これらを記憶している可搬記憶媒体（ＣＤ−ＲＯＭ等）からＣＤ−ＲＯＭドライブ１８を用いて読み出され、ＨＤＤ１６又は記憶装置４６にインストールされる。
【００２８】
ネットワークＩ／Ｆ２２は、ネットワーク２４を介して、ＡＰサーバ４４と接続するインタフェースである。Ｉ／ＯパスＩ／Ｆ３２は、Ｉ／Ｏパス３４を介して、記憶装置４６と接続するインタフェースである。
【００２９】
ＡＰサーバ４４は、ＣＰＵ８２、メモリ８４、ＨＤＤ８６及びネットワークＩ／Ｆ８５を備える。
【００３０】
ＣＰＵ８２、メモリ８４、ＨＤＤ８６及びネットワークＩ／Ｆ８５は、内部バス８０で接続される。
【００３１】
ＣＰＵ８２は、メモリ８４上のプログラムを実行することによって各種処理を実行する。なお、なお、ＡＰサーバ４４は、本説明図においてＣＰＵ８２を二つ備えているが、いくつ備えていてもよい。
【００３２】
メモリ８４は、ＡＰプログラム７０及びＯＳ８９を記憶する。
【００３３】
ＯＤ８９は、ＡＰサーバ４４の全体を制御する。
【００３４】
ＡＰプログラム７０は、業務を実施するプログラムである。ＡＰプログラム７０は、ＤＢＭＳ６０に対してＤＢに関する処理要求（クエリ）を発行する。
【００３５】
なお、本説明図では、ＡＰプログラム７０は、ＡＰサーバ４４上で動作しているが、ＤＢサーバ４２上で動作してもよい。また、ＡＰサーバ４４は、複数のＡＰプログラム７０を実行してもよい。
【００３６】
また、本説明図では、ＡＰサーバ４４は、一台を図示しているが、複数台備えられていてもよい。また、その上で複数のＡＰプログラム７０が動作する場合も本実施例を適用可能である。
【００３７】
以下、本発明の実施の形態のＤＢＭＳ６０の処理を説明する。
【００３８】
図２は、本発明の第１の実施の形態のＤＢＭＳ６０の機能の説明図である。
【００３９】
共有管理情報６２は、スキーマ３００、処理管理情報４００、共有ＤＢデータ管理情報４５０及び先読み処理情報５００を含む。
【００４０】
スキーマ３００は、ＤＢＭＳ６０が管理するＤＢの定義等の情報であり、表定義情報、索引定義情報、オブジェクト管理情報及びファイル管理情報を含む。
【００４１】
表定義情報は、図５Ａで後述するが、ＤＢＭＳ６０が管理するＤＢで定義されている表の定義情報である。索引定義情報は、図５Ｂで後述するが、ＤＢＭＳ６０が管理するＤＢで定義されている索引の定義情報である。オブジェクト管理情報は、図５Ｃで後述するが、オブジェクトの記憶領域に関する情報である。ファイル管理情報は、図５Ｄで後述するが、ＤＢＭＳ６０が管理するＤＢのデータを記憶装置４６に格納する際に利用するファイルに関する情報である。
【００４２】
処理管理情報４００は、クエリ管理情報、トランザクション管理情報及びクエリプランを含む。
【００４３】
クエリ管理情報は、図６Ａで後述するが、ＤＢＭＳ６０が実行するクエリの管理情報である。トランザクション管理情報は、図６Ｂで後述するが、ＡＰプログラム７０からのクエリによるトランザクションの状態を管理する情報である。クエリプランは、図７で後述するが、クライアント処理部２０２が作成したクエリに対応する処理の実行計画に関する情報である。
【００４４】
共有ＤＢデータ管理情報４５０は、共有バッファ定義情報、バッファブロック管理情報、バッファグループ管理情報、ロック管理情報及びＩ／Ｏ待ち管理情報を含む。
【００４５】
共有バッファ定義情報は、図８Ａで後述するが、共有バッファ６４の記憶領域に関する情報である。バッファブロック管理情報は、図８Ｂで後述するが、共有バッファ６４内のブロックを管理する情報である。なお、ブロックは、共有バッファ６４の記憶領域の管理単位である。バッファグループ管理情報は、図８Ｃで後述するが、共有バッファ６４を分割するためにグループ化されたブロックの各グループを管理する情報である。ロック管理情報は、図８Ｄで後述するが、ページのロックを管理する情報である。Ｉ／Ｏ待ち管理情報は、図８Ｅで後述するが、Ｉ／Ｏ完了待ちのクエリを管理する情報である。
【００４６】
先読み処理情報５００は、総先読み数管理情報、先読み管理情報及び先読み要求管理情報を含む。
【００４７】
総先読み数管理情報は、図９Ａで後述するが、先読み処理で利用するスレッドの数を管理する情報及び先読み処理によって読み出したページを保持するブロックの数を管理する情報である。先読み管理情報は、図９Ｂで後述するが、クエリに対応して実行する先読み処理の管理情報である。先読み要求管理情報は、図９Ｃで後述するが、先読みＩ／Ｏを発行する処理を実行するスレッドを管理する情報である。
【００４８】
ＤＢＭＳ６０は、クライアント処理部２０２、実行管理部２０４、データ処理部２０６、先読み部２０８及び共有ＤＢデータ管理部２１０を有する。
【００４９】
また、本説明図には、それぞれの構成部が共有するデータに関するインタフェースの概略が記載されている。なお、すべての構成部は、必要に応じてスキーマ３００を参照する。
【００５０】
クライアント処理部２０２は、ＡＰプログラム７０からクエリを取得する。次に、取得したクエリに対応するクエリプラン（クエリの実行計画）を作成する。次に、作成したクエリプランを処理管理情報４００に保存する。次に、クエリの実行を実行管理部２０４に要求する。
【００５１】
クエリが実行されると、クライアント処理部２０２は、データ処理部２０６から処理結果を受領し、受領した処理結果をＡＰプログラム７０に送る。そして、クライアント処理部２０２は、実行管理部２０４にクエリの終了を通知し、当該クエリにクエリプランを処理管理情報４００から削除する。
【００５２】
実行管理部は２０４は、クライアント処理部２０２からクエリの実行要求を受ける。実行管理部２０４は、クエリの実行要求を受けると、先読み処理情報５００に必要な情報を設定する。次に、実行管理部２０４は、データ処理部２０６にクエリプランに従った処理の実行を要求する。更に、実行管理部２０４は、先読み管理部２０８に先読み処理の実行を要求する。そして、実行管理部２０４は、クライアント処理部２０２からクエリの処理の完了の通知をクライアント処理部２０２から受けると、当該クエリに対応する先読み処理の情報を先読み処理情報５００から削除する。
【００５３】
また、実行管理部２０４は、処理の実行状態及び／又はＤＢサーバ４２のＣＰＵ利用率等を監視する。そして、実行管理部２０４は、監視している処理の実行状態及び／又はＤＢサーバ４２のＣＰＵ利用率に応じて、実行パラメータを先読み処理情報５００に設定することによって、先読み部２０８の先読み処理を制御する。
【００５４】
データ処理部２０６は、処理の要求を実行管理部２０４から受けると、処理管理情報４００に含まれるクエリプランに従って処理を実行する。そして、データ処理部２０６は、処理を終了すると、処理結果をクライアント処理部２０２に送る。
【００５５】
データ処理部２０６は、データ取得要求を共有ＤＢデータ管理部２１０に送信することによって、処理を実行する際に必要なデータを取得する。このとき、データ処理部２０６は、要求したデータに対して設定すべきロックに関する情報も、共有ＤＢデータ管理部２１０に送信する。
【００５６】
また、データ処理部２０６は、取得したデータの利用が完了すると、データ利用完了報告を共有ＤＢデータ管理部２１０に送信する。つまり、データ処理部２０６は、共有バッファ６４から当該データを破棄できることを共有ＤＢデータ管理部２１０に報告する。
【００５７】
また、データ処理部２０６は、処理を完了すると、ロックの解除を共有ＤＢデータ管理部２１０に指示する。更に、データ処理部２０６は、先読み処理情報５００を適宜参照し、先読みする必要があるか否かを判定する。そして、先読みが必要であれば、先読み部２０８に先読み要求を送信する。
【００５８】
先読み部２０８は、実行管理部２０４又はデータ処理部２０６から先読み要求を受けると、先読み処理を実行する。なお、先読み部２０８は、高いＩ／Ｏ並列性を引き出すために、マルチスレッド型の実行モデルを用いて先読み処理を実行する。また、先読み部２０８は、先読み処理情報５００に基づいて、先読み処理を実行する。
【００５９】
先読み部２０８は、データ処理部２０６が実行する処理（クエリに対応する処理）から高い独立性を持って、先読み処理を実行する。なぜなら、先読み処理は、データを更新しないからである。また、先読みの効果は、Ｉ／Ｏ並列性を高めることによって、高めることができる。
【００６０】
先読み部２０８は、共有ＤＢデータ管理部２１０にデータ参照要求を送信することによって、必要なデータを取得する。なお、先読み部が送信するデータ参照要求は、データ処理部２０６が送信するデータ取得要求と異なる。
【００６１】
先読み部２０８は、取得したデータの利用を完了すると、データ参照完了報告を共有ＤＢデータ管理部２１０に送信する。
【００６２】
共用ＤＢデータ管理部２１０は、データ処理部２０６からデータ取得要求を受けると、共有バッファ６４内のデータへロックを設定する。そして、要求データが記憶されている領域の先頭アドレスをデータ処理部２０６に通知する。なお、要求データが共有バッファ６４に記憶されていない場合、共用ＤＢデータ管理部２１０は、共有バッファ６４に当該データを読み出す。
【００６３】
また、共用ＤＢデータ管理部２１０は、データ利用完了報告をデータ処理部２０６から受ける。このとき、共用ＤＢデータ管理部２１０は、データが更新されたか否かに関する情報を取得する。
【００６４】
また、共用ＤＢデータ管理部２１０は、ロックの解除指示をデータ処理部２０６から受けると、設定していたロックを解放する。そして、ロックの解放待ちをしていた処理に対して、ロックを与える。
【００６５】
共用ＤＢデータ管理部２１０は、データ参照要求を先読み部２０８から受けると、要求データが記憶される領域の先頭アドレスを先読み部２０８に通知する。この場合、共用ＤＢデータ管理部２１０は、データのロックを確認しない。
【００６６】
また、共用ＤＢデータ管理部２１０は、データ参照完了報告を先読み部２０６から受けつける。また、共用ＤＢデータ管理部２１０は、共有ＤＢデータ管理情報４５０を適宜更新する。
【００６７】
以下、本実施の形態におけるＤＢＭＳ６０のデータ記憶管理方法を説明する。
【００６８】
ＤＢＭＳ６０は、オブジェクトを「ページ」と呼ぶ単位に分割して記憶領域を管理する。なお、オブジェクトは、表又は索引である。本実施の形態では、ページの大きさは、ページを記憶するファイル毎に一定であるとする。
【００６９】
ファイルは、ページの大きさで分割される。そして、それぞれのページには、ページＩＤが付加される。なお、ページＩＤは、ページの一意な識別子であり、そのページが記憶されるファイルの識別子及び当該ファイル中での通番から構成する。つまり、データが記憶されているファイル及びデータの記憶位置は、ページＩＤによって一意に特定できる。
【００７０】
Ｂ−Ｔｒｅｅ形式索引でリーフページ内の表データへのポインタは、同様に、ページＩＤ及びページ内のデータ通番で構成されるとする。
【００７１】
データ処理部２０６及び先読み部２０８は、共有バッファ６４に記憶されているデータを利用する。共用ＤＢデータ管理部２１０は、共有バッファ６４の領域を「ブロック」と呼ぶ固定長の領域に細分化し、ブロックを単位として管理する。各ブロックには、ブロックの一意な識別子であるブロックＩＤが付加される。なお、ブロックＩＤは、例えば、ブロックの大きさを単位とし、共有バッファ６４の領域の先頭からのオフセットとする。これによって、メモリ１４上のアドレスが、ブロックＩＤによって特定できる。
【００７２】
ブロックは、複数のグループに分割される。そして、オブジェクトごとに利用するグループを定める。ブロックのグループには、グループＩＤが付加される。グループＩＤは、グループの一意な識別子である。
【００７３】
各グループでは、以下で説明するように、ＬＲＵ置換アルゴリズムに基づいて、ブロックを管理する。
【００７４】
図３は、本発明の第１の実施の形態のグループにおけるブロック管理に利用するＬＲＵ管理リストの説明図である。
【００７５】
本実施の形態のＬＲＵ管理リストは、上位ＬＲＵ管理リスト６４２と、下位ＬＲＵ管理リスト６４４とで分割されている。
【００７６】
上位ＬＲＵ管理リスト６４２は、一般的なＬＲＵ置換アルゴリズムで利用されるＬＲＵ管理リストである。また、上位ＬＲＵ管理リスト６４２は、ＭＲＵ（Ｍｏｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）端側の領域を用いる。
【００７７】
下位ＬＲＵ管理リスト６４４は、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）端側の領域を用いる。
【００７８】
データ処理部２０６からのデータ取得要求又は先読み部２０８からのデータ参照要求によって要求されたページを記憶するブロックが共有バッファ６４に存在する場合には、共用ＤＢデータ管理部２１０は、当該ブロックを利用する。一方、要求ページを記憶するブロックが共有バッファ６４に存在しない場合には、共用ＤＢデータ管理部２１０は、下位ＬＲＵ管理リスト６４４のＬＲＵ端に接続されたエントリによって管理されるブロックに、要求ページを新たに記憶する。
【００７９】
また、共用ＤＢデータ管理部２１０は、データ処理部２０６からデータ取得要求を受けると、要求ページを記憶するブロックの管理情報を上位ＬＲＵ管理リスト６４２のＭＲＵ端に繋ぎ直す。
【００８０】
一方、共用ＤＢデータ管理部２１０は、先読み部２０８からデータ参照要求を受けると、以下の処理を行う。まず、共用ＤＢデータ管理部２１０は、要求ページを記憶するブロックの管理情報が上位ＬＲＵ管理リスト６４２又は下位ＬＲＵ管理リスト６４４のいずれに存在するかを判定する。なお、共用ＤＢデータ管理部２１０は、要求ページを記憶するブロックの管理情報が上位ＬＲＵ管理リスト６４２及び下位ＬＲＵ管理リスト６４４のいずれにも存在しない場合、下位ＬＲＵ管理リスト６４４に存在したと判定する。
【００８１】
管理情報が上位ＬＲＵ管理リスト６４２に存在する場合、共用ＤＢデータ管理部２１０は、ＬＲＵ管理リストを変更しない。一方、管理情報が下位ＬＲＵ管理リスト６４４に存在する場合、共用ＤＢデータ管理部２１０は、要求ページを記憶するブロックの管理情報を下位ＬＲＵ管理リスト６４４のＭＲＵ端に繋ぎ直す。
【００８２】
これによって、共用ＤＢデータ管理部２１０は、先読み部２０８が参照するデータを共有バッファ６４に過度に記憶することを防ぐ。
【００８３】
次に、クエリプラン及び先読み処理の概略を説明する。
【００８４】
図４は、本発明の第１の実施の形態のＤＢＭＳ６０におけるクエリプランの説明図である。
【００８５】
クライアント処理部２０２は、ＡＰプログラム７０からクエリ６２２を受信する。すると、受信したクエリ６２２から、木構造のクエリプラン６２４を作成する。
【００８６】
クエリプラン６２４は、ノード６２６Ａ〜６２６Ｉ及び枝から構成される。ノード６２６Ａ〜６２６Ｉは、クエリプラン６２４における処理ステップを示す。枝は、処理ステップ及びデータの依存関係を示す。
【００８７】
それぞれのノード６２６Ａ〜６２６Ｉでは、索引参照、索引による表データアクセス、表データスキャン、フィルタ処理、結合演算、ソート、集計演算又は集合演算等が実行される。なお、フィルタ処理は、取得した表データを、条件で絞り込む処理である。
【００８８】
データ処理部２０６は、事前に与えられたルールに従ってクエリプランを解釈し、ノード６２６Ａ〜６２６Ｉに対応する処理ステップを実行する。本実施の形態では、データ処理部２０６は、それぞれの処理ステップをデータ単位ごとに実行する。なお、データ単位は、実行する処理ステップの内容によって決まる。また、データ処理部２０６は、必要であれば複数の処理ステップを交互に実施してもよい。
【００８９】
本実施の形態では、Ｂ−Ｔｒｅｅ索引参照処理（ノード６２２Ａ及びノード６２６Ｄ）及びその処理に続く索引による表データアクセス処理（ノード６２６Ｂ及び６２６Ｅ）を先読みの対象とする。
【００９０】
このとき、先読み部２０８は、クエリプランに含まれる検索条件、データ処理部２０６からの先読み要求で指示されたデータ値及び／又は過去の先読み処理によって把握したデータ値等から、索引の検索キー値を把握する。そして、索引の検索キー値を把握できた場合、把握した検索キー値に対応する索引データや表データを先読みする。
【００９１】
図５Ａは、本発明の第１の実施の形態のスキーマ３００に含まれる表定義情報３１０の構成図である。
【００９２】
表定義情報３１０は、オブジェクトＩＤ３１２及び表定義３１４を含む。
【００９３】
オブジェクトＩＤ３１２は、ＤＢＭＳ６０が管理するＤＢで定義されている表の一意な識別子である。表定義３１４は、当該表の定義情報である。
【００９４】
図５Ｂは、本発明の第１の実施の形態のスキーマ３００に含まれる索引定義情報３２０の構成図である。
【００９５】
オブジェクト管理情報３３０は、オブジェクトＩＤ３２２及び索引定義３２４を含む。
【００９６】
オブジェクトＩＤ３２２は、ＤＢＭＳ６０が管理するＤＢで定義されている索引の一意な識別子である。索引定義３２４は、当該索引の定義情報である。
【００９７】
図５Ｃは、本発明の第１の実施の形態のスキーマ３００に含まれるオブジェクト管理情報３３０の構成図である。
【００９８】
オブジェクト管理情報３３０は、オブジェクトＩＤ３３２、グループＩＤ３３４、対応ページＩＤ３３８及び索引ルートページＩＤ３４２を含む。
【００９９】
オブジェクトＩＤ３３２は、オブジェクトの一意な識別子である。グループＩＤ３３４は、当該オブジェクトを記憶しているブロックが属するグループの一意な識別子である。対応ページＩＤ３３８は、当該オブジェクトを記憶しているページの一意な識別子である。
【０１００】
索引ルートページ３４２は、当該オブジェクトのルートデータを記憶しているページの一意な識別子である。なお、索引ルートページ３４２は、当該オブジェクトがＢ−Ｔｒｅｅ形式索引である場合にのみ値が格納される。
【０１０１】
図５Ｄは、本発明の第１の実施の形態のスキーマ３００に含まれるファイル管理情報３５０の構成図である。
【０１０２】
ファイル管理情報３５０は、ファイルＩＤ３５２、ページサイズ３５４、ページ数３５６及びファイルパス３５８を含む。
【０１０３】
ファイルＩＤ３５２は、ＤＢＭＳ６０がファイルを一意に識別する識別子である。ページサイズ３５４は、当該ファイルに記憶されるページの大きさである。ページ数３５６は、当該ファイルに記憶されるページの数である。ファイルパス３５８は、ＯＳ５２が当該ファイルを一意に識別する識別子である。
【０１０４】
図６Ａは、本発明の第１の実施の形態の処理管理情報４００に含まれるクエリ管理情報４１０の構成図である。
【０１０５】
クエリ管理情報４１０は、クエリＩＤ４１２、トランザクションＩＤ４１４、処理優先度４１６、処理ステータス４１８、対象リソース４２２及びクエリプラン４２４を含む。
【０１０６】
クエリＩＤ４１２は、クエリの一意な識別子である。本説明図では、クエリＩＤ４１２は、クライアントＩＤ及びＡＰプログラムがクエリに付加した通番で構成される。クライアントＩＤは、ＤＢＭＳ６０がＡＰプログラム７０を一意に識別する識別子である。
【０１０７】
トランザクションＩＤ４１４は、当該クエリが属するトランザクションの識別子である。処理優先度４１６は、当該クエリを実行する際の処理の優先度を示す。
【０１０８】
処理ステータス４１８は、当該クエリの現在の実行状態を示す。
【０１０９】
処理ステータス４１８に「ロック設定待ち」が格納されている場合、対象リソース４２２には、値が格納される。対象リソース４２２は、ロック設定待ちの対象となるリソースを示す。
【０１１０】
クエリプラン４２４は、当該クエリに対応するクエリプランを示す。
【０１１１】
図６Ｂは、本発明の第１の実施の形態の処理管理情報４００に含まれるトランザクション管理情報４３０の構成図である。
【０１１２】
トランザクション管理情報４３０は、クライアントＩＤ４３２及びトランザクションＩＤ４３４を含む。
【０１１３】
クライアントＩＤ４３２は、ＡＰプログラム７０の一意な識別子である。トランザクションＩＤ４３４は、当該ＡＰプログラム７０からのクエリによるトランザクションの一意な識別子である。なお、トランザクションが進行中の場合のみ、トランザクションＩＤ４３４には値が格納される。よって、トランザクションが進行中でない場合には、トランザクションＩＤ４３４には値が格納されない。
【０１１４】
図７は、本発明の第１の実施の形態の処理管理情報４００に含まれるクエリプラン６００の構成図である。
【０１１５】
クエリプラン６００は、処理開始ステップＩＤ６０２、処理終了ステップＩＤ６０４、ステップＩＤ６０６、親ステップＩＤ６０８、子ステップＩＤ６１２、処理種別６１４及び処理詳細６１６を含む。
【０１１６】
処理開始ステップＩＤ６０２は、クエリプランにおいて最初に実行される処理ステップの一意な識別子である。処理終了ステップＩＤ６０４は、クエリプランにおいて最後に実行される処理ステップの一意な識別子である。
【０１１７】
ステップＩＤ６０６は、処理ステップの一意な識別子である。
【０１１８】
親ステップＩＤ６０８は、当該処理ステップの親ステップの識別子である。なお、親ステップは、処理ステップ（子ステップ）の処理結果を利用する処理ステップである。子ステップＩＤ６１２は、当該処理ステップの子ステップの識別子である。
【０１１９】
処理種別６１４は、当該処理ステップで実行される処理の内容を示す。
【０１２０】
処理詳細６１６は、当該処理ステップで実行される処理の詳細を示す。なお、処理種別６１４に「索引参照」が格納されている場合、処理詳細６１６には、参照する索引のオブジェクトＩＤ及び索引の参照条件が格納される。また、処理種別６１４に「索引による表データアクセス」が格納されている場合、処理詳細６１６には、アクセス先の表のオブジェクトＩＤが格納される。また、処理種別６１４に「ネストループ結合」が格納されている場合、処理詳細６１６には、結合条件が格納される。
【０１２１】
図８Ａは、本発明の第１の実施の形態の共有ＤＢデータ管理情報４５０に含まれる共有バッファ定義情報４５１の構成図である。
【０１２２】
共有バッファ定義情報４５１は、バッファ領域情報４５２及びバッファブロックサイズ４５４を含む。
【０１２３】
バッファ領域情報４５２は、メモリ１４上の共有バッファ６４の記憶領域に関する情報である。バッファ領域情報４５２は、共有バッファ６４の先頭アドレス及び共有バッファ６４のサイズを含む。バッファブロックサイズ４５４は、共有バッファ６４内のブロックのサイズである。
【０１２４】
図８Ｂは、本発明の第１の実施の形態の共有ＤＢデータ管理情報４５０に含まれるバッファブロック管理情報４６０の構成図である。
【０１２５】
バッファブロック管理情報４６０は、ブロックＩＤ４６２、ページＩＤ４６３、状態４６４、リンク情報４６６、利用数４６８及び先読み対応クエリＩＤ４６９を含む。
【０１２６】
ブロックＩＤ４６２は、ブロックの一意な識別子である。ページＩＤ４６３は、当該ブロックに現在記憶されているページの一意な識別子である。
【０１２７】
状態４６４は、当該ブロックに記憶されているデータの状態である。例えば、当該ブロックに記憶されているデータと記憶装置４６に記憶されているデータとが一致している場合、状態４６４には「Ｃｌｅａｎ」が格納される。また、当該ブロックに記憶されているデータと記憶装置４６に記憶されているデータとが一致していない場合、状態４６４には「Ｄｉｒｔｙ」が格納される。また、当該ブロックに記憶装置４６からデータを読み出し中である場合、状態４６４には「Ｒｅａｄｉｎｇ」が格納される。また、当該ブロックに有効データが記憶されていない場合、状態４６４には「Ｉｎｖａｌｉｄ」が格納される。
【０１２８】
リンク情報４６６は、管理リスト及びポインタを含む。管理リストは、当該ブロックが属する管理リストの一意な識別子である。ポインタは、当該ブロックの管理リスト中での位置を示す。例えば、ポインタは、管理リストにおいて当該ブロックの直前及び直後に位置するブロックの一意な識別子である。
【０１２９】
利用数４６８は、当該ブロックに記憶されているページを利用している処理の数である。
【０１３０】
先読み対応クエリＩＤ４６９は、当該ブロックに記憶されているデータに関する先読み処理に対応するクエリの一意な識別子である。なお、先読み対応クエリＩＤ４６９には、当該ブロックに記憶されているデータが先読み処理によって読み出された場合にのみ値が格納される。
【０１３１】
図８Ｃは、本発明の第１の実施の形態の共有ＤＢデータ管理情報４５０に含まれるバッファグループ管理情報４７０の構成図である。
【０１３２】
バッファグループ管理情報４７０は、グループＩＤ４７２、上位ＬＲＵ管理リスト情報４７４及び下位ＬＲＵ管理リスト情報４７６を含む。
【０１３３】
グループＩＤ４７２は、ブロックが属するグループの一意な識別子である。
【０１３４】
上位ＬＲＵ管理リスト情報４７４は、当該グループに対応する上位ＬＲＵ管理リスト６４２を管理する情報である。上位ＬＲＵ管理リスト情報４７４は、ブロック数、先頭ブロックＩＤ及び終端ブロックＩＤを含む。ブロック数は、当該グループに対応する上位ＬＲＵ管理リスト６４２に属するブロックの数である。先頭ブロックＩＤは、当該グループに属するブロックの中で、上位ＬＲＵ管理管理リスト６４２の先頭に位置するブロックの一意な識別子である。終端ブロックＩＤは、当該グループに属するブロックの中で、上位ＬＲＵ管理管理リスト６４２の終端に位置するブロックの一意な識別子である。
【０１３５】
下位ＬＲＵ管理リスト情報４７６は、当該グループに対応する下位ＬＲＵ管理リスト６４４を管理する情報である。下位ＬＲＵ管理リスト情報４７６は、ブロック数、先頭ブロックＩＤ及び終端ブロックＩＤを含む。ブロック数は、当該グループに対応する下位ＬＲＵ管理リスト６４４に属するブロックの数である。先頭ブロックＩＤは、当該グループに属するブロックの中で、下位ＬＲＵ管理管理リスト６４４の先頭に位置するブロックの一意な識別子である。終端ブロックＩＤは、当該グループに属するブロックの中で、下位ＬＲＵ管理管理リスト６４４の終端に位置するブロックの一意な識別子である。
【０１３６】
図８Ｄは、本発明の第１の実施の形態の共有ＤＢデータ管理情報４５０に含まれるロック管理情報４８０の構成図である。
【０１３７】
ロック管理情報４８０は、ページＩＤ４８２、ロック種別４８４、ロック取得トランザクションＩＤ４８６及びロック待ちリスト４８８を含む。
【０１３８】
ページＩＤ４８２は、ロックの対象となるページの一意な識別子である。ロック種別４８４は、当該ページに設定するロックの種別である。具体的には、ロック種別４８４には、共有ロックを示す「共有」又は排他ロックを示す「排他」等が格納される。
【０１３９】
ロック取得トランザクションＩＤ４８６は、当該ページに対してロックを取得しているトランザクションの一意な識別子である。
【０１４０】
ロック待ちリスト４８８には、クエリＩＤ及びロック種別が格納される。当該クエリＩＤは、ロックの解放を待つクエリの一意な識別子である。ロック種別は、当該クエリが設定するロックの種別である。なお、当該クエリがロックを設定しない場合、ロック種別には「ロックなし」が格納される。また、複数のクエリがロックの解放を待っている場合、ロック待ちリスト４８８には、ロックの解放を待つクエリの数と同数のクエリＩＤ及びロック種別が格納される。
【０１４１】
なお、本実施の形態では、ロックをページ単位で管理しているが、他の粒度で管理してもよい。
【０１４２】
図８Ｅは、本発明の第１の実施の形態の共有ＤＢデータ管理情報４５０に含まれるＩ／Ｏ待ち管理情報４９０の構成図である。
【０１４３】
Ｉ／Ｏ待ち管理情報４９０は、ブロックＩＤ４９２及びＩ／Ｏ待ちリスト４９４を含む。
【０１４４】
ブロックＩＤ４９２は、Ｉ／Ｏ中のブロックの一意な識別子である。
【０１４５】
Ｉ／Ｏ待ちリスト４９４は、当該ブロックのＩ／Ｏの完了を待っている処理の識別子である。具体的には、Ｉ／Ｏ待ちリスト４９４には、クエリＩＤ又は先読み処理の識別子が格納される。なお、当該ブロックのＩ／Ｏの完了を待っている処理が複数ある場合、Ｉ／Ｏ待ちリスト４９４には、当該完了待ちの処理の数と同数の識別子が格納される。
【０１４６】
図９Ａは、本発明の第１の実施の形態の先読み処理情報５００に含まれる総先読み数管理情報５０１の構成図である。
【０１４７】
総先読み数管理情報５０１は、総先読みスレッド数５０２及び総先読みブロック数５０４を含む。
【０１４８】
総先読みスレッド数５０２は、先読み処理で利用するスレッドの総数を管理する情報である。総先読みスレッド数５０２は、最大値及び割当値を含む。最大値は、先読み処理で利用可能なスレッドの総数の上限である。割当数は、先読み処理に現時点で割り当てられているスレッドの総数である。
【０１４９】
総先読みブロック数５０４は、先読み処理によって読み出されたページを保持するブロックの数を管理する情報である。総読みブロック数５０４は、最大値及び割当値を含む。最大値は、先読み処理によって読み出されたページを保持するブロックの数の上限である。割当値は、先読み処理に現時点で割り当てられているブロックの総数である。
【０１５０】
図９Ｂは、本発明の第１の実施の形態の先読み処理情報５００に含まれる先読み管理情報５１０の構成図である。
【０１５１】
先読み管理情報５１０は、クエリＩＤ５１２、先読みスレッド数５１４、先読みブロック数５１６、実行確認値５１８、Ｉ／Ｏ発行間隔管理情報５２２、データ処理先読み要求作成設定５２６及びページ数統計５２８を含む。
【０１５２】
クエリＩＤ５１２は、先読み処理の対象となるクエリの一意な識別子である。
【０１５３】
先読みスレッド数５１４は、最大スレッド数及び現利用スレッド数を含む。最大スレッド数は、当該クエリに対応する先読み処理に対して割り当てられたスレッドの総数である。現利用スレッド数は、当該クエリに対応する先読み処理で現在利用されているスレッドの総数である。
【０１５４】
先読みブロック数５１６は、最大ブロック数及び先読み済ブロック数を含む。最大ブロック数は、当該クエリに対応する先読み処理に対して割当てられたブロックの総数である。先読み済ブロック数は、当該クエリに対応する先読み処理で実際に先読みされたページを保持するブロックの総数である。
【０１５５】
実行確認値５１８は、当該クエリに対応する先読み処理の実行制御に利用する値である。なお、実行確認値５１８については後述する。
【０１５６】
Ｉ／Ｏ発行間隔管理情報５２２は、優先度が低い処理における先読み処理向けのＩ／Ｏ発行間隔を一定値以上にする制御で利用する管理情報である。Ｉ／Ｏ発行間隔管理情報５２２は、設定下限値及びタイムスタンを含む。設定下限値は、設定されるＩ／Ｏ発行間隔の下限値である。タイムスタンプは、当該クエリに対応する先読み処理によって最新のＩ／Ｏが発行された時刻である。
【０１５７】
データ処理先読み要求設定５２６は、データ処理部２０６が当該クエリを処理している最中に作成する先読み要求に関する情報である。データ処理先読み要求設定５２６は、作成要否情報、ステップＩＤ及び参照条件を含む。
【０１５８】
作成要否情報は、データ処理部２０６が先読み要求を作成するか否かを示す。具体的には、データ処理部２０６が先読み要求を作成する場合、作成要否情報には「Ｙｅｓ」が格納される。また、データ処理部２０６が先読み要求を作成しない場合、作成要否情報には「Ｎｏ」が格納される。また、データ処理部２０６が先読み要求の作成を現在中断している場合、作成要否情報には「Ｓｔｏｐ」が格納される。
【０１５９】
ステップＩＤは、データ処理部２０６が先読み要求を作成する処理ステップの一意な識別子である。なお、作成要否情報が「Ｙｅｓ」又は「Ｓｔｏｐ」の場合のみ、ステップＩＤ及び参照条件に値が格納される。
【０１６０】
ページ数統計５２８は、当該クエリに対応する先読みの効果を判断するための統計値である。ページ数統計５２８は、処理利用数及び先読みヒット数を含む。処理利用数は、当該クエリに対応して出されたデータ取得要求の総数である。ヒット数は、当該クエリに対応して出されたデータ取得要求で要求されたデータが、先読みされたデータにヒットした回数である。
【０１６１】
図９Ｃは、本発明の第１の実施の形態の先読み処理情報５００に含まれる先読み要求管理情報５４０の構成図である。
【０１６２】
先読み要求管理情報５４０は、クエリＩＤ５４１、ステップＩＤ５４３、実行確認値５４５、ページＩＤ５４９、ページ内オフセット５４２、参照条件５４４、リスト用ポインタ５４８及び待ちリスト管理情報５５２を含む。
【０１６３】
先読み要求管理情報５４０は、先読みＩ／Ｏを発行する処理を実行するスレッドに対応するクエリの一意な識別子である。ステップＩＤ５４３は、当該クエリに対応する処理ステップの一意な識別子である。
【０１６４】
実行確認値５４５は、当該クエリに対応する先読み処理の実行制御に利用する値である。
【０１６５】
ページＩＤ５４９は、ページの一意な識別子である。当該ページに表のデータが記憶されている場合、ページ内データＩＤ５４９には値が格納される。ページ内データＩＤ５４９は、当該ページ内における先読み対象となるデータの一意な識別子である。
【０１６６】
参照条件５４４には、当該先読み処理及びその結果取得した表データから更に実行される先読み処理における索引の既知の検索条件が格納される。
【０１６７】
リスト用ポインタ５４８には、当該エントリの直前及び直後に位置するエントリへのポインタが格納される。
【０１６８】
待ちリスト管理情報５５２には、処理実行待ち状態にある先頭エントリ及び終端エントリへのポインタが格納される。
【０１６９】
なお、先読み要求管理情報５４０に新規エントリを追加する場合、当該エントリは、待ちリストの終端に接続される。
【０１７０】
以下、本実施の形態の処理について説明する。
【０１７１】
図１０は、本発明の第１の実施の形態のＤＢＭＳ６０のクエリ処理のフローチャートである。
【０１７２】
ＤＢＭＳ６０は、ＡＰプログラム７０からクエリを受信すると、クエリ処理を開始する（１１０１）。
【０１７３】
クライアント処理部２０２は、クエリの受信時に、当該クエリの送信元のＡＰプログラム７０のクライアントＩＤを把握する。また、クライアント処理部２０２は、クエリの受信と同時に、当該クエリの処理優先度をＡＰプログラム７０から取得する。なお、処理優先度が取得できない場合、クライアント処理部２０２は、予め設定された処理優先度として扱う。なお、処理優先度は、クエリ中にヒントとして与えられてもよい。
【０１７４】
次に、クライアント処理部２０２は、受信したクエリに基づいて、クエリプラン６００を作成する（１１０２）。また、トランザクション管理情報４３０を参照することによって、取得したクライアントＩＤに対応するトランザクションＩＤ４３４が設定されているか否かを確認する。
【０１７５】
そして、トランザクションＩＤ４３４が設定されていない場合、トランザクションＩＤを新規に設定する。
【０１７６】
次に、クライアント処理部２０２は、クエリ管理情報４１０に新規エントリを作成する。その際、把握したクライアントＩＤ及び受信したクエリに付加されている通番を、クエリＩＤとする。次に、当該クエリＩＤを、新規エントリのクエリＩＤ４１２に格納する。次に、把握したクライアントＩＤとトランザクション管理情報４３０のクライアントＩＤ４３４とが一致するエントリを、トランザクション管理情報４３０から選択する。次に、選択したエントリから、トランザクションＩＤ４３４を抽出する。次に、抽出したトランザクションＩＤ４３４を、新規エントリのトランザクションＩＤ４１４に格納する。
【０１７７】
次に、ＡＰプログラム７０から取得した処理優先度を、新規エントリの処理優先度４１６に格納する。次に、新規エントリの処理実行ステータス４１８に「実行中」を格納する。次に、新規エントリの対象リソース４２２に無効値を格納する。
【０１７８】
次に、クライアント処理部２０２は、クエリ処理実行要求を実行管理部２０４に送信する。クエリ処理実行要求は、新規エントリに格納したクエリＩＤを含む。
【０１７９】
実行管理部２０４は、クエリ処理実行要求を受信すると、先読み管理情報設定処理を行う（１１０３）。なお、先読み管理情報設定処理は、図１１で詳細を説明する。
【０１８０】
また、実行管理部２０４は、先読み管理情報設定処理において先読み要求管理情報５４０に新規エントリを追加したとき、先読み処理管理ループ処理がスリープ状態にあるか否かを判定する。そして、スリープ状態にある場合、先読み処理管理ループ処理を起こす。なお、先読み処理管理ループ処理は、図１５で詳細を説明する。
【０１８１】
次に、実行管理部２０４は、受信したクエリ処理実行要求に含まれるクエリＩＤをデータ処理部２０６に通知し、当該クエリＩＤに対応するクエリの実行を要求する。
【０１８２】
データ処理部２０６は、クエリの実行を要求されると、データ処理を実行する（１１０４）。なお、データ処理は、図１２で詳細を説明する。
【０１８３】
データ処理部２０６は、データ処理を完了すると、トランザクションの状態を確認する。具体的には、コミット及びロールバックを実行したか否かを確認する。
【０１８４】
コミット及びロールバックを実行した場合、データ処理部２０６は、トランザクションが完了したと判断して以下の処理を実行する。
【０１８５】
まず、データ処理部２０６は、クエリ管理情報４１０を参照することによって、トランザクションＩＤ４１４を把握する。次に、データ処理部２０６は、把握したトランザクションＩＤ４１４に対応するトランザクションが取得したロックの解放要求を共用ＤＢデータ管理部２１０に送信する。なお、ロック解放要求には、データ処理部２０６が把握したトランザクションＩＤ４１４を含む。
【０１８６】
共用ＤＢデータ管理部２１０は、ロック解放要求を受信すると、ロックを解放する（１１０５）。具体的には、ロック解放要求に含まれるトランザクションＩＤとロック管理情報４８０のロック取得トランザクションＩＤ４８６とが一致するすべてのエントリ（対象エントリ）を、ロック管理情報４８０から把握する。
【０１８７】
次に、それぞれの対象エントリのロック待ちリスト４８８から、先頭の値を抽出する。次に、抽出した値に含まれるクエリＩＤに対応するクエリを、次にロックを取得するクエリとする。そして、抽出した値に基いて、対象エントリのロック種別４８４及びロック取得トランザクションＩＤ４８６を設定する。
【０１８８】
その後、次にロックを取得するクエリを再開させる。このとき、再開されたクエリに対応するエントリを、クエリ管理情報４１０から選択する。次に、選択したエントリの処理ステータス４１８に「実行中」を格納する。次にに、選択した対象リソース４２２に、無効値を格納する。
【０１８９】
なお、対象エントリのロック待ちリスト４８８に値が格納されていない場合、当該エントリを、ロック管理情報４８０から削除する。
【０１９０】
データ処理部２０６は、処理対象のクエリのクエリＩＤ及び処理結果をクライアント処理部２０２に送る。
【０１９１】
すると、クライアント処理部２０２は、受け取った処理結果をＡＰプログラム７０に送信する（１１０６）。
【０１９２】
次に、クライアント処理部２０２は、処理が完了したクエリのクエリＩＤとクエリ管理情報４１０のクエリＩＤ４１２とが一致するエントリを、クエリ管理情報４１０から削除する。
【０１９３】
また、クエリの処理完了によってトランザクションが完了した場合、当該ＡＰプログラム７０のクライアントＩＤとトランザクション管理情報４３０のクライアントＩＤ４３２とが一致するエントリを、トランザクション管理情報４３０から選択する。次に、選択したエントリのトランザクションＩＤ４３４に、無効値を格納する。
【０１９４】
次に、クライアント処理部２０２は、クエリの終了報告を実行管理部２０４に送信する。クエリの終了報告は、処理が終了したクエリのクエリＩＤを含む。
【０１９５】
すると、実行管理部２０４は、受信した終了報告に含まれるクエリＩＤと先読み管理情報５１０のクエリＩＤ５１２とが一致するエントリを、先読み管理情報５１０から削除する（１１０７）。
【０１９６】
そして、クエリ処理を終了する（１１０８）。
【０１９７】
図１１は、本発明の第１の実施の形態の実行管理部２０４の先読み管理情報設定処理のフローチャートである。
【０１９８】
なお、先読み管理情報設定処理は、クエリ処理（図１０）のステップ１１０３で実行される。
【０１９９】
実行管理部２０４は、クエリ処理実行要求を受信すると、先読み管理情報設定処理を開始する（２１０１）。なお、クエリ処理実行要求は、新規エントリに格納したクエリＩＤを含む。
【０２００】
まず、先読み管理情報の初期化を行う（２１０２）。受信したクエリ処理実行要求に含まれるクエリＩＤとクエリ管理情報４１０のクエリＩＤ４１２とが一致するエントリを、クエリ管理情報４１０から選択する。次に、選択したエントリから、処理優先度４１６を抽出することによって、指定されたクエリの処理優先度４１６を把握する。
【０２０１】
次に、先読み管理情報５１０に、新規エントリを追加する。次に、受信したクエリ処理実行要求に含まれるクエリＩＤを、新規エントリのクエリＩＤ５１２に格納する。
【０２０２】
次に、抽出した処理優先度４１６から定まる規定値を、先読みスレッド数５１４の最大スレッド数に格納する。次に、先読みスレッド数５１４の現利用スレッド数に、初期値を格納する。
【０２０３】
次に、抽出した処理優先度４１６から定まる規定値を、先読みブロック数５１６の最大ブロック数に格納する。次に、先読みブロック数５１６の現利用ブロック数に、初期値を格納する。
【０２０４】
次に、ランダム値を、新規エントリの実行確認値５１８に格納する。次に、抽出した処理優先度４１６から定まる規定値を、Ｉ／Ｏ発行間隔管理情報５２２の設定下限値に格納する。また、Ｉ／Ｏ発行間隔管理情報５２２のタイムスタンプには無効値を格納する。
【０２０５】
次に、ページ数統計５２８に初期値を格納する。
【０２０６】
そして、新規割当てに対応して、総先読みスレッド数５０２の割当値及び総先読みブロック数５０４の割当て値を更新する。このとき、更新した割当値が最大値を超えると、補正処理を実行する（２１０３）。
【０２０７】
具体的には、クエリ管理情報４１０の処理優先度４１６を参照し、処理対象のクエリより処理優先度４１６が低いクエリのクエリＩＤ４１２を把握する。次に、把握したクエリＩＤ４１２と先読み管理情報５１０のクエリＩＤ５１２とが一致するエントリを、先読み管理情報５１０から選択する。次に、選択したエントリの先読みスレッド数５１４の最大値及び先読みブロック数５１６の最大値から、所定の値を減ずる。
【０２０８】
次に、総先読みスレッド数５０２の割当値及び総先読みブロック数５０４の割当値を更新する。そして、更新した割当値が最大値を下回るまでこの補正処理を繰り返す。
【０２０９】
次に、クエリ管理情報４１０を参照することによって、クエリプランを把握する。次に、クエリプランの処理ステップから、索引参照処理を行う処理ステップを選択する。次に、選択した処理ステップから、索引の参照条件の値が全て既知の処理ステップを把握する（２１０４）。そして、このような処理ステップを一つでも把握した場合には、ステップ２１０５に進む。一方、一つも把握できない場合には、そのままステップ２１０７に進む。
【０２１０】
次に、把握した処理ステップを起点として、連続して先読み処理が可能な処理ステップを把握し、グループ化する（２１０５）。
【０２１１】
ここで、連続して先読み処理が可能な処理ステップとは、ここで把握した処理ステップ以降で取得する表、索引のデータ又はクエリプラン中の設定値に基いて、実行可能な処理ステップである。また、当該処理ステップは、索引参照処理、表データアクセス処理、フィルタ処理又はネストループ結合演算処理を実行する。
【０２１２】
次に、先読み処理を起動するため、それぞれのグループごとに、先読み要求管理情報５４０にエントリを確保する。そして、確保したエントリに、値を設定する（２１０６）。
【０２１３】
具体的には、受信したクエリ処理実行要求に含まれるクエリＩＤを、確保したエントリのクエリＩＤ５４１に格納する。次に、当該グループで一番最初に実施される処理ステップのステップＩＤを、確保したエントリのステップＩＤ５４３に格納する。次に、ステップ２１０２で先読み管理情報５１０の実行確認値５１８に格納した値を、確保したエントリの実行確認値５４５に格納する。
【０２１４】
次に、当該グループで実行される索引参照処理の参照条件値に関する情報を、確保したエントリの参照条件５４４に格納する。なお、参照条件値が既知の場合には、既知の値を参照条件５４４に格納し、参照条件値が未知の場合には、どの表のどの属性から値を取得するかに関する情報を、参照条件５４４に格納する。
【０２１５】
次に、ステップ２１０５で設定したグループに属さない索引参照処理を実行する処理ステップを把握する（２１０７）。なお、ステップ２１０４において索引の参照条件の値が全て既知の処理ステップを一つも把握できなかった場合には、すべての処理ステップがグループに属さないものとする。
【０２１６】
そして、グループに属さない索引参照処理を実行する処理ステップが存在するか否かを判定する。そして、当該処理ステップが存在する場合には、ステップ２１０８に進む。一方、当該処理ステップが存在しない場合には、ステップ２１２１に進む。
【０２１７】
次に、先読み管理情報５１０のデータ処理作成要求作成設定５２６の作成要否に「Ｙｅｓ」を格納する（２１０８）。
【０２１８】
次に、ステップ２１０５と同様に、把握した処理ステップを起点として連続して先読み処理が可能な処理ステップを把握し、グループ化する（２１０９）。なお、ステップ２１０５で作成したグループに既に属する処理ステップは、ここでは先読み処理が不可能な処理ステップとして扱う。
【０２１９】
次に、それぞれのグループごとに、一番最初に実行される処理ステップを特定する。次に、特定した処理ステップのステップＩＤを、先読み管理情報５１０のデータ処理先読み要求作成設定５２６のステップＩＤに格納する。
【０２２０】
次に、ステップ２１０６と同様に、そのグループで実施される索引参照処理の参照条件値に関する情報を、先読み管理情報５１０のデータ処理先読み要求作成設定５２６の参照条件に格納する（２１１０）。なお、参照条件値が既知の場合には、既知の値をデータ処理先読み要求作成設定５２６の参照条件に格納し、参照条件値が未知の場合には、どの表のどの属性から値を取得するかに関する情報を、データ処理先読み要求作成設定５２６の参照条件に格納する。そして、先読み管理情報設定処理を終了する（２１１１）。
【０２２１】
一方、グループに属さない索引参照処理を実行する処理ステップが存在しないと判定すると、先読み管理情報５１０のデータ処理作成要求作成設定５２６の作成要否に、「Ｎｏ」を格納する（２１２１）。そして、実行管理部２０４は、先読み管理情報設定処理を終了する（２１１１）。
【０２２２】
図１２は、本発明の第１の実施の形態のデータ処理部２０６のデータ処理のフローチャートである。
【０２２３】
なお、データ処理は、クエリ処理（図１０）のステップ１１０４で実行される。
【０２２４】
まず、データ処理部２０６は、クエリの実行要求を受けると、データ処理を開始する（２４０１）。なお、クエリの実行要求には、実行を要求するクエリのクエリＩＤを含む。
【０２２５】
次に、受信した実行要求に含まれるクエリＩＤとクエリ管理情報４１０のクエリＩＤ４１２とが一致するエントリを、クエリ管理情報４１０から選択する。次に、選択したエントリから、クエリプラン４２４を抽出することによって、実行するクエリに対応するクエリプラン６００を把握する（２４０２）。
【０２２６】
次に、把握したクエリプラン６００から、処理開始ステップＩＤ６０２を抽出する。これによって、最初に処理する処理ステップを確認する（２４０３）。なお、最初の処理では、その処理ステップで扱うデータの先頭部分を処理する。
【０２２７】
次に、確認した処理ステップで処理するデータを取得する。なお、処理ステップで表又は索引のデータを直接利用する場合、データ取得要求を共用ＤＢデータ管理部２１０に送信する。なお、データ取得要求は、ページＩＤ、ロック種別、クエリＩＤ及びトランザクションＩＤを含む。ページＩＤは、取得を要求するデータを有するページの一意な識別子である。ロック種別は、当該ページに設定するロックの種別である。クエリＩＤは、取得を要求するデータを必要とするクエリの一意な識別子である。トランザクションＩＤは、当該クエリが属するトランザクションの一意な識別子である。
【０２２８】
共用ＤＢデータ管理部２１０は、データ取得要求を受信すると、データ取得要求時処理を実行する（２４０４）。なお、データ取得要求時処理は、図１４で詳細を説明する。
【０２２９】
データ処理部２０６は、共用ＤＢデータ管理部２１０からデータを取得する。次に、取得したデータに対して、処理ステップを実行する（２４０５）。
【０２３０】
そして、データ利用完了報告を共用ＤＢデータ管理部２１０に送信する。データ利用完了報告は、ページＩＤ及び更新情報を含む。ページＩＤは、ステップ２４０４で取得した表又は索引のデータを有するページの識別子である。更新情報は、当該ページＩＤに対応するページに対する更新の有無を示す。
【０２３１】
共用ＤＢデータ管理部２１０は、データ利用完了報告を受信すると、データ利用完了処理を実行する（２４０６）。
【０２３２】
具体的には、受信したデータ利用完了報告に含まれるページＩＤとバッファブロック管理情報４６０のページＩＤ４６３とが一致するエントリを、バッファブロック管理情報４６０から選択する。次に、選択したエントリの利用数４６８を、減少させる。次に、ページの更新があった場合、選択したエントリの状態４６４に「Ｄｉｒｔｙ」を格納する（２４０６）。
【０２３３】
そして、データ処理部２０６は、次に実行する処理ステップを確認する（２４０７）。具体的には、事前に与えられるルールに従ったクエリプランの解釈及びステップ２４０５の処理結果によって、次に実行する処理ステップを判断する。
【０２３４】
次に実行する処理ステップがない場合、すべての処理ステップを完了したと判定し、データ処理を終了する（２４０９）。
【０２３５】
一方、後続のデータに対して同一の処理ステップを実行する場合、ステップ２４０４に戻る。
【０２３６】
また、後続のデータに対して異なる処理ステップを実行する場合、先読み要求設定処理を実行する（２４０８）。なお、先読み要求設定処理は、図１３で詳細を説明する。そして、ステップ２４０４に戻る。
【０２３７】
図１３は、本発明の第１の実施の形態のデータ処理部２０６の先読み要求設定処理のフローチャートである。
【０２３８】
なお、先読み要求設定処理は、データ処理（図１２）のステップ２４０８で実行される。
【０２３９】
まず、データ処理部２０６は、実行中のクエリのクエリＩＤとクエリプラン６００中で次に実行する処理ステップのステップＩＤが与えられ、先読み要求設定処理を開始する（２２０１）。
【０２４０】
すると、与えられたクエリＩＤと先読み管理情報５１０のクエリＩＤ５１２とが一致するエントリが、先読み管理情報５１０に存在するか否かを判定する。
【０２４１】
当該エントリが先読み管理情報５１０に存在すると、当該エントリからデータ処理先読み要求作成設定５２６を抽出する。次に、抽出したデータ処理先読み要求作成設定５２６の作成要否に「Ｙｅｓ」が格納されているか否かを判定する。そして、「Ｙｅｓ」が格納されていると、処理開始時に与えられたステップＩＤが、抽出したデータ処理先読み要求作成設定５２６のステップＩＤに格納されているか否かを判定する。これによって、先読み要求の設定が必要であるか否かを判定する（２２０２）。
【０２４２】
抽出したデータ処理先読み要求作成設定５２６の作成要否に「Ｙｅｓ」が格納されていない場合、又は、処理開始時に与えられたステップＩＤがデータ処理先読み要求作成設定５２６に格納されていない場合、先読み要求の設定が不要であると判定し、そのまま先読み要求設定処理を終了する（２２０７）。
【０２４３】
処理開始時に与えられたステップＩＤがデータ処理先読み要求作成設定５２６に格納されている場合、先読み要求の設定が必要であると判定する。
【０２４４】
そこで、先読み要求管理情報５４０に新規エントリを追加する。次に、処理開始時に与えられたクエリＩＤを、新規エントリのクエリＩＤ５４１に格納する。次に、処理開始時に与えられたステップＩＤを、新規エントリのステップＩＤ５４３に格納する。
【０２４５】
次に、処理開始時に与えられたクエリＩＤと先読み管理情報５１０のクエリＩＤ５１２とが一致するエントリを、先読み管理情報５１０から選択する。次に、選択したエントリから、実行確認値５１８を抽出する。次に抽出した実行確認値５１８を、先読み要求５４０の実行確認値５４５に格納する（２２０３）。
【０２４６】
次に、処理開始時に与えられたクエリＩＤと先読み管理情報５１０のクエリＩＤ５１２とが一致するエントリを、先読み管理情報５１０から選択する。次に、選択したエントリから、データ処理先読み要求作成設定５２６の参照条件を抽出する。次に、抽出した参照条件を、新規エントリの参照条件５４４を格納する。格納した参照条件５４４の中で値が未知の部分に関し、これまでの処理で対応する表の属性の値が既知になったものに関してその値を設定する。これによって、参照条件５４４を設定する（２２０４）。
【０２４７】
次に、処理開始時に与えられたクエリＩＤとクエリ管理情報４１０のクエリＩＤ４１２とが一致するエントリを、クエリ管理情報４１０から選択する。次に選択したエントリから、クエリプラン４２４を抽出することによって、クエリプラン６００を特定する。次に、処理開始時に与えられたステップＩＤと特定したクエリプラン６００のステップＩＤ６０６とが一致するエントリを、クエリプラン６００から選択する。
【０２４８】
次に、選択したエントリの処理詳細６１６から、索引参照処理が参照する索引のオブジェクトＩＤを抽出する。次に、抽出したオブジェクトＩＤとオブジェクト管理情報３３０のオブジェクトＩＤ３３２とが一致するエントリを、オブジェクト管理情報３３０から選択する。次に、選択したエントリから、索引ルートページＩＤ３４２を抽出する。そして、抽出した索引ルートページＩＤ３４２を、新規エントリのページＩＤ５４９に格納する（２２０５）。なお、索引ルートページＩＤ３４２に複数のページＩＤが含まれる場合、当該ページＩＤに対応する数の新規エントリを、先読み要求管理情報５４０に作成する。
【０２４９】
次に、先読み処理管理ループ処理（図１５）がスリープ状態にある場図合、先読み処理管理ループ処理を起こす（２２０６）。
【０２５０】
そして、データ処理部２０６は、先読み要求設定処理処理を終了する（２２０７）。
【０２５１】
図１４は、本発明の第１の実施の形態の共有ＤＢデータ管理部２１０のデータ取得要求時処理のフローチャートである。
【０２５２】
共有ＤＢデータ管理部２１０は、データ処理（図１４）のステップ２４０４において、データ処理部２０６からデータ取得要求を受けると、本処理を開始する（１２０１）。なお、データ取得要求は、ページＩＤ、ロック種別、クエリＩＤ及びトランザクションＩＤを含む。ページＩＤは、必要とされるデータを有するページの一意な識別子である。ロック種別は、当該ページに対して設定すべきロックの種別である。なお、ロックの設定が不要な場合、データ取得要求は、ロック種別を含まない。クエリＩＤは、データを必要とするクエリの一意な識別子である。トランザクションＩＤは、当該クエリが属するトランザクションの一意な識別子である。
【０２５３】
共有ＤＢデータ管理部２１０は、受け取ったデータ取得要求に含まれるページＩＤに対応するページに、当該データ取得要求に含まれるロック種別のロックを設定する（１２０２）。なお、データ取得要求にロック種別が含まれない場合、本ステップは実行されない。
【０２５４】
具体的には、受け取ったデータ取得要求に含まれるページＩＤとロック管理情報４８０のページＩＤ４８２とが一致するエントリを、ロック管理情報４８０から選択する。次に、選択したエントリを対象エントリとして把握する。
【０２５５】
なお、対象エントリを把握できない場合には、当該ページに対してロックは設定されていない。そこで、ロック管理情報４８０に新規エントリを作成する。次に、データ取得要求に含まれるページＩＤを、新規エントリのページＩＤ４８２に格納する。次に、データ取得要求に含まれるロック種別を、新規エントリのロック種別４８４に格納する。次に、データ取得要求に含まれるトランザクションＩＤを、新規エントリのロック取得トランザクションＩＤ４８６に格納する。次に、ロック待ちリスト４８８に初期値を格納する。
【０２５６】
一方、対象エントリを把握できた場合には、対象エントリのロック種別４８４及びロック取得トランザクションＩＤ４８６を参照することによって、当該クエリに関する処理を続行可能であるか否かを判定する。
【０２５７】
続行可能であると、処理を続行する。このとき、必要であれば、ロック種別４８４の更新及びロック取得トランザクションＩＤ４８６への値の追加を行う。
【０２５８】
一方、続行不可能であると、データ取得要求に含まれるページＩＤ及びロック種別を、対象エントリのロック待ちリスト４８８の終端に格納する。そして、ロックを取得するまで当該クエリを中断する。
【０２５９】
なお、クエリの中断中には、クエリ管理情報４１０の処理ステータス４１８に「ロック設定待ち」を格納する。更に、ロックを取得するページのページＩＤを、クエリ管理情報４１０の対象リソース４２２に格納する。
【０２６０】
次に、共有ＤＢデータ管理部２１０は、受け取ったデータ取得要求に含まれるページＩＤとバッファブロック管理情報４６０のページＩＤ４６３とが一致するエントリを、バッファブロック管理情報４６０から選択する。そして、選択したエントリを、対象ブロックエントリとしてとして把握する。次に、対象ブロックエントリが存在するかどうかを判定する。
【０２６１】
対象ブロックエントリが存在しない場合、ステップ１２１１に進む。
【０２６２】
一方、対象ブロックエントリが存在する場合、対象ブロックエントリの状態４６４が「Ｒｅａｄｉｎｇ」であるかどうかを判定する（１２０３）。
【０２６３】
対象ブロックエントリの状態４６４が「Ｒｅａｄｉｎｇ」でないと、そのままステップ１２０５に進む。一方、対象ブロックエントリの状態４６４が「Ｒｅａｄｉｎｇ」であると、ステップ１２０４に進む。
【０２６４】
まず、対象ブロックエントリのブロックＩＤ４６２とＩ／Ｏ待ち管理情報４９０のブロックＩＤ４９２とが一致するエントリを、Ｉ／Ｏ待ち管理情報４９０から選択する。次に、受け取ったデータ取得要求に含まれるクエリＩＤを、選択したエントリＩ／Ｏ待ちリスト４９４に格納する。そして、Ｉ／Ｏ処理が完了するまで当該クエリを中断する（１２０４）。
【０２６５】
次に、対象ブロックエントリから、先読み対応クエリＩＤ４６９を把握する。次に、把握した先読みクエリＩＤ４６９に、値が格納されているか否かを判定する。
【０２６６】
先読みクエリＩＤ４６９に値が格納されていると、対象ブロック内のデータは先読みされたものであるので、以下の処理を実施する。
【０２６７】
まず、把握した先読み対応クエリＩＤ４６９と先読み管理情報５１０のクエリＩＤ５１２とが一致するエントリを、先読み管理情報５１０から選択する。そして、選択するエントリが存在すると、選択したエントリの先読みブロック数５１６を減ずる（１２０５）。
【０２６８】
次に、対応ブロックエントリの先読み対応クエリＩＤ４６９に、無効値を格納する。また、先読み処理管理ループ処理（図１５）がスリープ状態にある場合、先読み処理管理ループ処理を起こす。
【０２６９】
次に、対象ブロックエントリの管理情報を更新する（１２０６）。具体的には、対象ブロックエントリから、リンク情報４６６の管理リストを抽出することによって、当該ブロックが属する管理リストを把握する。次に、把握した管理リストが、上位ＬＲＵ管理リスト又は下位ＬＲＵ管理リストのいずれであるかを判定する。
【０２７０】
把握した管理リストが上位ＬＲＵ管理リストであると、当該上位ＬＲＵ管理リストのＭＲＵ端に対象ブロックエントリを挿入する。
【０２７１】
一方、把握した管理リストが下位ＬＲＵ管理リストであると、上記と同様の対象ブロックエントリの挿入とともに、挿入先の上位ＬＲＵ管理リストのＬＲＵ端（終端）に存在するエントリを、当該管理リストのＭＲＵ端に繋ぎ直す。なお、バッファブロック管理情報４６０及びバッファグループ管理情報４７０を参照・更新することによって、この処理を実現する。次に、対象ブロックエントリの利用数４６８を増加させる。
【０２７２】
次に、先読み管理情報５１０のページ数統計５２８を更新する（１２０７）。具体的には、受け取ったデータ取得要求に含まれるクエリＩＤと管理情報５１０のクエリＩＤ５１２とが一致するエントリを、先読み管理情報５１０から選択する。次に、選択したエントリのページ数統計５２８の処理利用数を増加させる。また、ステップ１２０５で「先読みされた」データであると判定した場合には、選択したエントリのページ数統計５２８の先読みヒット数を増加させる。
【０２７３】
次に、対象ブロックエントリのブロックＩＤ４６２、バッファ領域情報４５２及びバッファブロックサイズ４５４に基づいて、対象データを保持するブロックの先頭アドレスを計算する。そして、計算した先頭アドレスをデータ処理部２０６に送信する。そして、データ取得要求時処理を終了する（１２０８）。
【０２７４】
一方、ステップ１２０３で対象ブロックエントリが存在しないと判定すると、受け取ったデータ取得要求に含まれるページＩＤをオブジェクト管理情報３３０の対応ページＩＤ３３８に含むエントリを、オブジェクト管理情報３３０から選択する。次に、選択したエントリから、グループＩＤ３３４を抽出する。
【０２７５】
次に、抽出したグループＩＤ３３４とバッファグループ管理情報４７０のグループＩＤ４７２とが一致するエントリを、バッファグループ管理情報４７０から選択する。次に、選択したエントリから、下位ＬＲＵ管理リスト情報４７６を抽出する。次に、抽出した下位ＬＲＵ管理リスト情報４７６を参照することによって、下位ＬＲＵ管理リストのＬＲＵ端に存在するエントリによって管理されるブロックを把握する。次に、把握したブロックを置換対象となるブロック（置換ブロック）とする（１２１１）。そして、置換ブロックに、対象データを保持させる。
【０２７６】
次に、置換ブロックのブロックＩＤとバッファブロック管理情報４６０のブロックＩＤ４６２とが一致するエントリを、バッファブロック管理情報４６０から選択する。次に、選択したエントリをを対象ブロックエントリとする。
【０２７７】
次に、対象ブロックエントリの利用数４６８が「０」であるか否かを判定する。対象ブロックエントリの利用数４６８が「０」でない場合、当該利用数４６８が「０」になるまで待機する。そして、対象ブロックエントリを、下位ＬＲＵ管理リストから外す。
【０２７８】
次に、対象ブロックエントリの状態４６４が「Ｄｉｒｔｙ」であるか否かを判定する。対象ブロックエントリの状態４６４が「Ｄｉｒｔｙ」であると、置換ブロックに記憶されているデータをファイルに書き込む（１２１２）。なお、ファイル上での記憶位置は、ページＩＤ及びファイル管理情報３５０から把握できる記憶位置に、データを書き込む。
【０２７９】
なお、ファイルへの書き込み処理を開始すると、Ｉ／Ｏ待ち管理情報４９０に新規エントリを追加する。次に、対象ブロックエントリのブロックＩＤ４６２を、新規エントリのブロックＩＤ４９２に格納する。次に、受け取ったデータ取得要求に含まれるクエリＩＤを、新規エントリのＩ／Ｏ待ちリスト４９４に追加する。そして、ファイルへの書き込み処理を終了すると、Ｉ／Ｏ待ち管理情報４９０に追加した新規エントリを削除する。
【０２８０】
次に、共有ＤＢデータ管理部２１０は、ステップ１２０５及びステップ１２０６と同一の処理を実行する。
【０２８１】
次に、受け取ったデータ取得要求に含まれるページＩＤを、対象ブロックエントリのページＩＤ４６３に格納する。次に、対象ブロックエントリの先読み対応クエリＩＤ４６９に無効値を格納する。
【０２８２】
次に、対象ブロックエントリの状態４６４に「Ｒｅａｄｉｎｇ」を格納する。
【０２８３】
次に、Ｉ／Ｏ待ち管理情報４９０に新規エントリを追加する。次に、対象ブロックエントリのブロックＩＤ４６２を、新規エントリのブロックＩＤ４９２に格納する。次に、受け取ったデータ取得要求に含まれるクエリＩＤを、新規エントリのＩ／Ｏ待ちリスト４９４に追加する。
【０２８４】
そして、受け取ったデータ取得要求に含まれるページＩＤに対応するページのデータをファイルから読み出す（１２１５）。なお、ファイル上の記憶位置はページＩＤ及びファイル管理情報３５０から把握できる記憶位置から、データを読み出す。
【０２８５】
読み出しを完了すると、Ｉ／Ｏ待ち管理情報４９０の対応エントリを参照する。もし、参照したエントリのＩ／Ｏ待ちリスト４９４にデータ取得要求に含まれるクエリＩＤ以外にも値が格納されている場合、クエリの処理再開を指示する。
【０２８６】
そして、Ｉ／Ｏ待ち管理情報４９０から対応エントリを削除する。そして、ステップ１２０７に進む。
【０２８７】
図１５は、本発明の第１の実施の形態の先読み部２０８の先読み処理管理ループ処理のフローチャートである。
【０２８８】
ＤＢＭＳ６０が起動した際の初期化処理等において、先読み部２０８は、本処理を開始する（１４０１）。また、ＤＢＭＳ６０の実行中にも、先読み部２０８は、本処理を独立して実行する。
【０２８９】
先読み部２０８は、一定時間処理を中断（スリープ）する。一定時間は、例えば、十ミリ秒程度である。なお、イベント発生時には、先読み処理管理ループ処理が起こされる。イベント発生は、例えば、先読み要求管理情報５４０に新たなエントリが追加された場合、先読み実処理スレッドが終了した場合又は先読みしたデータが利用された場合等である。
【０２９０】
次に、先読み要求管理情報５４０の待ちリスト管理情報５５２を参照することによって、先読み要求管理情報５４０の待ちリストで先頭に位置するエントリを把握する。把握したエントリを、処理対象エントリとして設定する（１４０３）。
【０２９１】
次に、処理対象エントリを設定できたか否かを判定する（１４０４）。処理対象エントリを設定できない場合には、ステップ１４０２に戻る。
【０２９２】
一方、処理対象エントリを設定できた場合、当該処理対象エントリの次に位置するエントリを把握する（１４０５）。
【０２９３】
次に、処理対象エントリから、クエリＩＤ５４１を抽出する。次に、抽出したクエリＩＤ５４１と先読み管理情報５１０のクエリＩＤ５１２とが一致するエントリを、先読み管理情報５１０から選択する。次に、選択したエントリを処理管理エントリとして把握する。
【０２９４】
処理対象エントリの実行確認値５４５と処理管理エントリ中の実行確認値５１８とが一致するかどうかを判定する（１４０６）。実行確認値が一致しない場合、ステップ１４２１に進む。
【０２９５】
一方、実行確認値が一致すると、処理管理エントリの先読みスレッド数５１４を参照する。そして、参照した先読みスレッド数５１４の現利用スレッド数が、先読みスレッド数５１４の最大スレッド数未満であるか否かを判定する（１４０７）。現利用スレッド数が最大スレッド数以上であると、そのままステップ１４１１に進む。
【０２９６】
一方、現利用スレッド数が最大スレッド数未満であると、処理管理エントリの先読みブロック数５１６を参照する。そして、参照した先読みブロック数５１６の先読み済みブロック数が、先読みブロック数５１６の最大ブロック数未満であるか否かを判定する（１４０８）。先読み済みブロック数が最大ブロック数以上であると、そのままステップ１４１１に進む。
【０２９７】
一方、先読み済みブロック数が最大ブロック数未満であると、処理管理エントリの先読みスレッド数５１４の現利用を増加させる。そして、処理対象エントリを指定して先読み実処理スレッドを起動する（１４０９）。なお、先読み実処理スレッドは、図１６で詳細を説明する。また、先読み部２０８は、複数の先読み実処理スレッドを同時に実行できる。
【０２９８】
次に、処理対象エントリを、先読み要求管理情報５４０の待ちリスト管理情報５５２から外す（１４１０）。
【０２９９】
次に、ステップ１４０５で把握したエントリを、処理対象エントリとして設定する（１４１１）。そして、ステップ１４０４に戻る。
【０３００】
一方、ステップ１４０６において実行確認値が一致しない場合、処理対象エントリを先読み要求管理情報５４０の待ちリスト管理情報５５２から外す。次に、処理対象エントリを、先読み要求管理情報５４０から削除する（１４２１）。そして、ステップ１４１１に進む。
【０３０１】
図１６は、本発明の第１の実施の形態の先読み部２０８の先読み実処理スレッドのフローチャートである。
【０３０２】
先読み実処理スレッドは、先読み処理管理ループ処理（図１５）のステップ１４０９で実行される。
【０３０３】
先読み部２０８は、先読み処理管理ループ処理を開始する際に（２３０１）、実行する先読み処理に関する情報を含む処理エントリ（先読み要求管理情報５４０のエントリ）を指定されている。
【０３０４】
まず、先読み部２０８は、処理エントリのページＩＤ５４９を含むデータ参照要求を、共有ＤＢデータ管理部２１０に送信する。
【０３０５】
共有ＤＢデータ管理部２１０は、データ参照要求を受信すると、データ参照要求時処理を実行する（２３０２）。なお、データ参照要求時処理は、図１７で詳細を後述する。
【０３０６】
先読み部２０８は、共有ＤＢデータ管理部２１０のデータ参照要求時処理の完了を待つ。そして、処理エントリのクエリＩＤ５４１と先読み管理情報５１０のクエリＩＤ５１２とが一致するエントリを、先読み管理情報５１０から選択する。次に、選択したエントリを、管理エントリとして把握する。
【０３０７】
次に、処理エントリの実行確認値５４５と管理エントリの実行確認値５１８とが一致するか否かを判定する（２３０３）。実行確認値が一致しない場合、ステップ２３２１に進む。
【０３０８】
一方、実行確認値が一致した場合、指定ページに記憶されているデータが索引であるか否かを判定する。データが索引でないと、ステップ２３１１に進む。
【０３０９】
一方、データが索引であると、処理エントリから、クエリＩＤ５４１及びステップＩＤ５４３を抽出する。次に、抽出したクエリＩＤ５４１とクエリ管理情報４１０のクエリＩＤ４１２とが一致するエントリを、クエリ管理情報４１０から選択する。次に、選択したエントリのクエリプラン４２４を参照することによって、当該索引の参照条件を把握する（２３０５）。
【０３１０】
次に、把握した参照条件に表データへのポインタを有するか否かを判定する。これによって、指定ページが索引のリーフページであるか否かを判定する（２３０６）。
【０３１１】
指定ページが索引のリーフページでないと、ステップ２３０８に進む。
【０３１２】
一方、指定ページが索引のリーフページであると、参照条件に対応する表ページへの先読み要求を作成する（２３０７）。具体的には、指定ページを解析する。これによって、ステップ２３０５で把握した索引の参照条件に対応する表データへのポインタを把握する。
【０３１３】
次に、当該データを記憶しているページを取得するために、先読み要求管理情報５４０に新規エントリを追加する。次に、処理エントリのクエリＩＤ５１２を、新規エントリのクエリＩＤ５４１に格納する。次に、処理エントリの実行確認値５１８を、新規エントリの実行確認値５４５に格納する。次に、解析によって取得した表データへのポインタから把握される値を、新規エントリのページＩＤ５４９及びページ内データＩＤ５４２に格納する。
【０３１４】
次に、処理エントリから、データ処理先読み要求作成処理５２６のステップＩＤを抽出する。次に、クエリプランを参照することによって、抽出したステップＩＤの処理ステップに対応して実施される表データの取得処理に対応する処理ステップのステップＩＤを特定する。次に、特定したステップＩＤを、新規エントリのステップＩＤ５４３に格納する。
【０３１５】
次に、処理エントリから参照要求５４４を抽出する。次に、処理エントリからステップＩＤ５４３を抽出する。次に、抽出した参照条件５４４から、抽出したステップＩＤ５４３に対応する処理ステップにおける検索条件を除いた値を求める。そして、求めた値を、新規エントリの参照要求５４４に格納する。
【０３１６】
なお、対応するデータが複数ある場合には、それぞれのデータに対応する新規エントリを先読み要求管理情報５４０に追加する。
【０３１７】
次に、データ参照要求で指定されたデータの参照完了を、共有ＤＢデータ管理部２１０に報告する。
【０３１８】
次に、処理エントリを先読み管理情報５１０から削除する（２３２１）。そして、先読み実処理スレッドを終了する（２３２２）。
【０３１９】
一方、ステップ２３０６において指定ページが索引のリーフページでないと、参照条件に対応する下位の索引ページの先読み要求を作成する（２３０８）。具体的には、指定ページを解析する。
【０３２０】
次に、ステップ２３０５で把握した参照条件に対応し、且つ、リーフ側に存在する索引データを保持するページへのポインタを把握する。次に、当該索引データを保持するページを取得するために、先読み要求管理情報５４０に新規エントリを追加する。
【０３２１】
次に、処理エントリのクエリＩＤ５１２を、新規エントリのクエリＩＤ５４１に格納する。次に、処理エントリのデータ処理先読み要求作成設定５２６のステップＩＤを、新規エントリのステップＩＤ５４３に格納する。次に、処理エントリの実行確認値５１８を、新規エントリの実行確認値５４５に格納する。次に、処理エントリのデータ処理先読み要求作成設定５２６の参照条件を、新規エントリの参照条件５４４に格納する。
【０３２２】
次に、解析によって把握した索引データを保持するページのページＩＤを、新規エントリのページＩＤ５４９に設定する。なお、対応する索引データを保持するページが複数ある場合には、それぞれに対応する新規エントリを先読み要求管理情報５４０に追加する。。そして、ステップ２３２１に進む。
【０３２３】
一方、ステップ２３０４において指定ページに記憶されているデータが索引でないと、処理エントリの参照条件５４４に値が格納されているか否かを判定する。
【０３２４】
参照条件に値が格納されていない場合、そのままステップ２３２１に進む。
【０３２５】
一方、参照条件に値が格納されている場合、ステップ２３０２で取得したページを解析することによって、処理エントリのページ内データＩＤ５４２に対応するデータを把握する。
【０３２６】
次に、把握したデータに基づいて、処理エントリの参照条件５４４に設定する対応値を求める。そして、求めた対応値を、処理エントリの参照条件５４４に格納する（２３１２）。
【０３２７】
次に、処理エントリの参照条件５４４に対応する処理の次に実行する索引参照処理における検索条件を把握する。そして、把握した検索条件が揃っているか否かを判定する。
【０３２８】
検索条件が揃っていなければ、そのままステップ２３２１に進む。
【０３２９】
一方、索引ステップ２３１４が揃っていれば、次の索引参照処理における索引ルートページのデータを取得するため、先読み要求管理情報５４０へ新規エントリを追加する（２３１４）。
【０３３０】
次に、処理エントリのクエリＩＤ５１２を、新規エントリのクエリＩＤ５４１に格納する。次に、処理エントリの実行確認値５１８を、新規エントリの実行確認値５４５に格納する。次に、処理エントリのデータ処理先読み要求作成設定５２６の参照条件を、新規エントリの参照条件５４４に格納する。
【０３３１】
次に、処理エントリのクエリＩＤ５１２とクエリ管理情報４１０のクエリＩＤ４１２とが一致するエントリを、クエリ管理情報４１０から選択する。次に、選択したエントリから、クエリプラン４２４を抽出する。次に、抽出したクエリプラン４２４及び処理エントリのデータ処理先読み要求作成設定５２６のステップＩＤを参照することによって、次の索引参照処理で参照する索引のオブジェクトＩＤ及び当該処理ステップに対応するステップＩＤを把握する。
【０３３２】
次に、把握したステップＩＤを、新規エントリのステップＩＤ５４３に格納する。次に、把握したオブジェクトＩＤとオブジェクト管理情報３３０のオブジェクトＩＤ３３０とが一致するエントリを、オブジェクト管理情報３３０から選択する。次に、選択したエントリから、索引ルートページＩＤ３４２を抽出する。次に、抽出した索引ルートページＩＤ３４２を、新規エントリのページＩＤ５４９に格納する。そして、ステップ２３２１に進む。
【０３３３】
図１７は、本発明の第１の実施の形態の共有ＤＢデータ管理部２１０のデータ参照要求時処理のフローチャートである。
【０３３４】
データ参照要求時処理は、先読み実処理スレッド（図１６）のステップ２３０２で実行される。
【０３３５】
共有ＤＢデータ管理部２１０は、データ参照要求を先読み部２０８から受けると、データ参照要求時処理を開始する（１３０１）。なお、データ参照要求は、必要とされるデータを有するページのページＩＤ及びデータを必要とする先読み処理に対応するクエリのクエリＩＤを含む。
【０３３６】
共有ＤＢデータ管理部２１０は、受け取ったデータ参照要求に含まれるページＩＤとバッファブロック管理情報４６０のページＩＤ４６２とが一致するエントリを、バッファブロック管理情報４６０から選択する。次に、選択したエントリを対象ブロックエントリとして把握する。次に、把握する対象ブロックエントリが存在するか否かを判定する。
【０３３７】
対象ブロックエントリが存在しない場合、ステップ１２１１に進む。
【０３３８】
一方、対象ブロックエントリが存在する場合、対象ブロックエントリの状態４６４が「Ｒｅａｄｉｎｇ」であるかどうかを判定する（１３０３）。
【０３３９】
対象ブロックエントリの状態４６４が「Ｒｅａｄｉｎｇ」でないと、そのままステップ１３０５に進む。一方、対象ブロックエントリの状態４６４が「Ｒｅａｄｉｎｇ」であると、ステップ１３０４に進む。
【０３４０】
まず、対象ブロックエントリのブロックＩＤ４６２とＩ／Ｏ待ち管理情報４９０のブロックＩＤ４９２とが一致するエントリを、Ｉ／Ｏ待ち管理情報４９０から選択する。次に、受け取ったデータ参照要求に含まれるクエリＩＤを、選択したエントリＩ／Ｏ待ちリスト４９４に格納する。そして、Ｉ／Ｏ処理が完了するまで当該クエリを中断する（１３０４）。
【０３４１】
次に、対象ブロックエントリのリンク情報４６６の管理リストを抽出することによって、対象ブロックエントリが属している管理リストを把握する。そして、対象ブロックが上位ＬＲＵ管理リスト又は下位ＬＲＵ管理リストのいずれに属するかを判定する（１３０５）。
【０３４２】
対象ブロックが上位ＬＲＵ管理リストに属すると、対象ブロックエントリの利用数４６８を増加させる（１３２２）。そして、データ参照要求時処理を終了する（１３０９）。
【０３４３】
一方、対象ブロックが下位ＬＲＵ管理リストに属すると、ステップ１２０５を実行する。なお、ステップ１２０５は、データ取得要求時処理（図１４）で説明した処理と同一なので、説明を省略する。
【０３４４】
次に、対象ブロックエントリからリンク情報４６６の管理リストを抽出することによって、対象ブロックエントリが現在属している下位ＬＲＵ管理リストを把握する。次に、把握した下位ＬＲＵ管理リストのＭＲＵ端に、対象ブロックエントリを繋ぎ直す。なお、バッファブロック管理情報４６０及びバッファグループ管理情報４７０を参照・更新することによって、この処理を実行する。次に、対応ブロックエントリの利用数４６８を増加させる（１３０７）。
【０３４５】
次に、受け取ったデータ参照要求に含まれるクエリＩＤと先読み管理情報５１０のクエリＩＤ５１２とが一致するエントリを、先読み管理情報５１０から選択する。次に、選択したエントリの先読みブロック数５１６の先読み済みブロック数を増加させる。次に、受け取ったデータ参照要求に含まれるクエリＩＤを、対象ブロックエントリの先読み対応クエリＩＤ４６９に格納する（１３０８）。
【０３４６】
次に、対象ブロックエントリのブロックＩＤ４６２、バッファ領域情報４５２及びバッファブロックサイズ４５４に基づいて、対象データを保持するブロックの先頭アドレスを求める。そして、求めたその先頭アドレスを先読み部２０８に送信する。そして、データ参照要求時処理を終了する（１３０９）。
【０３４７】
一方、ステップ１３０３において対象ブロックエントリが存在しないと判定すると、ステップ１２１１、ステップ１２１２、ステップ１２０５及びステップ１３１４を実行する。なお、ステップ１２１１、ステップ１２１２及びステップ１２０５は、データ取得要求時処理（図１４）で説明した処理と同一なので、説明を省略する。
【０３４８】
次に、バッファブロック管理情報を更新する（１３１４）。具体的には、受け取ったデータ参照要求に含まれるページＩＤを、対象ブロックエントリのページＩＤ４６３に格納する。次に、対象ブロックエントリの先読み対応クエリＩＤ４６９に無効値を格納する。
【０３４９】
次に、Ｉ／Ｏ発行間隔を調整する（１３１５）。具体的には、受け取ったデータ参照要求に含まれるクエリＩＤと先読み管理情報５１０のクエリＩＤ５１２とが一致するエントリを、先読み管理情報５１０から選択する。次に、選択したエントリのＩ／Ｏ発行間隔管理情報５２２のタイムスタンプを抽出する。次に、抽出したタイムスタンプが有効である場合、抽出したタイムスタンプと現在の時刻との差分を求める。次に、求めた差分が、選択したエントリのＩ／Ｏ発行間隔管理情報５２２の設定下限値より小さいか否かを判定する。
【０３５０】
差分が設定下限値より小さいと、当該差分が設定下限値以上になるまで処理を中断する。そして、差分が設定下限値以上になると、選択したエントリのＩ／Ｏ発行間隔管理情報５２２のタイムスタンプに現在の時刻を格納する。
【０３５１】
次に、ステップ１２１５と同様に、データを読み出す（１３１６）。なお、ステップ１２１５は、データ取得要求時処理（図１４）で説明した処理と同一なので、説明を省略する。そして、ステップ１３０８に進む。
【０３５２】
図１８は、本発明の第１の実施の形態の実行管理部２０４の実行管理部ループ処理のフローチャートである。
【０３５３】
ＤＢＭＳ６０が起動した際の初期化処理等において、実行管理部２０４は、本処理を開始する（１５０１）。また、ＤＢＭＳ６０の実行中にも、実行管理部２０４は、本処理を独立して実行する。
【０３５４】
まず、実行管理部２０４は、ＤＢサーバ４２のＣＰＵ利用率を把握する（１５０２）。具体的には、ＣＰＵ利用率はＯＳ５２が計測したＣＰＵ利用率を取得する。
【０３５５】
次に、把握したＣＰＵ利用率が過負荷閾値以上である状態が一定時間継続しているかどうかを判定する（１５０３）。なお、当該過負荷閾値は、ユーザ等によって事前に与えられる。
【０３５６】
ＣＰＵ利用率が過負荷閾値以上である状態が一定時間継続していると、ステップ１５２１に進む。
【０３５７】
一方、ＣＰＵ利用率が過負荷閾値以上である状態が一定時間継続していない場合、把握したＣＰＵ利用率が低負荷閾値以下である状態が一定時間継続しているかどうかを判定する（１５０４）。なお、当該低負荷閾値は、ユーザ等によって事前に与えられる。
【０３５８】
ＣＰＵ利用率が低負荷閾値以下である状態が一定時間継続していない場合、そのままステップ１５０７に進む。
【０３５９】
一方、ＣＰＵ利用率が低負荷閾値以下である状態が一定時間継続していると、現在中断中の先読み処理を再開する（１５０６）。
【０３６０】
具体的には、先読み管理情報５１０のデータ処理先読み要求作成設定５２６の作成要否情報が「Ｓｔｏｐ」のエントリを選択する。次に、選択したエントリのデータ処理先読み要求作成設定５２６の作成要否情報を「Ｙｅｓ」に変更する。なお、クエリ管理情報４１０の処理優先度４１６に基づいて、当該処理の対象を制御してもよい。
【０３６１】
次に、ロック管理情報４８０のロック待ちリスト４８８に、閾値以上の個数のクエリＩＤが格納されているエントリを選択する。そして、選択したエントリを、待ち数過多ページに対応するエントリとして把握する。ここで、待ち数過多ページとは、ロックの解放を待つクエリが多数存在するページである。
【０３６２】
そして、待ち数過多ページが存在するか否かを判定する（１５０７）。
【０３６３】
待ち数過多ページが存在しない場合、そのままステップ１５０９に進む。
【０３６４】
一方、待ち数過多ページが存在する場合、待ち過多数ページに対応してクエリの先読みデータ量を増加させる（１５０８）。当該待ち数過多ページに対応するエントリのロック取得トランザクションＩＤ４８６を抽出する。次に、抽出したトランザクションＩＤ４８６とクエリ管理情報４１０のトランザクションＩＤ４１４とが一致するエントリを、クエリ管理情報４１０から選択する。次に、選択したエントリの処理ステータス４１８に「ロック設定待ち」が格納されているか否かを判定する。
【０３６５】
処理ステータス４１８に「ロック設定待ち」が格納されていない場合には、選択したエントリのクエリＩＤ４１２を把握する。
【０３６６】
一方、処理ステータス４１８に「ロック設定待ち」が格納されている場合には、選択したエントリから対象リソース４２２を抽出する。次に、抽出した対象リソース４２２とロック管理情報４８０のページＩＤ４８２とが一致するエントリを、ロック管理情報４８０から選択する。次に、選択したエントリから、ロック取得トランザクションＩＤ４８６を抽出する。次に、抽出したロック取得トランザクションＩＤ４８６とクエリ管理情報４１０のトランザクションＩＤ４１４とが一致するエントリを、クエリ管理情報４１０から再度選択する。次に、選択したエントリの処理ステータス４１８に「ロック設定待ち」が格納されているか否かを判定する。
【０３６７】
処理ステータス４１８に「ロック設定待ち」が格納されていない場合になるまで、当該処理を繰り返す。そして、処理ステータス４１８に「ロック設定待ち」が格納されていない場合になると、当該エントリのクエリＩＤ４１２を把握する。
【０３６８】
次に、把握したクエリＩＤ４１２と先読み管理情報５１０のクエリＩＤ５１２とが一致するエントリを、先読み管理情報５１０から選択する。次に、選択したエントリの先読みブロック数５１６の最大ブロック数を一定割合増加させる。
【０３６９】
次に、最大ブロック数の増加に合わせて、総先読み数管理情報５０１の総先読みブロック数５０４の割当値を更新する。なお、総先読みブロック数５０４の割当値が総先読みブロック数５０４の最大値を超える場合には、本ステップを実行しない。
【０３７０】
次に、総先読みブロック数５０４中の割当値と総先読みブロック数５０４の最大値との比を求める。次に、求めた比が閾値以下であるか否かを判定する。
【０３７１】
そして、比が閾値以下であると、先読み管理情報５１０の先読みブロック数５１６の最大ブロック数を見直す（１５０９）。
【０３７２】
具体的には、先読み管理情報５１０の各エントリから、クエリＩＤ５１２を抽出する。次に、抽出したクエリＩＤとクエリ管理情報４１０のクエリＩＤ４１２とが一致するエントリを、クエリ管理情報４１０から選択する。次に、選択したエントリから、処理優先度４１６を抽出する。次に、抽出した処理優先度４１６によって規定されている割当ブロック数（規定割当ブロック数）を把握する。
【０３７３】
次に、先読み管理情報５１０の先読みブロック数５１６の割当て済みブロック数が規定割当ブロック数より小さい場合、当該先読みブロック数５１６の割当て済みブロック数を規定割当ブロック数に変更する。
【０３７４】
次に、ステップ１５０８と同様に、総先読みブロック数５０４の割当値を更新する。
【０３７５】
なお、総先読みブロック数５０４の割当値が、総先読みブロック数５０４の最大値を超える場合には、本ステップを実行しない。
【０３７６】
そして、一定時間スリープし（１５１０）、ステップ１５０２に戻る。
【０３７７】
一方、ステップ１５０３においてＣＰＵ利用率が過負荷閾値以上である状態が一定時間継続していると、処理優先度が低い処理の先読み処理を停止する（１５２１）。
【０３７８】
具体的には、先読み管理情報５１０中の各エントリから、クエリＩＤ５１２を抽出する。次に、抽出したクエリＩＤ５１２とクエリ管理情報４１０のクエリＩＤ４１２とが一致するエントリを、クエリ管理情報４１０から選択する。次に、選択したエントリから、処理優先度４１６を抽出する。
【０３７９】
次に、抽出した処理優先度４１６が事前に定められた優先度以下であるか否かを判定する。なお、ＣＰＵ利用率に応じて、事前に定められた優先度を変化させてもよい。
【０３８０】
抽出した処理優先度４１６が事前に定められた優先度以下であると、以下の処理を実施する。
【０３８１】
選択したエントリの実行確認値５１８に、新たなランダム値を格納する。次に、データ処理先読み要求作成設定５２８の作成要否情報に「Ｙｅｓ」が格納されているかどうかを確認する。作成要否情報に「Ｙｅｓ」が格納されている場合、当該作成要否情報を「Ｓｔｏｐ」に変更する。この確認処理を、すべての選択したエントリに対して行い、ステップ１５０７に進む。
【０３８２】
以上のように、本実施の形態では、計算機等の動作状態に応じて先読み処理を外部から制御する処理を設ける。これによって、先読み処理によるＤＢＭＳ主処理への影響を軽減できるので、先読み動作を好適化できる。
【０３８３】
（第２の実施の形態）
本発明の第２の実施の形態では、計算機システムにＤＢサーバ４２が複数存在する。そして、それぞれのＤＢサーバ４２で動作するＤＢＭＳ６０が協調することによって、一つの並列ＤＢＭＳとして動作する。
【０３８４】
図１９は、本発明の第２の実施の形態の計算機システムのブロック図である。
【０３８５】
第２の実施の形態の計算機システムは、複数のＤＢサーバを備える。第２の実施の形態の計算機システムのそれ以外の構成は、第１の実施の形態の計算機システム（図１）と同一である。よって、同一の構成には同一の番号を付し、説明を省略する。
【０３８６】
ＡＰプログラム７０は、事前に定められたＤＢサーバ４２上で動作するＤＢＭＳ６０にクエリを発行する。なお、ＡＰプログラム７０は、任意のＤＢサーバ４２上で動作してもよい。
【０３８７】
異なるＤＢサーバ４２で動作するＤＢＭＳ６０は、それぞれ異なるデータを管理する「Ｓｈａｒｅｄ  Ｎｏｔｈｉｎｇ」型の並列ＤＢＭＳである。そのため、スキーマ３００のファイル管理情報３５０の構成が異なる。
【０３８８】
図２０は、本発明の第２の実施の形態のスキーマ３００に含まれるファイル管理情報３５０の構成図である。
【０３８９】
ファイル管理情報３５０は、ファイルＩＤ３５２、ページサイズ３５４、ページ数３５６、ファイルパス３５８及びサーバＩＤ３６２を含む。
【０３９０】
なお、ファイルＩＤ３５２、ページサイズ３５４、ページ数３５６及びファイルパス３５８は、第１の実施の形態のファイル管理情報（図５Ｄ）の構成と同一である。よって、説明を省略する。
【０３９１】
サーバＩＤ３６２は、当該ファイルに記憶されているデータを管理するＤＢＭＳ６０が動作しているＤＢサーバ４２の識別子である。
【０３９２】
それぞれのＤＢサーバ４２で動作しているＤＢＭＳ６０は、ネットワーク２４を経由して相互に通信可能である。よって、複数のＤＢＭＳ６０は、同じクエリプラン６００のコピーをそれぞれ保持する。そして、一つのクエリに対応する処理を分担して処理する。また、複数のＤＢＭＳ６０は、同一のスキーマ３００及び同一の処理管理情報４００を保持する。その一方で、各ＤＢＭＳ６０は、それぞれ独立に共有バッファ６４を管理する。
【０３９３】
まず、ＡＰプログラム７０は、一つのＤＢＭＳ６０にクエリを送信する。クエリを受信したＤＢＭＳ６０は、ＡＰプログラム７０との通信処理及びクエリプランの作成処理を行う。そして、すべてのＤＢＭＳは、ＡＰプログラム７０との通信処理及びクエリプランの作成処理以外の処理を、分担して実行する。
【０３９４】
本実施の形態では、ファイルごとにデータを管理するＤＢＭＳ６０が決定される。また、ページＩＤにはファイルに関する識別子を含む。そのため、ページＩＤに基づいて、処理すべきＤＢＭＳ６０が稼動するＤＢサーバ４２を把握できる。
【０３９５】
データ処理部２０６及び先読み部２０８は、利用するデータを含むページのページＩＤとファイル管理情報３５０に基づいて、当該ページに関する処理を実行するＤＢＭＳ６０が稼動しているＤＢサーバ４２を把握する。そして、把握したＤＢサーバ４２に処理の実行を依頼する。
【０３９６】
例えば、先読み要求管理情報５４０に新規エントリを追加する場合、追加する新規エントリのページＩＤ５４９に値を格納する必要がある。このとき、ページＩＤに基づいて把握したＤＢサーバ４２に対して、先読み要求管理情報５４０の新規エントリの追加を依頼する。
【０３９７】
なお、集計処理等のように、一台のＤＢサーバ４２で実行すべき処理もある。これらの処理に関しては、処理を実行するＤＢサーバ４２のサーバＩＤをクエリプラン６００の処理詳細６１６に格納する。これによって、一台のＤＢサーバ４２で実行すべき処理を適切に行うことができる
（第３の実施の形態）
本発明の第３の実施の形態では、第２の実施の形態と同様に、計算機システム内にＤＢサーバ４２が複数存在する。そして、それぞれのＤＢサーバ４２で動作するＤＢＭＳ６０が協調することによって、一つの並列ＤＢＭＳとして動作する。
【０３９８】
ただし、第３の実施の形態では、第２の実施の形態と異なり、異なるＤＢサーバ４２で動作しているＤＢＭＳ６０が、同じデータを処理可能な「Ｓｈａｒｅｄ  Ｄｉｓｋ」型の並列ＤＢＭＳである。
【０３９９】
第３の実施の形態の計算機システムの構成は、第２の実施の形態の計算機システム（図１９）と同一の構成であり、説明を省略する。
【０４００】
また、第３の実施の形態では、異なるＤＢサーバ４２上で動作するＤＢＭＳ６０が同じデータを処理できる。そのため、最新データを含むページを保有するＤＢサーバ４２が時間に応じて変化する。
【０４０１】
そこで、ＤＢＭＳ６０は、最新ページ保有サーバ情報６５０を含む共有ＤＢデータ管理情報４５０によって、データを管理する。
【０４０２】
図２１は、本発明の第３の実施の形態の共有ＤＢデータ管理情報４５０に含まれる最新ページ保有サーバ情報６５０の構成図である。
【０４０３】
最新ページ保有サーバ情報６５０は、ページＩＤ６５１及びサーバＩＤ６５２を含む。
【０４０４】
ページＩＤ６５１は、管理対象となるページの一意な識別子である。サーバＩＤ６５２は、当該ページの最新データを保有するＤＢサーバ４２の一意な識別子である。
【０４０５】
最新ページ保有サーバ情報６５０は、最新ページを保有するＤＢサーバ４２が変化する度に、更新される。
【０４０６】
ＤＢＭＳ６０は、クエリプランを作成する際に、どのＤＢＭＳ６０がどのデータを処理すべきか決定する。そして、決定した内容を、処理管理情報４００に含まれる処理分担情報６６０に格納する。
【０４０７】
図２２は、本発明の第３の実施の形態の処理管理情報４００に含まれる処理分担情報６６０の構成図である。
【０４０８】
処理分担管理情報６６０は、ステップＩＤ６６１、分割条件６６２及びサーバＩＤ６６３を含む。
【０４０９】
ステップＩＤ６６１は、処理ステップの一意な識別子である。なお、一台のＤＢサーバ４２がある処理ステップの結果を元に次の処理ステップを実行する場合には、次の処理ステップに対応するエントリは存在しない。
【０４１０】
分割条件６６２は、当該処理ステップにおける処理の分割方法を示す。なお、一台のＤＢサーバ４２上で実行すべき動作に関しては、分割条件６６２には「全データ」が格納される。
【０４１１】
サーバＩＤ６６３は、当該処理ステップが実行されるＤＢサーバ４２の一意な識別子である。
【０４１２】
データ処理部２０６が次の処理ステップにデータを展開する場合、又は、先読み部２０８が先読み要求管理情報５４０に次の処理ステップに関する新規エントリを割り当てる場合には、クエリプラン６００の処理分担情報６６０に基づいて、処理を行うＤＢサーバ４２を把握する。そして、把握したＤＢサーバ４２に処理の実施を依頼する。
【０４１３】
本実施の形態では、ＡＰプログラム７０は、一つのＤＢＭＳ６０にクエリを送信する。クエリを受信したＤＢＭＳ６０は、ＡＰプログラム７０との通信処理及びクエリプランの作成処理を行う。そして、すべてのＤＢＭＳは、ＡＰプログラム７０との通信処理及びクエリプランの作成処理以外の処理を、分担して実行する。
【０４１４】
共有ＤＢデータ管理部２１０は、データ取得要求時処理（図１４）のステップ１２１５において、最新ページ保有サーバ情報６５０を参照することによって、要求されたページの最新データを他のＤＢサーバ４２が保有しているか否かを判定する。
【０４１５】
他のＤＢサーバ４２が保有している場合には、当該他のＤＢサーバ４２上で動作するＤＢＭＳ６０の共有ＤＢデータ管理部２１０に対して、当該ページの転送を要求する。
【０４１６】
すると、転送要求を受け取った共有ＤＢデータ管理部２１０は、ロック管理情報４８０を参照することによって、転送を要求されたページにロックが設定されているかどうかを判定する。
【０４１７】
ロックが設定されていない場合には、当該ページを要求先の共有ＤＢデータ管理部２１０に送信する。一方、ロックが設定されている場合には、ロック管理情報４８０ロック待ちリスト４８８に当該処理に対応するクエリＩＤを追加する。
【０４１８】
そして、ロックの取得が可能になると、要求されたページ及び当該ページに対応するロック待ちリスト４８８を要求先の共有ＤＢデータ管理部２１０に送信する。
【０４１９】
次に、当該ページを保持するブロックに対応するエントリを、バッファブロック管理情報４６０から削除する。
【０４２０】
ページの転送を要求した共有ＤＢデータ管理部２１０は、ページを受信する。このとき、ページと共にロック待ちリストを受け取った場合、受け取ったロック待ちリストを、ロック管理情報４８０のロック待ちリスト４８８に格納する。その後、有ＤＢデータ管理部２１０は、第一の実施の形態と同一の処理を行う。
【０４２１】
共有ＤＢデータ管理部２１０は、データ参照要求時処理（図１７）のステップ１３１６において、最新ページ保有サーバ情報６５０を参照することによって、要求されたページの最新データを他のＤＢサーバ４２が保有しているか否かを判定する。
【０４２２】
他のＤＢサーバ４２が保有している場合には、当該他のＤＢサーバ４２上で動作するＤＢＭＳ６０の共有ＤＢデータ管理部２１０に対して、当該ページの転送を要求する。
【０４２３】
すると、転送要求を受け取った共有ＤＢデータ管理部２１０は、要求されたページのデータ及び当該ページのロック状態を、要求元の共有ＤＢデータ管理部２１０に即時に送信する。
【０４２４】
要求元の共有ＤＢデータ管理部２１０は、受け取ったページにロックが設定されいるかいないかを判定する。
【０４２５】
ロックが設定されていない場合、記憶装置４６から読み出したページと同様に管理する。
【０４２６】
一方、ロックが設定されている場合、当該ページを記憶装置４６から読み出したページから分離して保持する。そして、先読み部２０８からデータの参照完了報告を受けると、当該データを即時に破棄する。つまり、ロックが設定されていない場合には、最新ページを保有するＤＢサーバ４２が変化する。一方、ロックが設定されている場合には、最新ページを保有するＤＢサーバ４２が変化しない。
【産業上の利用可能性】
【０４２７】
本発明によると、計算機が有するメモリ量が少ない条件下でもＤＢＭＳが動作する計算機上で先読み部を効果的に動作させることができるようになる。そのため、ＤＢＭＳによる問い合わせ処理の処理時間を短縮できる。特に、Ｂ−Ｔｒｅｅ形式の索引を利用した検索処理の処理時間を大幅に短縮できる。本発明は、一般的な計算機システムで利用されている構成を用いるため、広範囲な計算機システムに適用できる。計算機システムに適用することによって、データの先読みによる性能向上効果を得ることができる。
【図面の簡単な説明】
【０４２８】
【図１】本発明の第１の実施の形態の計算機システムのブロック図である。
【図２】本発明の第１の実施の形態のＤＢＭＳの機能の説明図である。
【図３】本発明の第１の実施の形態のグループにおけるブロック管理に利用するＬＲＵ管理リストの説明図である。
【図４】本発明の第１の実施の形態のＤＢＭＳにおけるクエリプランの説明図である。
【図５Ａ】本発明の第１の実施の形態のスキーマに含まれる表定義情報の構成図である。
【図５Ｂ】本発明の第１の実施の形態のスキーマに含まれる索引定義情報の構成図である。
【図５Ｃ】本発明の第１の実施の形態のスキーマに含まれるオブジェクト管理情報の構成図である。
【図５Ｄ】本発明の第１の実施の形態のスキーマに含まれるファイル管理情報の構成図である。
【図６Ａ】本発明の第１の実施の形態の処理管理情報に含まれるクエリ管理情報の構成図である。
【図６Ｂ】本発明の第１の実施の形態の処理管理情報に含まれるトランザクション管理情報の構成図である。
【図７】本発明の第１の実施の形態の処理管理情報に含まれるクエリプランの構成図である。
【図８Ａ】本発明の第１の実施の形態の共有ＤＢデータ管理情報に含まれる共有バッファ定義情報の構成図である。
【図８Ｂ】本発明の第１の実施の形態の共有ＤＢデータ管理情報に含まれるバッファブロック管理情報の構成図である。
【図８Ｃ】本発明の第１の実施の形態の共有ＤＢデータ管理情報に含まれるバッファグループ管理情報の構成図である。
【図８Ｄ】本発明の第１の実施の形態の共有ＤＢデータ管理情報に含まれるロック管理情報の構成図である。
【図８Ｅ】本発明の第１の実施の形態の共有ＤＢデータ管理情報に含まれるＩ／Ｏ待ち管理情報の構成図である。
【図９Ａ】本発明の第１の実施の形態の先読み処理情報に含まれる総先読み数管理情報の構成図である。
【図９Ｂ】本発明の第１の実施の形態の先読み処理情報に含まれる先読み管理情報の構成図である。
【図９Ｃ】本発明の第１の実施の形態の先読み処理情報に含まれる先読み要求管理情報の構成図である。
【図１０】本発明の第１の実施の形態のＤＢＭＳのクエリ処理のフローチャートである。
【図１１】本発明の第１の実施の形態の実行管理部の先読み管理情報設定処理のフローチャートである。
【図１２】本発明の第１の実施の形態のデータ処理部のデータ処理のフローチャートである。
【図１３】本発明の第１の実施の形態のデータ処理部の先読み要求設定処理のフローチャートである。
【図１４】本発明の第１の実施の形態の共有ＤＢデータ管理部のデータ取得要求時処理のフローチャートである。
【図１５】本発明の第１の実施の形態の先読み部の先読み処理管理ループ処理のフローチャートである。
【図１６】本発明の第１の実施の形態の先読み部の先読み実処理スレッドのフローチャートである。
【図１７】本発明の第１の実施の形態の共有ＤＢデータ管理部のデータ参照要求時処理のフローチャートである。
【図１８】本発明の第１の実施の形態の実行管理部の実行管理部ループ処理のフローチャートである。
【図１９】本発明の第２の実施の形態の計算機システムのブロック図である。
【図２０】本発明の第２の実施の形態のスキーマに含まれるファイル管理情報の構成図である。
【図２１】本発明の第３の実施の形態の共有ＤＢデータ管理情報に含まれる最新ページ保有サーバ情報の構成図である。
【図２２】本発明の第３の実施の形態の処理管理情報に含まれる処理分担情報の構成図である。
【符号の説明】
【０４２９】
１２  ＣＰＵ
１４  メモリ
１６  ＨＤＤ
１８  ＣＤ−ＲＯＭドライブ
２０  内部バス
２２  ネットワークＩ／Ｆ
２４  ネットワーク
３２  Ｉ／ＯパスＩ／Ｆ
３４  Ｉ／Ｏパス
４２  ＤＢサーバ
４４  ＡＰサーバ
４６  記憶装置
５２  ＯＳ
６０  ＤＢＭＳ
６２  共有管理情報
６４  共有バッファ
７０  ＡＰプログラム
８０  内部バス
８２  ＣＰＵ
８４  メモリ
８６  ＨＤＤ
８５  ネットワークＩ／Ｆ
２０２  クライアント処理部
２０４  実行管理部
２０６  データ処理部
２０８  先読み部
２１０  共有ＤＢデータ管理部
【図１】
0005261809.tif 000002
【図２】
0005261809.tif 000003
【図３】
0005261809.tif 000004
【図４】
0005261809.tif 000005
【図５Ａ】
0005261809.tif 000006
【図５Ｂ】
0005261809.tif 000007
【図５Ｃ】
0005261809.tif 000008
【図５Ｄ】
0005261809.tif 000009
【図６Ａ】
0005261809.tif 000010
【図６Ｂ】
0005261809.tif 000011
【図７】
0005261809.tif 000012
【図８Ａ】
0005261809.tif 000013
【図８Ｂ】
0005261809.tif 000014
【図８Ｃ】
0005261809.tif 000015
【図８Ｄ】
0005261809.tif 000016
【図８Ｅ】
0005261809.tif 000017
【図９Ａ】
0005261809.tif 000018
【図９Ｂ】
0005261809.tif 000019
【図９Ｃ】
0005261809.tif 000020
【図１０】
0005261809.tif 000021
【図１１】
0005261809.tif 000022
【図１２】
0005261809.tif 000023
【図１３】
0005261809.tif 000024
【図１４】
0005261809.tif 000025
【図１５】
0005261809.tif 000026
【図１６】
0005261809.tif 000027
【図１７】
0005261809.tif 000028
【図１８】
0005261809.tif 000029
【図１９】
0005261809.tif 000030
【図２０】
0005261809.tif 000031
【図２１】
0005261809.tif 000032
【図２２】
0005261809.tif 000033