(57)【特許請求の範囲】
【請求項１】
クライアントからのリクエストに応じた処理を行うアプリケーションプログラムを実行するアプリケーションサーバ（ＡＰサーバ）が動作するＡＰサーバ計算機と、データベースクエリを実行するデータベースサーバ（ＤＢサーバ）が動作するＤＢサーバ計算機とを含んだ計算機システムにおいて前記ＡＰサーバ計算機の中に配置される負荷分散制御サーバであって、
前記ＡＰサーバからデータベースクエリを受け付けるクエリ受付部と、
前記データベースクエリを前記ＤＢサーバに代わって実行するクエリ代理実行部と、
前記データベースクエリを前記ＤＢサーバ計算機に転送するクエリ転送部と、
前記ＡＰサーバ計算機及び前記ＤＢサーバ計算機の計算機負荷を管理し、前記管理された計算機負荷が所定の条件を満たすか否かを判定するサーバ負荷判定部と、
前記サーバ負荷判定部が、所定の条件を満たすと判定したとき、前記クエリ代理実行部で実行する場合のクエリを実行するための時間を示す第一のクエリ実行時間長を、
前記ＡＰサーバ計算機での前記データベースクエリのクエリ実行ステップ数と、
前記ＡＰサーバ計算機でのクエリ１実行ステップ数あたりの実行時間長と
によって算出し、
前記データベースクエリを前記ＤＢサーバで実行する場合のクエリを実行するための時間を示す第二のクエリ実行時間長を、
前記ＤＢサーバ計算機での前記データベースクエリのクエリ実行ステップ数と、
前記ＤＢサーバ計算機でのクエリ１実行ステップ数あたりの実行時間長と、
前記データベースクエリを前記ＤＢサーバで転送することによって行われる前記ＡＰサーバ計算機と前記ＤＢサーバ計算機との間の通信に要する通信時間長に基づく値と
によって算出し、
前記第一のクエリ実行時間長と前記第二のクエリ実行時間長とを基に、前記受け付けたデータベースクエリを前記クエリ代理実行部で実行するか前記ＤＢサーバ計算機に転送し前記ＤＢサーバで実行するかを判定するクエリ実行サーバ判定部と
を備え、
前記クエリ実行サーバ判定部が、前記データベースクエリを前記クエリ代理実行部で実行すると判定したならば、前記クエリ代理実行部が、前記データベースクエリを実行し、
前記クエリ実行サーバ判定部が、前記データベースクエリを前記ＤＢサーバ計算機に転送し前記ＤＢサーバで実行すると判定したならば、前記クエリ転送部が、前記データベースクエリを前記ＤＢサーバ計算機に転送する、
負荷分散制御サーバ。
【請求項２】
クライアントからのリクエストに応じた処理を行うアプリケーションプログラムを実行するアプリケーションサーバ（ＡＰサーバ）が動作するＡＰサーバ計算機と、データベースクエリを実行するデータベースサーバ（ＤＢサーバ）が動作するＤＢサーバ計算機とを含んだ計算機システムにおいて前記ＡＰサーバ計算機の中に配置される負荷分散制御サーバであって、
前記ＡＰサーバからデータベースクエリを受け付けるクエリ受付部と、
前記データベースクエリを前記ＤＢサーバに代わって実行するクエリ代理実行部と、
前記データベースクエリを前記ＤＢサーバ計算機に転送するクエリ転送部と、
前記ＡＰサーバ計算機及び前記ＤＢサーバ計算機の計算機負荷を管理し、前記管理された計算機負荷が所定の条件を満たすか否かを判定するサーバ負荷判定部と、
前記サーバ負荷判定部が、所定の条件を満たすと判定したとき、前記クエリ代理実行部で実行する場合のクエリを実行するための時間を示す第一のクエリ実行時間長を、
前記ＡＰサーバ計算機での前記データベースクエリのクエリ実行ステップ数と、
前記ＡＰサーバ計算機でのクエリ１実行ステップ数あたりの実行時間長と
によって算出し、
前記データベースクエリを前記ＤＢサーバで実行する場合のクエリを実行するための時間を示す第二のクエリ実行時間長を、
前記クエリ代理実行部で前記データベースクエリを前記ＤＢに代わって実行することに要するコストであるＡＰサーバ計算機でのクエリ実行コストと、
前記ＤＢサーバ計算機の前記ＡＰサーバ計算機に対する処理性能比率と、
前記データベースクエリを前記ＤＢサーバで転送することによって行われる前記ＡＰサーバ計算機と前記ＤＢサーバ計算機との間の通信に要する通信時間長に基づく値と
によって算出し、
前記第一のクエリ実行時間長と前記第二のクエリ実行時間長とを基に、前記受け付けたデータベースクエリを前記クエリ代理実行部で実行するか前記ＤＢサーバ計算機に転送し前記ＤＢサーバで実行するかを判定するクエリ実行サーバ判定部と
を備え、
前記クエリ実行サーバ判定部が、前記データベースクエリを前記クエリ代理実行部で実行すると判定したならば、前記クエリ代理実行部が、前記データベースクエリを実行し、
前記クエリ実行サーバ判定部が、前記データベースクエリを前記ＤＢサーバ計算機に転送し前記ＤＢサーバで実行すると判定したならば、前記クエリ転送部が、前記データベースクエリを前記ＤＢサーバ計算機に転送する、
負荷分散制御サーバ。
【請求項３】
前記所定の条件が、
前記ＡＰ計算機サーバが第一の基準値よりも高い過負荷であり且つ前記ＤＢ計算機サーバが第二の基準値よりも低い低負荷である、
請求項１又は２記載の負荷分散制御サーバ。
【請求項４】
前記所定の条件を満たさないと判定した場合には、前記受け付けたデータベースクエリを前記クエリ代理実行部で実行するか前記ＤＢサーバ計算機に転送し前記ＤＢサーバで実行するかを判定することなく、前記受け付けたデータベースクエリを前記クエリ代理実行部で実行すると決定する、
請求項３記載の負荷分散制御サーバ。
【請求項５】
前記通信時間長が、前記ＡＰサーバ計算機から前記ＤＢサーバ計算機に転送される前記データベースクエリのサイズと、前記ＤＢサーバ計算機から前記ＡＰサーバ計算機に応答されるクエリ結果のサイズと、前記ＡＰサーバ計算機と前記ＤＢサーバ計算機との間の通信の速度とに基づいて算出される、
請求項１乃至４のうちのいずれか１項に記載の負荷分散制御サーバ。
【請求項６】
前記クエリ実行サーバ判定部は、前記第一のクエリ実行時間長が、前記第二のクエリ実行時間長よりも大きい場合に、前記受け付けたデータベースクエリを前記ＤＢサーバ計算機に転送し前記ＤＢサーバで実行すると判定する、
請求項５記載の負荷分散制御サーバ。
【請求項７】
前記クエリ転送部が、前記データベースクエリを前記ＤＢサーバ計算機に転送する場合、前記受け付けたデータベースクエリに代替して前記ＤＢサーバで実行可能な形式で表現されたデータを転送する、
請求項１乃至６のうちのいずれか１項に記載の負荷分散制御サーバ。
【請求項８】
前記クエリ代理実行部が、前記データベースクエリとして、データベースアクセス言語、あるいはＳＱＬプロシージャの一部に対して処理する、
請求項１乃至７のうちのいずれか１項に記載の負荷分散制御サーバ。
【請求項９】
クライアントからのリクエストに応じた処理を行うアプリケーションプログラムを実行するアプリケーションサーバ（ＡＰサーバ）が動作するＡＰサーバ計算機と、データベースクエリを実行するデータベースサーバ（ＤＢサーバ）が動作するＤＢサーバ計算機とを含んだ計算機システムにおいて前記ＡＰサーバ計算機の中に配置される負荷分散制御サーバによる負荷分散制御方法であって、
前記負荷分散制御サーバ内のクエリ受付部が、前記ＡＰサーバからデータベースクエリを受け付け、
前記負荷分散制御サーバ内のクエリ代理実行部が、前記データベースクエリを前記ＤＢサーバに代わって実行し、
前記負荷分散制御サーバ内のサーバ負荷判定部が、前記ＡＰサーバ計算機及び前記ＤＢサーバ計算機の計算機負荷を管理し、前記管理された計算機負荷が所定の条件を満たすか否かを判定し、
前記所定の条件を満たすと判定したとき、
前記負荷分散制御サーバ内のクエリ実行サーバ判定部が、前記クエリ代理実行部で実行する場合のクエリを実行するための時間を示す第一のクエリ実行時間長を、
前記ＡＰサーバ計算機での前記データベースクエリのクエリ実行ステップ数と、
前記ＡＰサーバ計算機でのクエリ１実行ステップ数あたりの実行時間長と
によって算出し、
前記データベースクエリを前記ＤＢサーバで実行する場合のクエリを実行するための時間を示す第二のクエリ実行時間長を、
前記ＤＢサーバ計算機での前記データベースクエリのクエリ実行ステップ数と、
前記ＤＢサーバ計算機でのクエリ１実行ステップ数あたりの実行時間長と、
前記データベースクエリを前記ＤＢサーバで転送することによって行われる前記ＡＰサーバ計算機と前記ＤＢサーバ計算機との間の通信に要する通信時間長に基づく値と
によって算出し、
前記第一のクエリ実行時間長と前記第二のクエリ実行時間長とを基に、前記受け付けたデータベースクエリを前記クエリ代理実行部で実行するか前記ＤＢサーバ計算機に転送し前記ＤＢサーバで実行するかを判定し、
前記クエリ実行サーバ判定部が、前記データベースクエリを前記クエリ代理実行部で実行すると判定したならば、前記クエリ代理実行部が、前記データベースクエリを実行し、
前記クエリ実行サーバ判定部が、前記データベースクエリを前記ＤＢサーバ計算機に転送し前記ＤＢサーバで実行すると判定したならば、前記クエリ転送部が、前記データベースクエリを前記ＤＢサーバ計算機に転送する、
負荷分散制御方法。
【請求項１０】
クライアントからのリクエストに応じた処理を行うアプリケーションプログラムを実行するアプリケーションサーバ（ＡＰサーバ）が動作するＡＰサーバ計算機と、データベースクエリを実行するデータベースサーバ（ＤＢサーバ）が動作するＤＢサーバ計算機とを含んだ計算機システムにおいて前記ＡＰサーバ計算機の中に配置される負荷分散制御サーバによる負荷分散制御方法であって、
前記負荷分散制御サーバ内のクエリ受付部が、前記ＡＰサーバからデータベースクエリを受け付け、
前記負荷分散制御サーバ内のクエリ代理実行部が、前記データベースクエリを前記ＤＢサーバに代わって実行し、
前記負荷分散制御サーバ内のサーバ負荷判定部が、前記ＡＰサーバ計算機及び前記ＤＢサーバ計算機の計算機負荷を管理し、前記管理された計算機負荷が所定の条件を満たすか否かを判定し、
前記所定の条件を満たすと判定したとき、
前記負荷分散制御サーバ内のクエリ実行サーバ判定部が、前記クエリ代理実行部で実行する場合のクエリを実行するための時間を示す第一のクエリ実行時間長を、
前記ＡＰサーバ計算機での前記データベースクエリのクエリ実行ステップ数と、
前記ＡＰサーバ計算機でのクエリ１実行ステップ数あたりの実行時間長と
によって算出し、
前記データベースクエリを前記ＤＢサーバで実行する場合のクエリを実行するための時間を示す第二のクエリ実行時間長を、
前記クエリ代理実行部で前記データベースクエリを前記ＤＢに代わって実行することに要するコストであるＡＰサーバ計算機でのクエリ実行コストと、
前記ＤＢサーバ計算機の前記ＡＰサーバ計算機に対する処理性能比率と、
前記データベースクエリを前記ＤＢサーバで転送することによって行われる前記ＡＰサーバ計算機と前記ＤＢサーバ計算機との間の通信に要する通信時間長に基づく値と
によって算出し、
前記第一のクエリ実行時間長と前記第二のクエリ実行時間長とを基に、前記受け付けたデータベースクエリを前記クエリ代理実行部で実行するか前記ＤＢサーバ計算機に転送し前記ＤＢサーバで実行するかを判定し、
前記クエリ実行サーバ判定部が、前記データベースクエリを前記クエリ代理実行部で実行すると判定したならば、前記クエリ代理実行部が、前記データベースクエリを実行し、
前記クエリ実行サーバ判定部が、前記データベースクエリを前記ＤＢサーバ計算機に転送し前記ＤＢサーバで実行すると判定したならば、前記クエリ転送部が、前記データベースクエリを前記ＤＢサーバ計算機に転送する、
負荷分散制御方法。
【請求項１１】
クライアントからのリクエストに応じた処理を行うアプリケーションプログラムを実行するアプリケーションサーバ（ＡＰサーバ）が動作するＡＰサーバ計算機と、データベースクエリを実行するデータベースサーバ（ＤＢサーバ）が動作するＤＢサーバ計算機とを含んだ計算機システムにおいて前記ＡＰサーバ計算機の中に配置される負荷分散制御サーバで実行されるコンピュータプログラムであって、
前記負荷分散制御サーバ内のクエリ受付部が、前記ＡＰサーバからデータベースクエリを受け付け、
前記負荷分散制御サーバ内のクエリ代理実行部が、前記データベースクエリを前記ＤＢサーバに代わって実行し、
前記負荷分散制御サーバ内のサーバ負荷判定部が、前記ＡＰサーバ計算機及び前記ＤＢサーバ計算機の計算機負荷を管理し、前記管理された計算機負荷が所定の条件を満たすか否かを判定し、
前記所定の条件を満たすと判定したとき、
前記負荷分散制御サーバ内のクエリ実行サーバ判定部が、前記クエリ代理実行部で実行する場合のクエリを実行するための時間を示す第一のクエリ実行時間長を、
前記ＡＰサーバ計算機での前記データベースクエリのクエリ実行ステップ数と、
前記ＡＰサーバ計算機でのクエリ１実行ステップ数あたりの実行時間長と
によって算出し、
前記データベースクエリを前記ＤＢサーバで実行する場合のクエリを実行するための時間を示す第二のクエリ実行時間長を、
前記ＤＢサーバ計算機での前記データベースクエリのクエリ実行ステップ数と、
前記ＤＢサーバ計算機でのクエリ１実行ステップ数あたりの実行時間長と、
前記データベースクエリを前記ＤＢサーバで転送することによって行われる前記ＡＰサーバ計算機と前記ＤＢサーバ計算機との間の通信に要する通信時間長に基づく値と
によって算出し、
前記第一のクエリ実行時間長と前記第二のクエリ実行時間長とを基に、前記受け付けたデータベースクエリを前記クエリ代理実行部で実行するか前記ＤＢサーバ計算機に転送し前記ＤＢサーバで実行するかを判定し、
前記クエリ実行サーバ判定部が、前記データベースクエリを前記クエリ代理実行部で実行すると判定したならば、前記クエリ代理実行部が、前記データベースクエリを実行し、
前記クエリ実行サーバ判定部が、前記データベースクエリを前記ＤＢサーバ計算機に転送し前記ＤＢサーバで実行すると判定したならば、前記クエリ転送部が、前記データベースクエリを前記ＤＢサーバ計算機に転送する、
コンピュータプログラム。
【請求項１２】
クライアントからのリクエストに応じた処理を行うアプリケーションプログラムを実行するアプリケーションサーバ（ＡＰサーバ）が動作するＡＰサーバ計算機と、データベースクエリを実行するデータベースサーバ（ＤＢサーバ）が動作するＤＢサーバ計算機とを含んだ計算機システムにおいて前記ＡＰサーバ計算機の中に配置される負荷分散制御サーバで実行されるコンピュータプログラムであって、
前記負荷分散制御サーバ内のクエリ受付部が、前記ＡＰサーバからデータベースクエリを受け付け、
前記負荷分散制御サーバ内のクエリ代理実行部が、前記データベースクエリを前記ＤＢサーバに代わって実行し、
前記負荷分散制御サーバ内のサーバ負荷判定部が、前記ＡＰサーバ計算機及び前記ＤＢサーバ計算機の計算機負荷を管理し、前記管理された計算機負荷が所定の条件を満たすか否かを判定し、
前記所定の条件を満たすと判定したとき、
前記負荷分散制御サーバ内のクエリ実行サーバ判定部が、前記クエリ代理実行部で実行する場合のクエリを実行するための時間を示す第一のクエリ実行時間長を、
前記ＡＰサーバ計算機での前記データベースクエリのクエリ実行ステップ数と、
前記ＡＰサーバ計算機でのクエリ１実行ステップ数あたりの実行時間長と
によって算出し、
前記データベースクエリを前記ＤＢサーバで実行する場合のクエリを実行するための時間を示す第二のクエリ実行時間長を、
前記クエリ代理実行部で前記データベースクエリを前記ＤＢに代わって実行することに要するコストであるＡＰサーバ計算機でのクエリ実行コストと、
前記ＤＢサーバ計算機の前記ＡＰサーバ計算機に対する処理性能比率と、
前記データベースクエリを前記ＤＢサーバで転送することによって行われる前記ＡＰサーバ計算機と前記ＤＢサーバ計算機との間の通信に要する通信時間長に基づく値と
によって算出し、
前記第一のクエリ実行時間長と前記第二のクエリ実行時間長とを基に、前記受け付けたデータベースクエリを前記クエリ代理実行部で実行するか前記ＤＢサーバ計算機に転送し前記ＤＢサーバで実行するかを判定し、
前記クエリ実行サーバ判定部が、前記データベースクエリを前記クエリ代理実行部で実行すると判定したならば、前記クエリ代理実行部が、前記データベースクエリを実行し、
前記クエリ実行サーバ判定部が、前記データベースクエリを前記ＤＢサーバ計算機に転送し前記ＤＢサーバで実行すると判定したならば、前記クエリ転送部が、前記データベースクエリを前記ＤＢサーバ計算機に転送する、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ヘテロジーニアスな計算機システムでの負荷分散制御の技術に関する。
【背景技術】
【０００２】
例えば、クライアントからのリクエストに応じた処理を実行するアプリケーションサーバ（ＡＰサーバ）と、ＡＰサーバから出力されるデータベースクエリ（ＤＢクエリ）を実行するデータベースサーバ（ＤＢサーバ）とに機能を分離し、ＡＰサーバ及びＤＢサーバをそれぞれ独立した計算機で動作させる、つまりヘテロジーニアス（異機種混在）な計算機システムを構築することで、システムパフォーマンスを向上する技術が知られている。ＡＰサーバが動作する計算機（以下、「ＡＰサーバ計算機」と呼ぶ）とＤＢサーバが動作する計算機（以下、「ＤＢサーバ計算機」と呼ぶ）で構成されるシステムにおいては、一般的に、ＤＢサーバ計算機が性能ボトルネックになる傾向がある。
【０００３】
これに対して、クライアントからのリクエストに指定されたＳＱＬ（Structured Query Language）をＤＢサーバに代わってＡＰサーバで実行する技術（以下、「代理実行技術」と呼ぶ）も知られている。特許文献１に記載の技術では、ＳＱＬプロシージャの一部をＡＰサーバが代理実行する。このように、ＤＢクエリをＡＰサーバで代理実行することにより、ＤＢサーバ計算機が性能ボトルネックになる度合いを軽減することができる。この種の技術では、ＡＰサーバで代理実行する処理は固定的であり、ＤＢサーバ計算機の負荷は下がるが、アクセスの量的変化に伴い、ＡＰサーバ計算機が過負荷になることがある。
【０００４】
特許文献２には、所定の計算機から複数のサーバ計算機が等距離に位置する計算機システム（以下、「ホモジーニアスな計算機システム」と呼ぶ）における負荷分散技術が開示されている。具体的には、特許文献２では、複数のサーバ計算機に所定の計算機（データ処理システム）が接続されており、所定の計算機が、各サーバ計算機の負荷状態を測定し、最も負荷の低いサーバ計算機を、リクエストを処理するサーバ計算機と動的に決定し、決定したサーバ計算機にリクエストを転送する。
【０００５】
しかし、全てのリクエストについて、リクエストの実行に要するリクエスト時間長が同じであるとは限らないことがある。
【０００６】
特許文献３には、ホモジーニアスな計算機システムにおいて、リクエストの実行時間長を予測する技術が開示されている。
【０００７】
【特許文献１】特開平１０−２４０５９１公報
【特許文献２】特開平０７−０９３２３８公報
【特許文献３】特開２００３−５８５１８公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
ＡＰサーバがＤＢサーバに代わってＤＢクエリを実行する（以下、「代理実行する」と呼ぶ）計算機システムは、ホモジーニアスな計算機システムではなく、ヘテロジーニアスな計算機システムである。
【０００９】
このようなヘテロジーニアスな計算機システムに、ホモジーニアスな計算機システムに有用な技術を単純に適用することはできず、仮に適用できたとしても、ＤＢクエリの負荷分散を適切に行うことはできない。その一つの理由として、ホモジーニアスな計算機システムでは、所定の計算機システムから複数のサーバ計算機のうちのいずれかに必ずリクエストの転送が発生するのに対し、ヘテロジーニアスな計算機システムでは、ＡＰサーバ計算機からＤＢサーバ計算機へのＤＢクエリの転送が必ずしも発生しない点にある。
【００１０】
従って、本発明の目的は、ＡＰサーバ計算機とＤＢサーバ計算機とを含むヘテロジーニアスな計算機システムにおいて適切に負荷分散を行うことにある。
【００１１】
本発明の他の目的は、後の説明から明らかになるであろう。
【課題を解決するための手段】
【００１２】
ＡＰサーバ計算機とＤＢサーバ計算機とを含んだヘテロジーニアスな計算機システムに、ＤＢクエリを代理実行する機能を備えた負荷分散制御サーバを備える。負荷分散制御サーバは、ＡＰサーバからＤＢクエリを受け付け、ＤＢクエリの実行による計算機リソースの消費度合いに関わる要素である計算機リソース消費関連要素に基づいて、そのＤＢクエリを代理実行するかＤＢサーバ計算機に転送しＤＢサーバで実行するかを判定する。代理実行すると判定したならば、ＤＢクエリを代理実行し、ＤＢクエリをＤＢサーバ計算機に転送しＤＢサーバで実行すると判定したならば、ＤＢクエリをＤＢサーバ計算機に転送する。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の一実施形態に係る負荷分散制御サーバが適用されたデータ処理代理実行サーバを備える計算機システムの幾つかの実施例として、実施例１乃至実施例３を説明する。その際、負荷分散制御サーバの全ての構成要素が、ＡＰサーバ計算機に存在するものとする。しかし、それは一例であり、負荷分散制御サーバの少なくとも一部分が、ＡＰサーバ計算機及びＤＢサーバ計算機以外の計算機に存在しても良い。
【００１４】
実施例１乃至実施例３を説明する前に、ＤＢクエリを代理実行するかＤＢサーバ計算機に転送してＤＢサーバで実行するかの判定（以下、「クエリ実行サーバ判定」と呼ぶ）の方法について、以下の第一の方法乃至第三の方法を例に採り、詳細に説明する。その際、クエリサーバ実行判定の対象とされるＤＢクエリを「対象ＤＢクエリ」と呼ぶ。
【００１５】
第一及び第二の方法は、クエリ実行サーバ判定を、対象ＤＢクエリをＡＰサーバ計算機で代理実行することに要するコスト（以下、「ＡＰサーバでのクエリ実行コスト」と呼ぶ）と、対象ＤＢクエリをＤＢサーバ計算機に転送してＤＢサーバで実行することに要するクエリ実行コスト（以下、「ＤＢサーバでのクエリ実行コスト」と呼ぶ）とをそれぞれ算出し、算出されたクエリ実行コスト同士を比較し、比較の結果に基づいて、クエリ実行サーバ判定を行う方法である（本明細書において、「コスト」とは、金額のことではなく、計算機リスソースをどのぐらい消費するかの度合いを意味する）。第三の方法は、対象ＤＢクエリの形式に基づいてクエリ実行サーバ判定を行う方法である。ＡＰサーバでのクエリ実行コスト、ＤＢサーバでのクエリ実行コスト、及び対象ＤＢクエリの形式のいずれも、前述した計算機リソース消費関連要素の一例である。
【００１６】
第一及び第二の方法に関して、ＡＰサーバ計算機でのクエリ実行コストと、ＤＢサーバ計算機に転送して実行するクエリ実行コストの比較は、（式１）の不等式、
（ＡＰサーバ計算機でのクエリ実行コスト）＞（ＤＢサーバ計算機でのクエリ実行コスト）＋（クエリ通信コスト）
・・（式１）
で表現される。クエリ実行サーバ判定において算出された「ＡＰサーバ計算機でのクエリ実行コスト」、「ＤＢサーバのクエリ実行コスト」及び「クエリ通信コスト」を用いて（式１）の不等式が成立すれば、対象ＤＢクエリをＤＢサーバ計算機に転送しＤＢサーバで実行すると判定され、（式１）の不等式が成立しなければ、対象ＤＢクエリを代理実行すると判定される。
【００１７】
ここで、「ＡＰサーバ計算機でのクエリ実行コスト」は、ＡＰサーバ計算機で対象ＤＢクエリを実行するのに要する時間長（以下、「ＡＰ実行時間長」と呼ぶ）を意味する。「ＤＢサーバのクエリ実行コスト」は、ＤＢサーバ計算機で対象ＤＢクエリを実行するのに要する時間長（以下、「ＤＢ実行時間長」と呼ぶ）を意味する。「クエリ通信コスト」は、ＤＢサーバ計算機に対象ＤＢクエリを転送して実行する際に発生する通信時間を意味する。
【００１８】
（式１）における各クエリ実行コストを算出する（見積もる）際には、性能と精度のトレードオフを考慮することが望ましい。クエリ実行コストを高い精度で算出するには、クエリ実行コスト算出のための高度な演算、及びその算出に必要な情報を採取する処理が発生する。演算や情報採取を含んだコスト算出処理が影響して、システムパフォーマンスが低下するおそれがある。そのため、クエリ実行コストの算出には、性能への影響に配慮した上で、妥当な精度を算出できる方法を採用することが望ましい。
【００１９】
第一の方法は、クエリ実行コストの算出（見積り）の精度を優先した方法である。第一の方法では、「ＡＰサーバ計算機でのクエリ実行コスト」が、ＡＰサーバ計算機での対象ＤＢクエリの実行プランに基づいて算出され、「ＤＢサーバ計算機でのクエリ実行コスト」が、ＤＢサーバ計算機での対象ＤＢクエリの実行プランに基づいて算出される。実行プランには、対象ＤＢクエリに対する処理手続きが記述されており、対象ＤＢクエリを実行した際の、ユーザデータに対するシーケンシャルアクセス、インデクススキャンといったプリミティブな操作の回数（以下、「実行ステップ数」と呼ぶ）を知ることができる。この実行ステップ数に、プリミティブな操作に必要な実行時間長を乗算することで、精度の高いコスト算出ができることが期待できる。それにより、「ＡＰサーバ計算機でのクエリ実行コスト」を、ＡＰサーバ計算機で対象ＤＢクエリを実行する場合の実行プランが表す実行ステップ数に対して、プリミティブな操作に要する実行時間長を乗算することで算出することができる。また、「ＤＢサーバ計算機でのクエリ実行コスト」は、ＤＢサーバ計算機で対象ＤＢクエリを実行する場合の実行プランにおける実行ステップ数に対して、プリミティブな操作に要する実行時間長を乗算することで算出することができる。
【００２０】
「クエリ通信コスト」は、ＡＰサーバ計算機からＤＢサーバ計算機に対象ＤＢクエリを転送する通信コストと、ＤＢサーバ計算機からＡＰサーバ計算機に対象ＤＢクエリの実行結果を転送する通信コストとの総和によって算出される。具体的には、例えば、「クエリ通信コスト」は、対象ＤＢクエリのサイズ（以下、「クエリサイズ」と呼ぶ）、及び対象ＤＢクエリの実行結果のサイズ（以下、「クエリ結果サイズ」と呼ぶ）との総和を、ＡＰサーバ計算機とＤＢサーバ計算機との間の転送の速度で除算することで、算出される。
【００２１】
以上のことから、第一の方法では、（式１）を、以下の（式２）、
（ＡＰサーバ計算機でのクエリ実行ステップ数）×（ＡＰサーバ計算機での１実行ステップ数あたりの実行時間長）＞（ＤＢサーバ計算機でのクエリ実行ステップ数）×（ＤＢサーバ計算機での１実行ステップ数あたりの実行時間長）＋（（クエリサイズ）＋（クエリ結果サイズ））／（転送速度）・・（式２）
として定義することができる。
【００２２】
第二の方法は、第一の方法における、「ＤＢサーバ計算機でのクエリ実行コスト」の算出を簡易化した方法である。「ＤＢサーバ計算機でのクエリ実行コスト」を算出するためには、例えば、以下の（１）乃至（３）、
（１）ＤＢサーバが管理する実行プラン生成用情報（実行プランを生成するため必要な情報、例えばディクショナリ表）の収集、
（２）実行ステップに対する実行時間長の収集、
（３）収集された実行プラン生成用情報、及び実行ステップに対する実行時間長を用いて、対象ＤＢクエリの実行時間長を算出すること、
が必要である。そのため、計算機への負荷が発生する。第二の方法では、第一の方法よりも計算機への負荷を軽減することができる。
【００２３】
ＡＰサーバが、ＤＢサーバと同じディクショナリ表及びユーザデータをキャッシュしていると仮定すると、対象ＤＢクエリに対するＤＢサーバ計算機とＡＰサーバ計算機の実行ステップ数は等しくなる。なぜなら、実行ステップ数が、ディクショナリ表及びユーザデータに基づいて算出されるためである。故に、結果として、両者のクエリ実行コストの違いを、ＤＢサーバのＡＰサーバに対する処理性能の比率（以下、「ＤＢサーバ性能比率」と呼ぶ）を導入して近似することができる。具体的には、「ＤＢサーバ計算機でのクエリ実行コスト」を、「ＡＰサーバ計算機でのクエリ実行コスト」に「ＤＢサーバ性能比率」を乗算することで、「ＤＢサーバ計算機のクエリ実行コスト」を近似することができる。
【００２４】
以上のことから、（式２）は、以下の（式３）、
（ＡＰサーバ計算機でのクエリ実行ステップ数）×（ＡＰサーバ計算機での１実行ステップ数あたりの実行時間長）＞（ＡＰサーバ計算機でのクエリ実行コスト）×（ＤＢサーバ性能比率）＋（（クエリサイズ）＋（クエリ結果サイズ））／（転送速度）・・（式３） 
として定義することができる。
【００２５】
「ＤＢサーバ性能比率」の具体的な算出方法の一例として、ＤＢサーバのＡＰサーバに対する１ＤＢクエリあたりの平均実行時間長（以下、「平均クエリ実行時間長」と呼ぶ）の比率を求める方法が考えられる。この場合の「ＤＢサーバ性能比率」の計算機を以下の（式４）、
（ＤＢサーバ性能比率）＝（ＤＢサーバ計算機での平均クエリ実行時間長）／（ＡＰサーバ計算機での平均クエリ実行時間長）
・・（式４）
に定義する。
【００２６】
「ＤＢサーバ性能比率」の算出に平均クエリ実行時間長を利用することの理由は、次のとおりである。すなわち、ＤＢクエリを受け付けて、その実行結果を応答する処理は、待ち行列として捉えることができ、待ち行列理論の平均待ち時間に対応する平均クエリ実行時間長を、性能比率として採用することが妥当と考えられるからである。具体的には、待ち行列理論のＭ／Ｍ／１モデルでは、単位時間に到着する呼の数の平均値をλ、単位時間に交換機でサービス可能な呼の数の平均値をμとした場合に、平均サービス時間をts（=１／μ）、交換機が実際に使われている時間の割合である利用率λ／μをρとおくと、平均待ち時間はρ／（１−ρ）×tsである、といった知見が得られている。ここで、平均待ち時間を、平均クエリ実行時間長に置き換えると、平均クエリ実行時間長は、利用率が１に近づくにつれて急激に増えることになり、これは一般的なデータベースにおける平均クエリ実行時間長の変化に類似している。
【００２７】
なお、「ＤＢサーバ性能比率」の算出には、平均クエリ実行時間長に代えて又は加えて、ＣＰＵ使用率などの各種処理能力を用いることもできる。
【００２８】
第三の方法は、第一及び第二の方法よりも簡易的なクエリ実行サーバ判定方法である。第三の方法は、クエリの形式と計算機リソースの消費度合いとが関連しているという観点に基づき、計算機リソース消費関連要素の一例としてクエリ形式を選定した方法である。具体的には、例えば、第三の方法は、対象ＤＢクエリが特定のクエリ形式に合致した場合に（式１）を満たすという仮定に基づく。つまり、対象ＤＢクエリが特定のクエリ形式に合致した場合に、対象ＤＢクエリをＤＢサーバ計算機に転送すると判定される。（式１）の不等式が成立するＤＢクエリの傾向として、ＣＰＵインテンシブであり且つクエリ結果サイズが小さいことが挙げられる。これに合致するＤＢクエリの一例として、Ｇｒｏｕｐ  Ｂｙ句が挙げられる。Ｇｒｏｕｐ  Ｂｙ句は、行データをグループ化して、同一グループに対して、合計や平均といった集計を行う際に活用される。これに対する実行プランは、Ｇｒｏｕｐ  Ｂｙ句で指定されたカラムのデータ集合に対して、ソート処理を行い、ソートされたデータ集合に対して、集計を行うため、ＣＰＵインテンシブになる傾向がある。また、グループ化により、ＤＢクエリに対するクエリ結果件数は少なくなり、結果として、クエリ結果サイズが小さくなる傾向にある。そこで、Ｇｒｏｕｐ  Ｂｙ句を含む対象ＤＢクエリが検出された場合には、（式１）の不等式を満たすとの仮定の基で、対象ＤＢクエリをＤＢサーバ計算機に転送するとの判定になる。ＣＰＵインテンシブであり且つクエリ結果サイズが小さくなる傾向にあるクエリ形式のＤＢクエリとしては、Ｇｒｏｕｐ  Ｂｙ句の他に、ソート処理や、行データのシーケンシャル操作を行うＤＢクエリが考えられる。例えば、ＪＯＩＮが指定された内部結合においても、その結合方式によっては、結合対象となる表における行データのソート処理や、行データ同士の突き合せ処理などがＣＰＵインテンシブになる。なおかつ、結合元の表が小さい場合、結合結果が小さくなり、クエリ結果サイズも小さくなる。
【００２９】
特定のクエリ形式としては、データベースクエリを代理実行した場合のそのデータベースクエリの実行時間長が、そのデータベースクエリをＤＢサーバで実行する場合のクエリの実行時間長と、そのデータベースクエリをＤＢサーバで転送することによって行われる通信時間長（ＡＰサーバ計算機とＤＢサーバ計算機との間の通信に要する通信時間長）との和よりも多くなるようなクエリ形式である。好ましくは、特定のクエリ形式のデータベースクエリは、計算機リソースの消費量が他のクエリ形式のデータベースクエリよりも高く、クエリ結果サイズが他のクエリ形式のデータベースクエリよりも小さいクエリである。
【００３０】
以上のように、第三の方法では、ＤＢクエリのクエリ形式に基づいてクエリ実行サーバ判定が行われる。
【００３１】
以下、図面を参照しながら、本発明の幾つかの実施例について詳細に説明する。その際、ＣＰＵがコンピュータプログラムを読み込んで実行することにより行われる処理の主体を、説明を分かりやすくするために、ＣＰＵではなくコンピュータプログラムとする場合がある。
【実施例１】
【００３２】
図１は、本発明の実施例１に係る計算機システムの構成を示すブロック図である。
【００３３】
クライアント計算機１００、１台以上のＡＰサーバ計算機１１０及びＤＢサーバ計算機１２０が、ＬＡＮ（Local Area Network）やＷＡＮ（Wide Area Network）などの通信ネットワーク１１４に接続されている。これにより、計算機１００、１１０及び１２０が相互に通信することができる。
【００３４】
クライアント計算機１００は、ユーザから指定されたリクエストをＡＰサーバ計算機１１０とやりとりして処理するユーザインタフェースである。
【００３５】
ＡＰサーバ計算機１１０は、ＣＰＵ（Central
Processing Unit）１１１等のプロセッサ、主記憶装置（メモリ）１１２、通信インタフェース１１３、及びこれらを接続するバス１１５などから構成される。ＡＰサーバ計算機１１０は、通信インタフェース１１３を介して通信ネットワーク１１４に接続される。ＣＰＵ１１１は、主記憶装置１１２に格納される各種プログラムを実行する。主記憶装置１１２は、プログラムが処理を実行するための各種データを保持する。
【００３６】
ＤＢサーバ計算機１２０は、ＣＰＵ１２１等のプロセッサ、主記憶装置（メモリ）１２２、通信インタフェース１２３、ディスクインタフェース１２４、記憶装置１２５、及びこれらを接続するバス１２６などから構成される。ＤＢサーバ計算機１２０は、通信インタフェース１２３を介して通信ネットワーク１１４に接続される。ＣＰＵ１２１は、主記憶装置１２２に格納される各種プログラムを実行する。主記憶装置１２２は、プログラムが処理を実行するための各種データを保持する。記憶装置１２５は、例えば、ハードディスク等のディスク型の記憶メディアのドライブであり、それ故、記憶装置１２５に対するインタフェース装置がディスクインタフェース１２４となっている。しかし、記憶装置１２５は、そのようなドライブに限らず、他種の記憶装置を採用することも可能である。
【００３７】
図２は、ＡＰサーバ計算機１１０及びＤＢサーバ計算機１２０の構成を示す。
【００３８】
ＡＰサーバ計算機１１０におけるＡＰサーバ２００は、クライアント計算機１００からのリクエストに応じて、アプリケーションプログラム２０１を実行するサーバプログラムである。アプリケーションプログラム２０１は、クライアント計算機１００に対してサービスを提供するための業務ロジックや、データアクセスプロセスから構成される。
【００３９】
ＡＰサーバ計算機１１０には、ＡＰサーバ２００の他に、データ処理代理実行サーバ２０２が備えられる。データ処理代理実行サーバ２０２は、ＤＢサーバ計算機１２０が管理するユーザデータを含む原本データ２９０のキャッシュ機能を持たせたプロキシサーバを意味し、アプリケーションプログラム２０１がアクセスするデータを、キャッシュデータ２７２から返すことができる。キャッシュデータ２７２は、原本データ２９０の全部又は一部である。これにより、ＤＢサーバ計算機１２０にアクセスする必要がなくなるため、通信ネットワーク１１４のトラフィックの軽減、ＤＢサーバ計算機１２０の負荷の軽減、及び、クライアント計算機１００から見た応答時間の短縮が期待できる。
【００４０】
データ処理代理実行サーバ２０２は、クエリ実行部２１０、サーバ負荷判定部２２０、クエリ実行サーバ判定部２３０、クエリ転送部２４０、及びサーバ情報収集部２５０を有する。
【００４１】
クエリ実行部２１０は、ＡＰサーバ２００からのＤＢクエリを代理実行することができる。ＤＢクエリは、例えばＳＱＬ（Structured Query Language）の場合、参照系クエリであるＳＥＬＥＣＴ文、更新系クエリであるＩＮＳＥＲＴ文、ＵＰＤＡＴＥ文、ＤＥＬＥＴＥ文がある。ＳＱＬは、リレーショナルデータベースマネージメントシステム（ＲＤＢＭＳ）において、データの操作や定義を行うためのデータベースアクセス言語である。データベースアクセス言語には、ＸＰａｔｈなどのＸＭＬパス言語、ＸＱｕｅｒｙ（静的型付け機能を持つＸＭＬデータ問合せのための関数型言語）などもある。さらに、実施例１では、ＳＱＬプロシージャといった、データアクセス要求を含む一連の処理をまとめた手続きプログラムもＤＢクエリに含まれる。実施例１では、データベースアクセス言語としてＳＱＬを扱う。
【００４２】
クエリ実行部２１０は、クエリ受付モジュール２１４、クエリ解析モジュール２１１、クエリ制御モジュール２１２、及びクエリ実行モジュール２１３で構成される。クエリ受付モジュール２１４は、ＡＰサーバ２００からＤＢクエリを受け付ける。クエリ解析モジュール２１１は、クエリ実行結果テーブル２７０（図３参照）、及びディクショナリ表テーブル２７１（図４参照）を用いて、ＡＰサーバ２００から受付けたＤＢクエリを解析する。クエリ制御モジュール２１２は、サーバ負荷判定部２２０、クエリ実行サーバ判定部２３０を用いて、受け付けたＤＢクエリ（対象ＤＢクエリ）をＤＢサーバで実行することになった場合、クエリ転送部２４０を起動してＤＢサーバ２０３に対象ＤＢクエリを転送して実行させる。データ代理処理実行サーバ２０２でＤＢクエリを代理実行することになった場合、クエリ実行モジュール２１３は、クエリ実行結果テーブル２７０（図３参照）、及びキャッシュデータテーブル２７２（図５、図６参照）を用いて、そのＤＢクエリを代理実行する。クエリ実行部２１０は、ＤＢクエリの代理実行の結果を、ＡＰサーバ２００に返す。
【００４３】
サーバ負荷判定部２２０は、クエリ実行部２１０から起動され、サーバ負荷状況判定モジュール２２１で構成される。サーバ負荷状況判定モジュール２２１は、サーバ負荷判定基準テーブル２７３（図７参照）、及びサーバ計算機統計情報テーブル２８０（図８参照）を用いて、ＡＰサーバ計算機１１０が過負荷であり且つＤＢサーバ計算機１２０が低負荷であるか否かを判定する。なお、「ＡＰサーバ計算機１１０が過負荷」であるとは、例えば、ＡＰサーバ計算機１１０の所定種類の負荷（例えばＣＰＵ使用率）が第一の基準値よりも高い、又は、ＡＰサーバ計算機１１０の所定種類の負荷がＤＢサーバ計算機１２０よりも高いことである。「ＤＢサーバ計算機１２０が低負荷である」とは、例えば、ＤＢサーバ計算機１２０の所定種類の負荷（例えばＣＰＵ使用率）が第二の基準値よりも低い、又は、ＤＢサーバ計算機１２０の所定種類の負荷がＡＰサーバ計算機１１０よりも低いことである。第一の基準値及び第二の基準値は、同一の基準値であっても良いし、異なる基準値であっても良い。その場合、第一の基準値は、第二の基準値よりも高くても小さくても良い。
【００４４】
クエリ実行サーバ判定部２３０は、クエリ実行部２１０から起動され、ＡＰサーバ計算機実行コスト見積モジュール２３１、ＤＢサーバ計算機実行コスト見積モジュール２３２、ネットワーク処理コスト見積モジュール２３３、及びクエリ実行サーバ判定モジュール２３４で構成される。ＡＰサーバ計算機実行コスト見積モジュール２３１は、データ処理代理実行サーバ２０２が管理するクエリ実行結果テーブル２７０（図３参照）、ディクショナリ表テーブル２７１（図４参照）、及びサーバ計算機統計情報テーブル２８０（図８参照）を用いて、ＡＰサーバ計算機１１０でのクエリ実行コストを見積る。ＤＢサーバ計算機実行コスト見積モジュール２３２は、クエリ実行結果テーブル２７０（図３参照）、ＤＢサーバ２０３が管理するディクショナリ表テーブル２８１（図４参照）、及びサーバ計算機統計情報テーブル２８０（図８参照）を用いて、ＤＢサーバ計算機１２０でのクエリ実行コストを見積る。ネットワーク処理コスト見積モジュール２３３は、ネットワーク負荷情報テーブル２８２（図９参照）を用いて、クエリ通信コストを見積る。クエリ実行サーバ判定モジュール２３４は、ＡＰサーバ計算機実行コスト見積モジュール２３１、ＤＢサーバ計算機実行コスト見積モジュール２３２、及びネットワーク処理コスト見積２３３の見積り値（ＡＰサーバ計算機１１０でのクエリ実行コスト、ＤＢサーバ計算機１２０でのクエリ実行コスト、及びクエリ通信コスト）から、対象ＤＢクエリをＡＰサーバ計算機１１０で代理実行するかＤＢサーバ計算機１２０に転送してＤＢサーバ２０３で実行するかを判定する。
【００４５】
クエリ転送部２４０は、クエリ実行部２１０から起動され、クエリ転送モジュール２４１、及びネットワーク負荷収集モジュール２４２で構成される。クエリ転送モジュール２４１は、ＤＢサーバ２０３に対象ＤＢクエリを実行させ、実行結果をＤＢサーバ２０３から受けてＡＰサーバ２０２に返す。ネットワーク負荷収集モジュール２４２は、ＡＰサーバとＤＢサーバ間のネットワーク負荷を表す情報を収集し、収集されたネットワーク負荷情報をネットワーク負荷情報テーブル２８２（図９参照）に書き込む。
【００４６】
サーバ情報収集部２５０は、ＡＰサーバ計算機統計情報収集モジュール２５１、ＤＢサーバ計算機統計情報収集モジュール２５２、及びＤＢサーバディクショナリ表収集モジュール２５３で構成される。ＡＰサーバ計算機統計情報収集モジュール２５１は、ＡＰサーバ計算機１１０のＣＰＵ使用率や平均クエリ実行時間長といった各種統計情報を収集し、収集された各種統計情報をサーバ計算機統計情報テーブル２８０（図８参照）に書き込む。ＤＢサーバ計算機統計情報収集モジュール２５２は、ＤＢサーバ２０３からＤＢサーバ計算機１２０のＣＰＵ使用率や平均クエリ実行時間長といった各種統計情報を収集し、収集された各種統計情報を、サーバ計算機統計情報テーブル２８０（図８参照）に書き込む。ＤＢサーバディクショナリ表収集モジュール２５３は、ＤＢサーバ２０３が管理するＤＢサーバのディクショナリ表テーブル２９２を取得して、ＤＢサーバのディクショナリ表テーブル２８１（図４参照）として主記憶装置１１２に保存する。
【００４７】
ＤＢサーバ計算機１２０におけるＤＢサーバ２０３は、データ処理代理実行サーバ２０２からのリクエストに応じて、ＤＢクエリを実行するサーバプログラムである。ＤＢサーバ２０３は、記憶装置１２５に、原本データ２９０（図５、図６参照）、ＤＢサーバ計算機統計情報テーブル２９１（図８参照）、及びＤＢサーバディクショナリ表テーブル２９２（図５参照）を保持する。ＤＢサーバ２０３は、クエリ実行部２６０を有する。クエリ実行部２６０は、データ処理代理実行サーバ２０２からのリクエストに応じて、ＤＢクエリを実行する。
【００４８】
図３は、クエリ実行結果テーブル２７０の一例を示す。
【００４９】
クエリ実行結果テーブル２７０は、過去のクエリ実行結果が記録されるテーブルである。テーブル２７０の各行は、過去に実行された各クエリに対応し、クエリ３１０、実行プラン３２０、及び実行結果サイズ３３０からなる。クエリ３１０は、このクエリ３１０に対応するＤＢクエリの文字列である。実行プラン３２０は、この実行プラン３２０に対応するＤＢクエリを解析し最適化された処理手続きを示す実行プランである。実行結果サイズ３３０は、この実行結果サイズ３３０に対応するＤＢクエリの実行結果のサイズを示す数値である。本テーブル２７０の管理方法の一例として、あらかじめ指定された上限件数や上限サイズに収まるように、ＦＩＦＯ（First In First Out）などのアルゴリズムに従って管理することが考えられる。
【００５０】
図４は、ディクショナリ表テーブル２９２の一例を示す。
【００５１】
この図に示すテーブル２９２の構成は、ＡＰサーバ計算機１１０内の主記憶装置１１２にキャッシュされているディクショナリ表テーブル２７１、ＤＢサーバ計算機１２０内の主記憶装置１２２にキャッシュされている２０３のディクショナリ表テーブル２８１にも適用される。ディクショナリ表テーブル２９２は、種々のテーブル（例えば、ユーザデータを保持するテーブルｔ１、ｔ２（図５及び図６参照））を管理するためのテーブルである。テーブル２９２の各行は、テーブル名４１０、カラム名４２０、カラムデータ型４３０、及びデータサイズ４４０からなる。テーブル名４１０は、このテーブル名４１０に対応するテーブルの名称を示す文字列である。カラム名４２０は、このカラム名４２０に対応するテーブルに属するカラムの名称を示す文字列である。カラムデータ型４３０は、このカラムデータ型４３０に対応するテーブルにおけるカラムのデータ型（例えばｉｎｔ型やｖａｒｃｈａｒ型）を示す文字列である。データサイズ４４０は、このデータサイズ４４０に対応するテーブルにおけるカラムのデータサイズを示す数値である。本テーブル２９２は、テーブル生成（ＣＲＥＡＴＥ  ＴＡＢＬＥ）、テーブル破棄（ＤＲＯＰ  ＴＡＢＬＥ）、テーブル更新（ＡＬＴＥＲ  ＴＡＢＬＥ）といったテーブル定義系クエリに対して、ユーザデータに対するテーブルの状態が管理される。
【００５２】
図５は、ユーザデータを保持するテーブルｔ１の一例を示す。
【００５３】
テーブルｔ１は、原本データ２９０に含まれるテーブルであり、キャッシュデータ２７２に含まれることもある。テーブルｔ１の各行は、ｉｄ５１０、ｐｒｏｄｕｃｔＩＤ５２０、ｄａｔｅ５３０、ｑｕａｎｔｉｔｙ５４０、及びｐｒｉｃｅ５５０からなる。ＤＢクエリに従って、該当する行あるいは列に対して、参照及び更新がなされる。
【００５４】
図６は、ユーザデータを保持するテーブルｔ２の一例を示す。
【００５５】
テーブルｔ２は、原本データ２９０に含まれるテーブルであり、キャッシュデータ２７２に含まれることもある。テーブルｔ２の各行は、ｐｒｏｄｕｃｔＩＤ６１０、ｎａｍｅ６２０、ｃａｔｅｇｏｒｙ６３０、及びｕｎｉｔｐｒｉｃｅ６４０からなる。ＤＢクエリに従って、該当する行あるいは列に対して、参照及び更新がなされる。
【００５６】
図７は、サーバ負荷判定基準テーブル２７３の一例を示す。
【００５７】
サーバ負荷判定基準テーブル２７３は、サーバ負荷を判定する基準情報を保持するテーブルである。テーブル２７３の各行は、サーバ識別情報７１０、性能指標７２０、及び負荷判定基準７３０からなる。サーバ識別情報７１０は、サーバ識別情報７１０に対応するサーバ計算機（負荷を判定する対象となるＡＰサーバ計算機１１０あるいはＤＢサーバ計算機１２０）を識別するための識別情報であり、ホスト名、あるいはＩＰアドレスとなる。性能指標７２０は、負荷判定における指標であり、ＣＰＵ使用率、スループットなどの文字列である。負荷判定基準７３０は、ＡＰサーバ計算機１１０が過負荷であるか否か及びＤＢサーバ計算機１２０が低負荷であるか否かの基準を表す。図７の例によれば、ＡＰサーバ計算機１１０は、ＣＰＵ使用率が８０％以上であるならば過負荷であり、ＤＢサーバ計算機１２０は、ＣＰＵ使用率が３０％以下であるならば低負荷である。負荷判定基準７３０は、システムのパフォーマンス設計に基づいてあらかじめ設定しておくことができる。また、サーバ負荷を適切に判定するために、システムのパフォーマンス状況からフィードバックをかけ、負荷判定基準７３０が動的に自動で変更されても良い。
【００５８】
図８は、サーバ計算機統計情報テーブル２８０の一例を示す。
【００５９】
サーバ計算機統計情報テーブル２８０は、サーバ計算機に関する統計情報を保持するテーブルである。テーブル２８０の各行は、サーバ識別情報８１０、ＣＰＵ使用率８２０、１実行ステップあたりの実行時間長８３０、及び平均クエリ実行時間長８４０からなる。サーバ識別情報７１０は、このサーバ識別情報７１０に対応するサーバ計算機（負荷を判定する対象となるＡＰサーバ計算機１１０あるいはＤＢサーバ計算機１２０）を識別するための識別情報であり、ホスト名、あるいはＩＰアドレスとなる。ＣＰＵ使用率８２０は、このＣＰＵ使用率８２０に対応するサーバ計算機のＣＰＵ使用率を示す数値である。１実行ステップあたりの実行時間長８３０は、この実行時間長８３０に対応するサーバ計算機のＤＢクエリの実行プランにおける１実行ステップを処理するに要する時間を示す数値である。平均クエリ実行時間長８４０は、この平均クエリ実行時間長８４０に対応するサーバ計算機で１つのＤＢクエリを実行するのに要する時間を示す数値である。これらの統計情報の収集に伴う計算機リソースの消費を抑えるため、あらかじめ指定された時間間隔で定期的に収集することが望ましい。
【００６０】
ＤＢサーバ計算機統計情報テーブル２９１も、サーバ計算機統計情報テーブル２８０と同様の構成を採ることができる。但し、テーブル２８０のようなサーバ識別情報８１０は無くても良い。
【００６１】
図９は、ネットワーク負荷情報テーブル２８２の一例を示す。
【００６２】
ネットワーク負荷情報テーブル２８２は、ネットワークの負荷情報を保持するテーブルである。テーブル２８２の各行は、転送速度９１０、及び平均応答時間９２０からなる。転送速度９１０は、ＡＰサーバ計算機１１０とＤＢサーバ計算機１２０間でデータ送受信を行う際の実効速度を示す数値である。平均応答時間９２０は、ＡＰサーバ計算機１１０がＤＢサーバ計算機１２０に対象ＤＢクエリを転送した際に応答結果を取得するまでに要する時間を示す数値である。これらの値を、あらかじめ静的に設定しておくことも可能であるが、実際のクエリ転送に対する平均値を設定するなど実測に基づいて算出することで、性能状況を考慮したより精度の高い通信コストを算出することが期待できる。
【００６３】
次に、データ処理代理実行サーバ２０２における各部の処理について、図１０〜図１４のフローチャートを参照しつつ、適宜、図１〜図９を参照して説明する。
【００６４】
図１０は、クエリ実行部２１０の動作のフローチャートである。
【００６５】
クエリ実行部２１０は、ＡＰサーバ２００からのＤＢクエリを受付けて、そのＤＢクエリの解析を行う。本実施例１では、ＤＢクエリの一例としてＳＱＬを扱うため、ＳＱＬ文の解析を行い、実行プランを生成する（ステップ１０００）。ＤＢクエリがＳＱＬでない場合、クエリ実行部２１０は、エラーコードやエラーメッセージなどをＡＰサーバ２００に応答する。
【００６６】
クエリ実行部２１０は、受け付けたＤＢクエリを解析した結果を基に、受け付けたＤＢクエリ（ＳＱＬ）が参照系クエリであるＳＥＬＥＣＴ文か否かを判定する（ステップ１００１）。受け付けたＤＢクエリが参照系クエリの場合、クエリ実行部２１０は、ステップ１００２を実行し、サーバ負荷判定部２２０を起動する。ステップ１００２の詳細は、図１１を参照して後に説明する。
【００６７】
クエリ実行部２１０は、ステップ１００２におけるサーバ負荷判定部２２０の処理結果から、ＡＰサーバ計算機１１０が過負荷で、なおかつＤＢサーバ計算機１２０が低負荷か否かを判定する（ステップ１００３）。ステップ１００３において、ＡＰサーバ計算機１１０が過負荷ではない、及び／又は、ＤＢサーバ計算機１２０が低負荷でないと判定した場合には、クエリ実行部２１０は、受け付けたＤＢクエリを代理実行する（ステップ１００４）。ＡＰサーバ計算機１１０が過負荷で、なおかつＤＢサーバ計算機１２０が低負荷であると判定した場合、クエリ実行部２１０は、ステップ１００５を実行する（クエリ実行サーバ判定部２３０を起動する）。ステップ１００５の詳細は、図１２を参照して後に説明する。
【００６８】
クエリ実行部２１０は、ステップ１００５におけるクエリ実行サーバ判定部２３０の処理結果から、受け付けたＤＢクエリ（対象ＤＢクエリ）を代理実行するか否かを判定する（ステップ１００６）。ステップ１００６において、対象ＤＢクエリを代理実行すると判定した場合には、ステップ１００４が行われ、そうでない場合は、ＤＢサーバ２０３に対象ＤＢクエリを転送すると判定されているため、ステップ１００が行われる（クエリ転送部２４０が起動される）。ステップ１００８の詳細は、図１３を参照して後に説明する。
【００６９】
クエリ実行部２１０は、ステップ１００１において、受け付けたＤＢクエリが参照系クエリでないと判定した場合、つまりＳＱＬが更新系クエリであるＩＮＳＥＲＴ文、ＵＰＤＡＴＥ文、ＤＥＬＥＴＥ文のいずれかの場合、受け付けたＤＢクエリを実行し、ユーザデータの更新をキャッシュデータ２７２に反映する（ステップ１００７）。続いて、クエリ実行部２１０は、ステップ１００８を実行する（クエリ転送部２４０を起動する）。結果として、データ処理代理実行サーバ２０２が管理するキャッシュデータ２７２、及びＤＢサーバ２０３が管理する原本データ２９０の両方に、そのＤＢクエリの更新が反映される。これにより、データ処理代理実行サーバ２０２あるいはＤＢサーバ２０３のいずれのサーバに参照を要求しても、最新のユーザデータ（更新内容）を参照することができる。また、２台以上のＡＰサーバ計算機１１０が存在する場合には、ＤＢサーバ２０３が管理する原本データ２９０に対する更新を、すべてのＡＰサーバ計算機１１０が管理するキャッシュデータ２７２に反映するために、更新ログを活用した非同期反映といった制御を行うことで、原本データ２９０とキャッシュデータ２７２のデータ整合性を担保することができる。
【００７０】
クエリ実行部２１０は、受け付けたＤＢクエリの実行結果に基づいて、クエリ実行結果テーブル２７０を更新する（ステップ１００９）。クエリ実行結果テーブル２７０のクエリ３１０に、該ＤＢクエリと同じＤＢクエリが存在する場合には、該ＤＢクエリの実行結果サイズ３３０として、該ＤＢクエリと同じＤＢクエリの実行結果サイズ３３０と、該ＤＢクエリの実行結果サイズとの平均値を、テーブル２７０に書き込む。これにより、ユーザデータの変化に伴い生じる実行結果サイズの変化を考慮したより精度の高いクエリ通信コストを算出することができる。該ＤＢクエリと同じＤＢクエリが存在しない場合には、クエリ実行部２１０は、該ＤＢクエリに対するクエリ３１０、実行プラン３２０、及び実行結果サイズ３３０を追加する。
【００７１】
クエリ実行部２１０は、該ＤＢクエリの実行結果をＡＰサーバ２００に応答して処理を終了する（ステップ１０１０）。
【００７２】
図１１は、サーバ負荷判定部２２０の動作のフローチャートである。
【００７３】
サーバ負荷判定部２２０は、クエリ実行部２１０から起動され、サーバ負荷判定処理を開始する。サーバ負荷判定部２２０は、サーバ計算機統計情報２８０から、例えばＣＰＵ使用率８２０をＡＰサーバ計算機１１０の負荷情報として取得する（ステップ１１００）。続いて、サーバ負荷判定部２２０は、サーバ負荷判定基準２７３に基づいて、ＡＰサーバ計算機１１０が負荷判定基準を満たすか否かを判定する（ステップ１１０１）。
【００７４】
サーバ負荷判定部２２０は、ステップ１１０１において、ＡＰサーバ計算機１１０が負荷判定基準を満たす場合には、ＡＰサーバ計算機１１０が過負荷であると判定し、サーバ計算機統計情報２８０から、例えばＣＰＵ使用率８２０をＤＢサーバ計算機１２０の負荷情報として取得する（ステップ１１０２）。続いて、サーバ負荷判定部２２０は、サーバ負荷判定基準２７３に基づいて、ＤＢサーバ計算機１２０が負荷判定基準を満たすか否かを判定する（ステップ１１０３）。
【００７５】
サーバ負荷判定部２２０は、ステップ１１０３において、ＤＢサーバ計算機１２０が負荷判定基準を満たす場合には、ＤＢサーバ計算機１２０が低負荷であると判定し、ＡＰサーバが過負荷であり、なおかつＤＢサーバが低負荷であると判定して、処理を終了する（ステップ１１０４）。
【００７６】
サーバ負荷判定部２２０は、ステップ１１０１において、ＡＰサーバが過負荷基準を満たさない場合、あるいは、ステップ１１０３において、ＤＢサーバが低負荷基準を満たさない場合、ＡＰサーバが過負荷ではない、及び／又は、ＤＢサーバが低負荷でないと判定して、処理を終了する（ステップ１１０５）。
【００７７】
図１２は、クエリ実行サーバ判定部２３０の動作のフローチャートである。
【００７８】
クエリ実行サーバ判定部２３０は、クエリ実行部２１０から起動され、クエリ実行サーバ判定処理を開始する。クエリ実行サーバ判定部２３０は、ＡＰサーバ計算機１１０でのクエリ実行コストを算出する（ステップ１２００）。ＡＰサーバ計算機１１０でのクエリ実行コストは、前述の（式２）に示したように、（ＡＰサーバでのクエリ実行ステップ数）×（ＡＰサーバでの１実行ステップ数あたりの実行時間長）で表すことができる。「ＡＰサーバでのクエリ実行ステップ数」として、例えば、クエリオプティマイザのコストベースの見積り値を採用することができる。クエリオプティマイザは、対象ＤＢクエリに対する最適な実行プランを生成するために、対象ＤＢクエリの実行プランの候補を選出し、ディクショナリ表テーブル２７１などを用いてコストを見積り、最もコストが低い実行プランを決定する。「ＡＰサーバでのクエリ実行ステップ数」は、コストベースの見積りにおいて算出される、対象ＤＢクエリの実行ステップ数とすることができる。「ＡＰサーバでの１実行ステップ数あたりの実行時間長」は、例えば、サーバ計算機統計情報テーブル２８０に記録されている、１実行ステップあたりの実行時間長８３０（ＡＰサーバ計算機に対応した、１実行ステップあたりの実行時間長８３０）とすることができる。
【００７９】
クエリ実行サーバ判定部２３０は、ＤＢサーバ計算機１２０でのクエリ実行コストを算出する（ステップ１２０１）。ＤＢサーバ計算機１２０でのクエリ実行コストは、前述の（式２）に示したように、（ＤＢサーバでのクエリ実行ステップ数）×（ＤＢサーバでの１実行ステップ数あたりの実行時間長）で表すことができる。「ＤＢサーバでのクエリ実行ステップ数」は、例えば、ＡＰサーバ計算機１１０でのクエリ実行コストを算出する手順と同様に算出することができる。その際、クエリ実行サーバ判定部２３０は、ＤＢサーバ２０３のディクショナリ表テーブル２８１を用いて実行プランを生成することで、ＤＢサーバ計算機１２０での対象ＤＢクエリの実行ステップ数を近似することができる。
【００８０】
クエリ実行サーバ判定部２３０は、ＡＰサーバ計算機１１０とＤＢサーバ計算機１２０間の通信コスト（クエリ通信コスト）を算出する（ステップ１２０２）。クエリ通信コストは、前述の（式２）に示したように、（（クエリサイズ）＋（クエリ結果サイズ））／（転送速度）で表すことができる。「クエリサイズ」は、転送する対象ＤＢクエリのサイズの値である。この値は、対象ＤＢクエリの文字列長に一致し、クエリ結果サイズに対して十分に小さく、無視することもできる。「クエリ結果サイズ」は、対象ＤＢクエリの実行結果のサイズの値である。実際に対象ＤＢクエリを実行するまで、実行結果のサイズを取得することはできないため、そのサイズの値を予測する。予測する方法の一例として、クエリ実行結果テーブル２７０における、対象ＤＢクエリに対する実行結果サイズ３３０の値、で予測することができる。「転送速度」は、ＡＰサーバ計算機１１０とＤＢサーバ計算機１２０間でのテータ転送における通信速度である。「転送速度」は、例えば、ネットワーク負荷情報テーブル２８２における転送速度９１０の値である。
【００８１】
クエリ実行サーバ判定部２３０は、ステップ１２００〜ステップ１２０２で算出した見積り値を、（式２）に代入して、不等式を満たすか否かを判定する（ステップ１２０３）。
【００８２】
クエリ実行サーバ判定部２３０は、ステップ１２０３において、（式２）の不等式を満たす場合には、ＤＢサーバ計算機１２０に対象ＤＢクエリを転送すると判定して、処理を終了する（ステップ１２０５）。そうでない場合には、クエリ実行サーバ判定部２３０は、ＡＰサーバ計算機１１０で対象クエリを代理実行すると判定して、処理を終了する（ステップ１２０６）。
【００８３】
図１３は、クエリ転送部２４０の動作のフローチャートである。
【００８４】
クエリ転送部２４０は、クエリ実行部２１０から起動され、クエリ転送処理を開始する。クエリ転送部２４０は、ネットワーク負荷情報テーブル２８２における転送速度９１０及び平均応答時間９２０を更新するために、対象ＤＢクエリのＤＢサーバ計算機１２０への通信コストの計測を開始する（ステップ１３００）。本計測処理に対する、計算機リソースの消費を抑えるため、あらかじめ指定された時間間隔で定期的に計測することもできる。
クエリ転送部２４０は、対象ＤＢクエリをＤＢサーバ２０３に転送する（ステップ１３０１）。その際に、対象ＤＢクエリに限らず、対象ＤＢクエリに代替してＤＢサーバ２０３で実行可能な形式で表現されたデータ（例えば実行プラン）を転送することもできる。
【００８５】
クエリ転送部２４０は、ＤＢサーバ２０３から対象ＤＢクエリの実行結果を取得する（ステップ１３０２）。
【００８６】
クエリ転送部２４０は、対象ＤＢクエリに対する計測を行っていた場合、計測を終了して、その計測結果である転送速度９１０及び平均応答時間９２０を、ネットワーク負荷情報テーブル２８２に書き込む（ステップ１３０３）。
【００８７】
クエリ転送部２４０は、ＤＢサーバ２０３から取得した、対象ＤＢクエリの実行結果を、ＡＰサーバ２００に返す（ステップ１３０４）。
【００８８】
図１４は、サーバ情報収集部２５０の動作のフローチャートである。
【００８９】
サーバ情報収集部２５０は、クエリ実行部２１０から起動され、各種情報収集処理を開始する。サーバ情報収集部２５０は、ＡＰサーバ計算機１１０の統計情報を収集して、サーバ計算機統計情報テーブル２８０を更新する（ＡＰサーバ計算機１１０を表すサーバ識別情報８１０を含んだ行を更新する）（ステップ１４００）。ＣＰＵ使用率８２０を収集する具体例の１つに、オペレーティングシステム（ＯＳ）が提供するシステムコールを用いて収集する方法が考えられる。１実行ステップあたりの実行時間長８３０を収集する具体例の１つに、１実行ステップの処理を複数回計測し、それらの平均値を算出する方法が考えられる。平均クエリ実行時間長８４０を収集する具体例の１つに、ＤＢクエリの処理を複数回計測し、それらの平均値を算出する方法が考えられる。
【００９０】
サーバ情報収集部２５０は、ＤＢサーバ計算機１２０の統計情報を収集して、サーバ計算機統計情報２８０を更新する（ＤＢサーバ計算機１２０を表すサーバ識別情報８１０を含んだ行を更新する）（ステップ１４０１）。ＣＰＵ使用率８２０、１実行ステップあたりの実行時間長８３０、及び平均クエリ実行時間長８４０を、ＤＢサーバ２０３が管理するＤＢサーバ計算機統計情報テーブル２９１から取得する。他の方法として、ＡＰサーバ計算機１１０と同じ要領で、ＤＢサーバ計算機１２０で収集した値を転送することもできる。
【００９１】
サーバ情報収集部２５０は、ＤＢサーバのディクショナリ表テーブル２９２を収集して、ＤＢサーバのディクショナリ表テーブル２８１を更新する（ステップ１４０２）。ディクショナリ表は、ユーザテーブルと同様に管理されており、ＳＱＬで参照して収集することができる。
【００９２】
サーバ情報収集部２５０のステップ１４００〜ステップ１４０２において、各種データの収集に伴い、ＡＰサーバ計算機１１０のＣＰＵやメモリ容量といった計算機リソースの消費、ＡＰサーバ計算機１１０とＤＢサーバ計算機１２０間で通信などが発生する。そのため、ＤＢクエリの実行処理とは非同期にデータの収集を行うなど、リソース消費を抑えながら、ＤＢクエリの実行処理に影響を与えないための配慮をすることが望ましい。各種データの収集の非同期実行に加えて、リソースに余裕に応じて、収集頻度を調整できるなどの制御が効果的である。また、収集対象のＣＰＵ使用率８２０、１実行ステップあたりの実行時間長８３０、ＤＢサーバのディクショナリ表テーブル２９２といったデータは、すべて同じタイミングで収集する必要はなく、各収集処理は独立して動作できる。
【００９３】
実施例１によれば、データ処理代理実行サーバ２０２による負荷分散により、ＡＰサーバ計算機１１０とＤＢサーバ計算機１２０との間で負荷バランスを調整し、両者の計算機リソースを有効に活用することで、安定的なシステムパフォーマンスを実現することができる。
【実施例２】
【００９４】
以下、本発明の実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略或いは簡略する。
【００９５】
実施例１では、前述した第一乃至第三の方法のうち第一の方法が採用されているが、実施例２では、第二の方法が採用される。第二の方法は、「ＤＢサーバでのクエリ実行コスト」の算出を簡易化した方法であり、前述した（式３）により定義される。これにより、「ＤＢサーバでのクエリ実行コスト」の算出するための計算機リソースの消費を抑え、アプリケーションプログラムに対する性能インパクトを軽減できることが期待できる。
【００９６】
図１５は、本発明の実施例２におけるＡＰサーバ計算機及びＤＢサーバ計算機の構成を示す。図１５では、クエリ受付モジュール２１４の図示を省略している。
【００９７】
クエリ実行サーバ判定部２３０には、ＤＢサーバ計算機実行コスト見積２３２に代わって、ＤＢサーバ実行コスト簡易見積１５００が備えられる。
【００９８】
ＤＢサーバ実行コスト簡易見積１５００は、「ＤＢサーバでのクエリ実行コスト」を見積るためのモジュールであり、ＤＢサーバのディクショナリ表２８１を利用しない。従って、実施例１のＤＢサーバのディクショナリ表２８１、及びそれに関連するモジュールは不要となる。
【００９９】
図１６は、クエリ実行サーバ判定部２３０の動作のフローチャートである。
【０１００】
クエリ実行サーバ判定部２３０は、図１２のステップ１２０１に代わって、ＤＢサーバ計算機１２０でのクエリ実行コストを簡易的に見積る（ステップ１６００）。ＤＢサーバ計算機でのクエリ実行コストは、前述の（式３）に示したように（ＡＰサーバ計算機でのクエリ実行コスト）×（ＤＢサーバ性能比率）で表すことができる。「ＡＰサーバ計算機でのクエリ実行コスト」は、ステップ１２００において算出された値とすることができる。一方、（ＤＢサーバ性能比率）は、（式４）から、（ＤＢサーバ計算機での平均クエリ実行時間長）／（ＡＰサーバ計算機での平均クエリ実行時間長）で表すことができる。この値を算出する一例として、ＤＢサーバ計算機１２０及びＡＰサーバ計算機１１０での平均クエリ実行時間長を、それぞれ図８の１実行ステップあたりの処理実行時間長８３０から取得し除算した値とすることができる。以降、ステップ１２０２以降の処理は、図１２と同様である。
【実施例３】
【０１０１】
以下、本発明の実施例３を説明する。その際、実施例１（及び／又は実施例２）との相違点を主に説明し、実施例１（及び／又は実施例２）との共通点については説明を省略或いは簡略する。
【０１０２】
実施例１及び実施例２では、ＡＰサーバ計算機１１０及びＤＢサーバ計算機１２０でＤＢクエリを実行した場合のコストを見積り、その見積り値に基づいて、クエリ実行サーバ判定が行われる。それに対し、実施例３では、ＤＢクエリが特定のクエリ形式に合致した場合には、（式１）を満たすことになると仮定される。すなわち、実施例３では、第一乃至第三の方法のうち、最も簡易的なクエリ実行サーバ判定方法である第三の方法が採用される。これにより、実施例１及び実施例２におけるコストを見積るための処理を行わないため、アプリケーションプログラムに対する性能インパクトを軽減できることが期待できる。
【０１０３】
本発明の実施例３におけるＡＰサーバ計算機及びＤＢサーバ計算機の構成を示す。
【０１０４】
クエリ実行サーバ判定部２３０に、ＡＰサーバ計算機実行コスト見積モジュール２３１、ＤＢサーバ計算機実行コスト見積２３２（又はＤＢサーバ実行コスト簡易見積１５００）、ネットワーク処理コスト見積モジュール２３３及びクエリ実行サーバ判定モジュール２３４に代えて、クエリ実行サーバ転送判定モジュール１７００が備えられる。クエリ実行サーバ転送判定モジュール１７００は、クエリ転送定義テーブル１７０１（図１８参照）を用いて、ＤＢクエリを転送するか否かを判定する。
【０１０５】
図１８は、クエリ転送定義テーブル１７０１の一例を示す。
【０１０６】
クエリ転送定義テーブル１７０１は、ＤＢクエリの転送に関する定義情報を保持するテーブルである。テーブル１７０１の各行は、転送するか否かを指定するＤＢクエリのクエリパターン１８１０、及び実行サーバ１８２０からなる。クエリパターン１８１０は、対象となるＤＢクエリのパターンを示す文字列である。パターンを指定する具体例の１つとして、ＤＢクエリをそのまま文字列で指定する、正規表現を用いてＤＢクエリのパターンを指定する、などが挙げられる。実行サーバ１８２０は、ＤＢクエリのパターンに合致したＤＢクエリを実行するサーバの識別情報であり、ホスト名、あるいはＩＰアドレスとなる。これらの定義情報は、コマンドライン、定義ファイルといったインタフェースにより、外部から必要に応じて設定できる。
【０１０７】
図１９は、クエリ実行サーバ判定部２３０の動作のフローチャートである。
【０１０８】
クエリ実行サーバ判定部２３０は、クエリ転送定義テーブル１７０１に基づいて、受付けた対象ＤＢクエリがクエリパターン１８１０を満たすか否かを判定する（ステップ１９００）。ステップ１９００において、該ＤＢクエリがクエリパターン１８１０を満たすと判定した場合には、実行サーバ１８２０に基づいて、対象ＤＢクエリをいずれのサーバで実行するかを判定する（ステップ１９０２）。そうでない場合は、ステップ１２０６に進み、以降の処理は、図１２と同様である。
【０１０９】
対象ＤＢクエリが特定のクエリ形式であるが故に、ステップ１９０２において、対象ＤＢクエリをＤＢサーバ計算機１２０で実行すると判定した場合には、ステップ１２０５に進み、以降の処理は、図１２と同様である。そうでない場合（例えば、対象ＤＢクエリが別の特定のクエリ形式であるが故に、ステップ１９０２において、対象ＤＢクエリをＡＰサーバ計算機１１０で代理実行すると判定した場合）には、ステップ１２０６に進み、以降の処理は、図１２と同様である。
【０１１０】
上述した本発明の幾つかの実施例は、本発明の説明のための例示であり、本発明の範囲をその実施例にのみ限定する趣旨ではない。本発明は、その要旨を逸脱することなく、その他の様々な態様でも実施することができる。
【０１１１】
例えば、一つのデータ処理代理実行サーバ２０２に、ＤＢサーバ計算機実行コスト見積モジュール２３２、ＤＢサーバ実行コスト簡易見積モジュール１５００、クエリ実行サーバ転送判定モジュール１７００が設けられていて、前述した第一乃至第三の方法のうちのいずれの方法を採用するかによって、起動されるモジュールが決められても良い。例えば、精度を優先するモードが自動で或いは手動で選択された場合には、モジュール２３２、１５００及び１７００のうち、ＤＢサーバ計算機実行コスト見積モジュール２３２が起動し、バランスを優先するモードが自動で或いは手動で選択された場合には、モジュール２３２、１５００及び１７００のうち、ＤＢサーバ実行コスト簡易見積モジュール１５００が起動し、性能を優先するモードが自動或いは手動で選択された場合には、モジュール２３２、１５００及び１７００のうち、クエリ実行サーバ転送判定モジュール１７００が起動しても良い。
【０１１２】
また、クエリ実行部２１０、クエリ解析モジュール２１１、クエリ制御モジュール２１２、クエリ実行モジュール２１３、クエリ受付モジュール２１４、サーバ負荷判定部２２０、サーバ負荷状況判定モジュール２１１、クエリ実行サーバ判定部２３０、ＡＰサーバ計算機実行コスト見積モジュール２３１、ＤＢサーバ計算機実行コスト見積モジュール２３２、ネットワーク処理コスト見積モジュール２３３、クエリ実行サーバ判定モジュール２３４、クエリ転送部２４０、クエリ転送モジュール２４１、ネットワーク負荷収集モジュール２４２、サーバ情報収集部２５０、ＡＰサーバ計算機統計情報収集モジュール２５１、ＤＢサーバ計算機統計情報収集モジュール２５２、ＤＢサーバディクショナリ表収集モジュール２５３、クエリ実行部２６０、ＤＢサーバ実行コスト簡易見積モジュール１５００及びクエリ実行サーバ転送判定モジュール１７００のうちの少なくとも一つは、コンピュータプログラムに代えて又は加えて、各処理を行う処理部として集積回路化するなどしてハードウェアで実現することもできる。各処理部をハードウェアで実現した場合にはその各処理部が主体となって各処理を行うことができる。
【図面の簡単な説明】
【０１１３】
【図１】本発明の実施例１に係る計算機システムの構成を示すブロック図である。
【図２】本発明の実施例１におけるＡＰサーバ計算機及びＤＢサーバ計算機の構成を示す。
【図３】本発明の実施例１におけるクエリ実行結果テーブルの一例を示す。
【図４】本発明の実施例１におけるディクショナリ表テーブルの一例を示す。
【図５】本発明の実施例１におけるユーザデータを保持するテーブルｔ１の一例を示す。
【図６】本発明の実施例１におけるユーザデータを保持するテーブルｔ２の一例を示す。
【図７】本発明の実施例１におけるサーバ負荷判定基準テーブルの一例を示す。
【図８】本発明の実施例１におけるサーバ計算機統計情報テーブルの一例を示す。
【図９】本発明の実施例１におけるネットワーク負荷情報テーブルの一例を示す。
【図１０】本発明の実施例１におけるクエリ実行部の動作のフローチャートである。
【図１１】本発明の実施例１におけるサーバ負荷判定部の動作のフローチャートである。
【図１２】本発明の実施例１におけるクエリ実行サーバ判定部の動作のフローチャートである。
【図１３】本発明の実施例１におけるクエリ転送部の動作のフローチャートである。
【図１４】本発明の実施例１におけるサーバ情報収集部の動作のフローチャートである。
【図１５】本発明の実施例２におけるＡＰサーバ計算機及びＤＢサーバ計算機の構成を示す。
【図１６】本発明の実施例２におけるクエリ実行サーバ判定部の動作のフローチャートである。
【図１７】本発明の実施例３におけるＡＰサーバ計算機及びＤＢサーバ計算機の構成を示す。
【図１８】本発明の実施例３におけるクエリ転送定義テーブルの一例を示す。
【図１９】本発明の実施例３におけるクエリ実行サーバ判定部の動作のフローチャートである。
【符号の説明】
【０１１４】
１００…クライアント計算機  １１０…ＡＰサーバ計算機  １１１…ＣＰＵ  １１２…主記憶装置  １１３…通信インタフェース  １１４…通信ネットワーク  １２０…ＤＢサーバ計算機  １２１…ＣＰＵ  １２２…主記憶装置  １２３…通信インタフェース  １２４…ディスクインタフェース  １２５…記憶装置  ２００…ＡＰサーバ  ２０１…アプリケーションプログラム  ２０２…データ処理代理実行サーバ  ２０３…ＤＢサーバ  ２１０…クエリ実行部  ２１１…クエリ解析モジュール  ２１２…クエリ制御モジュール  ２１３…クエリ実行モジュール  ２１４…クエリ受付モジュール  ２２０…サーバ負荷判定部  ２２１…サーバ負荷状況判定モジュール  ２３０…クエリ実行サーバ判定部  ２３１…ＡＰサーバ計算機実行コスト見積モジュール  ２３２…ＤＢサーバ計算機実行コスト見積モジュール  ２３３…ネットワーク処理コスト見積モジュール  ２３４…クエリ実行サーバ判定モジュール  ２４０…クエリ転送部  ２４１…クエリ転送モジュール  ２４２…ネットワーク負荷収集モジュール  ２５０…サーバ情報収集部  ２５１…ＡＰサーバ計算機統計情報収集モジュール  ２５２…ＤＢサーバ計算機統計情報収集モジュール  ２５３…ＤＢサーバディクショナリ表収集モジュール  ２６０…クエリ実行部  ２７０…クエリ実行結果テーブル  ２７１…ディクショナリ表テーブル  ２７２…キャッシュデータテーブル  ２７３…サーバ負荷判定基準テーブル  ２８０…サーバ計算機統計情報テーブル  ２８１…ＤＢサーバのディクショナリ表テーブル  ２８２…ネットワーク負荷情報テーブル  ２９０…原本データ  ２９１…ＤＢサーバ計算機統計情報テーブル  ２９２…ＤＢサーバのディクショナリ表テーブル  １５００…ＤＢサーバ実行コスト簡易見積モジュール  １７００…クエリ実行サーバ転送判定モジュール  １７０１…クエリ転送定義テーブル
【図１】
0004815459.tif 000002
【図２】
0004815459.tif 000003
【図３】
0004815459.tif 000004
【図４】
0004815459.tif 000005
【図５】
0004815459.tif 000006
【図６】
0004815459.tif 000007
【図７】
0004815459.tif 000008
【図８】
0004815459.tif 000009
【図９】
0004815459.tif 000010
【図１０】
0004815459.tif 000011
【図１１】
0004815459.tif 000012
【図１２】
0004815459.tif 000013
【図１３】
0004815459.tif 000014
【図１４】
0004815459.tif 000015
【図１５】
0004815459.tif 000016
【図１６】
0004815459.tif 000017
【図１７】
0004815459.tif 000018
【図１８】
0004815459.tif 000019
【図１９】
0004815459.tif 000020