(57)【要約】【課題】クエリの振り分けを効率良く行うことを可能とする分散制御プログラム、分散制御装置、データベースサーバ及び分散制御方法を提供する。【解決手段】複数のデータベースサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、受信したクエリに対応するテーブルの参照状況を示す情報を複数のデータベースサーバについて取得し、取得した参照状況を示す情報に基づいて、クエリを振り分けるデータベースサーバを選択する。【選択図】図７
2019087133.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータベースサーバのうちの１つのデータベースサーバのコンピュータに実行させる分散制御プログラムであって、
前記複数のデータベースサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、受信したクエリに対応するテーブルの参照状況を示す情報を前記複数のデータベースサーバについて取得し、
取得した前記参照状況を示す情報に基づいて、前記クエリを振り分けるデータベースサーバを選択する、
処理を前記コンピュータに実行させることを特徴とする分散制御プログラム。
【請求項２】
請求項１において、
前記参照状況を示す情報は、前記クエリに対応するテーブルの参照があった場合における前記クエリに対応するテーブルのキャッシュヒット率を示す情報を含む、
ことを特徴とする分散制御プログラム。
【請求項３】
請求項２において、
前記選択する処理では、前記キャッシュヒット率が高いデータベースサーバを優先的に選択する、
ことを特徴とする分散制御プログラム。
【請求項４】
請求項１において、
前記参照状況を示す情報は、前記クエリに対応するテーブルを参照する際に待ち時間が発生するか否かを示す情報を含む、
ことを特徴とする分散制御プログラム。
【請求項５】
請求項４において、
前記待ち時間が発生するか否かを示す情報は、前記クエリに対応するテーブルの参照が他のクエリによってロックされている状況にあるか否かを示す情報である、
ことを特徴とする分散制御プログラム。
【請求項６】
請求項４において、
前記選択する処理では、前記待ち時間が発生しないデータベースサーバを優先的に選択する、
ことを特徴とする分散制御プログラム。
【請求項７】
請求項１において、
前記参照状況を示す情報は、前記クエリに対応するテーブルの参照に要する記憶領域へのアクセス回数を示す情報を含む、
ことを特徴とする分散制御プログラム。
【請求項８】
請求項７において、
前記選択する処理では、前記アクセス回数が少ないデータベースサーバを優先的に選択する、
ことを特徴とする分散制御プログラム。
【請求項９】
請求項１において、さらに、
前記クエリを振り分けるデータベースサーバとして前記複数のデータベースサーバのうちの他のデータベースサーバを選択した場合、前記クエリの送信元に、前記他のデータベースサーバに対する前記クエリの送信を指示する、
処理を前記コンピュータに実行させることを特徴とする分散制御プログラム。
【請求項１０】
請求項９において、
前記指示する処理では、前記他のデータベースサーバのアドレスを含む情報を前記クエリの送信元に送信し、
前記クエリの送信元は、受信した前記アドレスを参照して、前記他のデータベースサーバに対して前記クエリを送信する、
ことを特徴とする分散制御プログラム。
【請求項１１】
請求項１において、
前記取得する処理では、前記参照状況を示す情報と前記複数のデータベースサーバの負荷状況を示す情報を記憶する記憶部を参照し、前記クエリに対応するテーブルの参照状況を示す情報と前記負荷状況を示す情報とを前記複数のデータベースサーバについて取得し、
前記選択する処理では、取得した前記参照状況を示す情報と前記負荷状況を示す情報とに基づいて、前記クエリを振り分けるデータベースサーバを選択する、
ことを特徴とする分散制御プログラム。
【請求項１２】
複数のデータベースサーバに対して処理の分散を行う分散制御装置のコンピュータに実行させる分散制御プログラムであって、
前記複数のデータベースサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、受信したクエリに対応するテーブルの参照状況を示す情報を前記複数のデータベースサーバについて取得し、
取得した前記参照状況を示す情報に基づいて、前記クエリを振り分けるデータベースサーバを選択する、
処理を前記コンピュータに実行させることを特徴とする分散制御プログラム。
【請求項１３】
複数のデータベースサーバのうちの１つのデータベースサーバであって、
前記複数のデータベースサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、受信したクエリに対応するテーブルの参照状況を示す情報を前記複数のデータベースサーバについて取得する情報取得部と、
取得した前記参照状況を示す情報に基づいて、前記クエリを振り分けるデータベースサーバを選択するデータベース選択部と、を有する、
ことを特徴とするデータベースサーバ。
【請求項１４】
複数のデータベースサーバに対して処理の分散を行う分散制御装置であって、
前記複数のデータベースサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、受信したクエリに対応するテーブルの参照状況を示す情報を前記複数のデータベースサーバについて取得する情報取得部と、
取得した前記参照状況を示す情報に基づいて、前記クエリを振り分けるデータベースサーバを選択するデータベース選択部と、を有する、
ことを特徴とする分散制御装置。
【請求項１５】
複数のデータベースサーバに対して処理の分散を行う分散制御方法であって、
前記複数のデータベースサーバのうちの１つのデータベースサーバが、前記複数のデータベースサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、受信したクエリに対応するテーブルの参照状況を示す情報を前記複数のデータベースサーバについて取得し、
前記１つのデータベースサーバが、取得した前記参照状況を示す情報に基づいて、前記クエリを振り分けるデータベースサーバを選択する、
ことを特徴とする分散制御方法。
【請求項１６】
複数のデータベースサーバに対して処理の分散を行う分散制御方法であって、
前記複数のデータベースサーバに対して処理の分散を行う分散制御装置が、前記複数のデータベースサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、受信したクエリに対応するテーブルの参照状況を示す情報を前記複数のデータベースサーバについて取得し、
前記分散制御装置が、取得した前記参照状況を示す情報に基づいて、前記クエリを振り分けるデータベースサーバを選択する、
ことを特徴とする分散制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散制御プログラム、分散制御装置、データベースサーバ及び分散制御方法に関する。
【背景技術】
【０００２】
利用者にサービスを提供する事業者（以下、単に事業者とも呼ぶ）は、例えば、サービスの提供に用いられるデータを格納する複数のデータベースサーバ（以下、ＤＢサーバとも呼ぶ）を含む情報処理システムを構築する。
【０００３】
このような情報処理システムにおいて、事業者は、例えば、複数のデータベースサーバに対して互いに同期されたデータを格納する。そして、事業者は、例えば、各データベースサーバの処理負荷に基づいてアクセスの振り分けを行うロードバランサを設け、アプリケーションから送信されたクエリを複数のデータベースサーバに振り分けさせる。
【０００４】
これにより、事業者は、クエリに対する処理の実行に伴う各データベースサーバの処理負荷を分散することが可能になる（例えば、特許文献１乃至３参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−２１７３００号公報
【特許文献２】特開２００６−１９５５３３号公報
【特許文献３】特開２０１０−２５０７４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ここで、各データベースサーバにおけるクエリに対する処理の所要時間は、各データベースサーバの処理負荷以外の要因にも依存する場合がある。そのため、各データベースに対するクエリの振り分けは、各データベースサーバに関する詳細な情報（各データベースサーバの処理負荷以外の情報）を考慮した上で行われることが好ましい。
【０００７】
そこで、一つの側面では、本発明は、クエリの振り分けを効率良く行うことを可能とする分散制御プログラム、分散制御装置、データベースサーバ及び分散制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
実施の形態の一態様では、複数のデータベースサーバのうちの１つのデータベースサーバのコンピュータに実行させる分散制御プログラムであって、前記複数のデータベースサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、受信したクエリに対応するテーブルの参照状況を示す情報を前記複数のデータベースサーバについて取得し、取得した前記参照状況を示す情報に基づいて、前記クエリを振り分けるデータベースサーバを選択する、処理を前記コンピュータに実行させる。
【発明の効果】
【０００９】
一つの側面によれば、クエリの振り分けを効率良く行うことを可能とする。
【図面の簡単な説明】
【００１０】
【図１】図１は、情報処理システム１０の構成を示す図である。
【図２】図２は、情報処理システム１０の構成を示す図である。
【図３】図３は、ＤＢサーバ１のハードウエア構成を示す図である。
【図４】図４は、ＤＢサーバ２のハードウエア構成を示す図である。
【図５】図５は、ＤＢサーバ１の機能ブロック図である。
【図６】図６は、ＤＢサーバ２の機能ブロック図である。
【図７】図７は、第１の実施の形態における分散制御処理の概略を説明するフローチャート図である。
【図８】図８は、第１の実施の形態における分散制御処理の概略を説明する図である。
【図９】図９は、第１の実施の形態における分散制御処理の概略を説明する図である。
【図１０】図１０は、第１の実施の形態における分散制御処理の詳細を説明するフローチャート図である。
【図１１】図１１は、第１の実施の形態における分散制御処理の詳細を説明するフローチャート図である。
【図１２】図１２は、第１の実施の形態における分散制御処理の詳細を説明するフローチャート図である。
【図１３】図１３は、第１の実施の形態における分散制御処理の詳細を説明するフローチャート図である。
【図１４】図１４は、第１の実施の形態における分散制御処理の詳細を説明するフローチャート図である。
【図１５】図１５は、第１の実施の形態における分散制御処理の詳細を説明するフローチャート図である。
【図１６】図１６は、第１の実施の形態における分散制御処理の詳細を説明するフローチャート図である。
【図１７】図１７は、ＤＢ状況情報１３１の具体例を説明する図である。
【図１８】図１８は、ＤＢ負荷情報１３２の具体例を説明する図である。
【図１９】図１９は、ＤＢ接続情報１３３の具体例を説明する図である。
【図２０】図２０は、第２の実施の形態における管理サーバ４のハードウエア構成を示す図である。
【図２１】図２１は、第２の実施の形態における管理サーバ４の機能ブロック図である。
【図２２】図２２は、第２の実施の形態における分散制御処理の概略を説明するフローチャート図である。
【図２３】図２３は、第２の実施の形態における分散制御処理の概略を説明する図である。
【図２４】図２４は、第２の実施の形態における分散制御処理の概略を説明する図である。
【図２５】図２５は、第２の実施の形態における分散制御処理の詳細を説明するフローチャート図である。
【図２６】図２６は、第２の実施の形態における分散制御処理の詳細を説明するフローチャート図である。
【発明を実施するための形態】
【００１１】
［情報処理システムの構成］
初めに、情報処理システム１０の構成について説明を行う。図１及び図２は、情報処理システム１０の構成を示す図である。
【００１２】
図１に示す情報処理システム１０は、例えば、ＤＢサーバ１と、ＤＢサーバ２と、ＤＢサーバ３と、アプリサーバ１１と、アプリサーバ１２とを有する。
【００１３】
アプリサーバ１１は、例えば、１台以上の物理マシンであり、利用者に対するサービスの提供に伴う処理の実行に応じて、ＤＢサーバ１に対してデータの更新クエリを送信する。
【００１４】
アプリサーバ１２は、例えば、１台以上の物理マシンであり、利用者に対するサービスの提供に伴う処理の実行に応じて、ＤＢサーバ１、２及び３のうちのいずれかに対してデータの参照クエリを送信する。
【００１５】
ＤＢサーバ１、２及び３は、例えば、それぞれ１台以上の物理マシンであり、利用者に対するサービスの提供に用いられるデータを記憶する。そして、ＤＢサーバ１は、例えば、アプリサーバ１１からの更新クエリの受信に応じてデータが更新された場合、ＤＢサーバ１に記憶されたデータとＤＢサーバ２に記憶されたデータとの同期を行う。その後、ＤＢサーバ２は、例えば、ＤＢサーバ１との同期によってＤＢサーバ２に記憶されたデータが更新された場合、ＤＢサーバ２に記憶されたデータとＤＢサーバ３に記憶されたデータとの同期を行う。
【００１６】
なお、以下、アプリサーバ１１からの更新クエリに対する処理を行うＤＢサーバ１を、マスタのＤＢサーバとも呼ぶ。また、以下、ＤＢサーバ１において障害等が発生した場合に、アプリサーバ１１からの更新クエリに対する処理をＤＢサーバ１に代わって行うＤＢサーバ２及びＤＢサーバ３を、それぞれスレーブ１のＤＢサーバ及びスレーブ２のＤＢサーバとも呼ぶ。
【００１７】
そして、情報処理システム１０は、図２に示すように、例えば、アプリサーバ１２から送信された参照クエリの振り分けを行うロードバランサ２１を有する。
【００１８】
ロードバランサ２１は、例えば、アプリサーバ１２から送信された参照クエリの全てを受信する。そして、ロードバランサ２１は、受信した参照クエリのそれぞれを、ＤＢサーバ１、２及び３のいずれかに送信する。
【００１９】
具体的に、ロードバランサ２１は、例えば、ＤＢサーバ１、２及び３の処理負荷を定期的に取得し、ＤＢサーバ１、２及び３のうちの処理負荷が最も小さいサーバに対して、アプリサーバ１２から送信された参照クエリの送信を行う。
【００２０】
これにより、ロードバランサ２１は、各ＤＢサーバの処理負荷を平準化させることが可能になる。
【００２１】
ここで、各ＤＢサーバにおけるクエリに対する処理の所要時間は、各ＤＢサーバの現在の処理負荷以外の要因にも依存する場合がある。そのため、各ＤＢサーバに対するクエリの振り分けは、各ＤＢサーバに関する詳細な情報（各ＤＢサーバの処理負荷以外の情報）を考慮した上で行われることが好ましい。
【００２２】
また、ロードバランサ２１は、情報処理システム１０の構成等によって、各データベースサーバに関する詳細な情報を取得することができない場合がある。そのため、ロードバランサ２１は、この場合、クエリに対する処理を効率的に行うことができるデータベースサーバに対してクエリの振り分けを行うことができない。
【００２３】
そこで、本実施の形態におけるＤＢサーバ１は、各ＤＢサーバ（例えば、ＤＢサーバ１、２及び３）が有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、アプリサーバ１２から受信した参照クエリに対応するテーブルの参照状況を示す情報を各ＤＢサーバについて取得する。参照クエリに対応するテーブルの参照状況の示す情報は、例えば、参照クエリに対応するテーブルがキャッシュメモリに格納されている確率（以下、キャッシュヒット率とも呼ぶ）を含む情報である。そして、ＤＢサーバ１は、取得した参照状況を示す情報に基づいて、アプリサーバ１２から受信した参照クエリを振り分けるＤＢサーバを選択する。
【００２４】
すなわち、ＤＢサーバ１は、各ＤＢサーバから各テーブルの参照状況を示す情報を予め取得して記憶部に記憶しておく。そして、ＤＢサーバ１は、各ＤＢサーバに対する参照クエリの振り分けを、各ＤＢサーバから取得した各テーブルの参照状況を示す情報を参照することによって行う。
【００２５】
これにより、ＤＢサーバ１は、参照クエリを効率的に処理することができるＤＢサーバの選択を精度良く行うことが可能になる。
【００２６】
また、ＤＢサーバ１は、他のＤＢサーバとの間においてデータの同期を行う必要性から、他のＤＢサーバの増減情報を把握する機能を有している。そのため、ＤＢサーバ１は、各ＤＢサーバが有する各テーブルの参照状況を示す情報を取得することが可能である。
【００２７】
これにより、ＤＢサーバ１は、ロードバランサ２１と異なり、各ＤＢサーバの現在の処理負荷だけでなく、各ＤＢサーバに対応する参照状況を示す情報についても考慮した上で、参照クエリに対する処理を行うＤＢサーバの選択を行うことが可能になる。
【００２８】
［情報処理システムのハードウエア構成］
次に、情報処理システム１０のハードウエア構成について説明する。図３は、ＤＢサーバ１（マスタのＤＢサーバ）のハードウエア構成を示す図である。図４は、ＤＢサーバ２（スレーブ１のＤＢサーバ）のハードウエア構成を示す図である。
【００２９】
初めに、ＤＢサーバ１のハードウエア構成について説明を行う。
【００３０】
ＤＢサーバ１は、図３に示すように、プロセッサであるＣＰＵ１０１と、メモリ１０２と、外部インターフェース（Ｉ／Ｏユニット）１０３と、記憶媒体１０４とを有する。各部は、バス１０５を介して互いに接続される。
【００３１】
記憶媒体１０４は、例えば、記憶媒体１０４内のプログラム格納領域（図示しない）に、アプリサーバ１２から送信された参照クエリに対する処理の分散を行う処理（以下、分散制御処理とも呼ぶ）を行うためのプログラム１１０を記憶する。また、記憶媒体１０４は、例えば、分散制御処理を行う際に用いられる情報を記憶する記憶部１３０（以下、情報格納領域１３０とも呼ぶ）を有する。
【００３２】
ＣＰＵ１０１は、記憶媒体１０４からロードされたプログラム１１０と協働して分散制御処理を行う。また、外部インターフェース１０３は、例えば、ＤＢサーバ２、ＤＢサーバ３、アプリサーバ１１及びアプリサーバ１２と通信を行う。
【００３３】
次に、ＤＢサーバ２のハードウエア構成について説明を行う。なお、ＤＢサーバ３（スレーブ２のＤＢサーバ）のハードウエア構成は、ＤＢサーバ２のハードウエア構成と同じであるため説明を省略する。
【００３４】
ＤＢサーバ２は、図４に示すように、プロセッサであるＣＰＵ２０１と、メモリ２０２と、外部インターフェース（Ｉ／Ｏユニット）２０３と、記憶媒体２０４とを有する。各部は、バス２０５を介して互いに接続される。
【００３５】
記憶媒体２０４は、例えば、記憶媒体２０４内のプログラム格納領域（図示しない）に、分散制御処理を行うためのプログラム２１０を記憶する。また、記憶媒体２０４は、例えば、分散制御処理を行う際に用いられる情報を記憶する記憶部２３０（以下、情報格納領域２３０とも呼ぶ）を有する。
【００３６】
ＣＰＵ２０１は、記憶媒体２０４からロードされたプログラム２１０と協働して分散制御処理を行う。また、外部インターフェース２０３は、例えば、ＤＢサーバ１、ＤＢサーバ３、アプリサーバ１１及びアプリサーバ１２と通信を行う。
【００３７】
［情報処理システムの機能］
次に、情報処理システム１０の機能について説明する。図５は、ＤＢサーバ１（マスタのＤＢサーバ）の機能ブロック図である。また、図６は、ＤＢサーバ２（スレーブのＤＢサーバ）の機能ブロック図である。
【００３８】
初めに、ＤＢサーバ１の機能ブロック図について説明を行う。
【００３９】
ＤＢサーバ１のＣＰＵ１０１は、図５に示すように、プログラム１１０と協働することにより、例えば、情報生成部１１１と、クエリ受信部１１２と、情報取得部１１３と、ＤＢ選択部１１４（以下、データベース選択部１１４とも呼ぶ）と、指示送信部１１５と、クエリ処理部１１６として動作する。また、情報格納領域１３０には、例えば、ＤＢ状況情報１３１と、ＤＢ負荷情報１３２と、ＤＢ接続情報１３３とが記憶される。
【００４０】
情報生成部１１１は、例えば、各ＤＢサーバ（ＤＢサーバ１、２及び３）から取得した各情報に基づいて、ＤＢ状況情報１３１、ＤＢ負荷情報１３２及びＤＢ接続情報１３３を生成する。そして、情報生成部１１１は、生成したＤＢ状況情報１３１、ＤＢ負荷情報１３２及びＤＢ接続情報１３３を情報格納領域１３０に記憶する。ＤＢ状況情報１３１、ＤＢ負荷情報１３２及びＤＢ接続情報１３３の具体例については後述する。
【００４１】
クエリ受信部１１２は、例えば、アプリサーバ１１から送信された更新クエリまたはアプリサーバ１２から送信された参照クエリを受信する。
【００４２】
情報取得部１１３は、例えば、アプリサーバ１２から送信された参照クエリを受信したことに応じて、各ＤＢサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する情報格納領域１３０を参照し、受信した参照クエリに対応するテーブルの参照状況を示す情報を各ＤＢサーバについて取得する。テーブルの参照状況を示す情報は、例えば、情報格納領域１３０に記憶されたＤＢ状況情報１３１である。
【００４３】
ＤＢ選択部１１４は、情報取得部１１３が取得した参照状況を示す情報に基づいて、参照クエリを振り分けるＤＢサーバを選択する。
【００４４】
指示送信部１１５は、ＤＢ選択部１１４が参照クエリを振り分けるＤＢサーバとしてＤＢサーバ１以外の他のＤＢサーバ（ＤＢサーバ２またはＤＢサーバ３）を選択した場合、参照クエリの送信元であるアプリサーバ１２に、他のＤＢサーバに対する参照クエリの送信を指示する。
【００４５】
クエリ処理部１１６は、ＤＢ選択部１１４が参照クエリを振り分けるＤＢサーバとして自ＤＢサーバ（ＤＢサーバ１）を選択した場合、クエリ受信部１１２が受信した参照クエリに対する処理を行う。そして、クエリ処理部１１６は、例えば、受信した参照クエリに対する処理の結果を、参照クエリの送信元であるアプリサーバ１２に対して送信する。
【００４６】
また、クエリ処理部１１６は、クエリ受信部１１２がアプリサーバ１１から更新クエリを受信した場合、受信した更新クエリに対する処理を行う。そして、クエリ処理部１１６は、例えば、受信した更新クエリに対する処理の結果を、更新クエリの送信元であるアプリサーバ１１に対して送信する。
【００４７】
次に、ＤＢサーバ２の機能ブロック図について説明を行う。
【００４８】
ＤＢサーバ２のＣＰＵ２０１は、図６に示すように、プログラム２１０と協働することにより、例えば、クエリ受信部２１１と、クエリ処理部２１２として動作する。
【００４９】
クエリ受信部２１１は、アプリサーバ１１から送信された更新クエリまたはアプリサーバ１２から送信された参照クエリを受信する。
【００５０】
クエリ処理部２１２は、クエリ受信部２１１が受信した参照クエリに対する処理を行う。そして、クエリ処理部２１２は、例えば、受信した参照クエリに対する処理の結果を、参照クエリの送信元であるアプリサーバ１２に対して送信する。
【００５１】
また、クエリ処理部２１２は、クエリ受信部２１１が受信した更新クエリに対する処理を行う。そして、クエリ処理部２１２は、例えば、更新した参照クエリに対する処理の結果を、更新クエリの送信元であるアプリサーバ１１に対して送信する。
【００５２】
［第１の実施の形態の概略］
次に、第１の実施の形態の概略について説明を行う。図７は、第１の実施の形態における分散制御処理の概略を説明するフローチャート図である。図８及び図９は、第１の実施の形態における分散制御処理の概略を説明する図である。
【００５３】
ＤＢサーバ１は、図７に示すように、参照クエリを受信するまで待機する（Ｓ１のＮＯ）。具体的に、アプリサーバ１２は、図８に示すように、例えば、予め設定された送信先情報（図示しない）を参照し、送信先情報が示すＤＢサーバであるＤＢサーバ１に対して参照クエリを送信する。そして、ＤＢサーバ１は、アプリサーバ１２からの参照クエリを受信するまで待機する。
【００５４】
続いて、参照クエリを受信した場合（Ｓ１のＹＥＳ）、ＤＢサーバ１は、複数のＤＢサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する情報格納領域１３０を参照し、Ｓ１の処理で受信した参照クエリに対応するテーブルの参照状況を示す情報を複数のＤＢサーバについて取得する（Ｓ２）。
【００５５】
具体的に、ＤＢサーバ１は、この場合、図８に示すように、情報格納領域１３０に記憶されたＤＢ状況情報１３１から、Ｓ１の処理で受信した参照クエリに対応するテーブルの参照状況を示す情報を複数のＤＢサーバについて取得する。
【００５６】
その後、ＤＢサーバ１は、Ｓ２の処理で取得した参照状況を示す情報に基づいて、Ｓ１の処理で受信したクエリを振り分けるＤＢサーバを選択する（Ｓ３）。
【００５７】
具体的に、ＤＢサーバ１は、図９に示すように、例えば、情報格納領域１３０に記憶されたＤＢ状況情報１３１から、Ｓ１の処理で受信した参照クエリの振り分け先ＤＢを特定する。そして、例えば、Ｓ１の処理で受信した参照クエリの振り分け先ＤＢとしてＤＢサーバ３を選択した場合、ＤＢサーバ１は、参照クエリの送信元であるアプリサーバ１２に対し、ＤＢサーバ３を識別する情報と、ＤＢサーバ３の送信先を示す情報（例えば、ＤＢサーバ３のＩＰアドレス）とを送信する。その後、アプリサーバ１２（アプリサーバ１２において動作するエージェント）は、ＤＢサーバ１からの情報を送信に応じて、ＤＢサーバ３に対する参照クエリの再送信を行う。
【００５８】
すなわち、ＤＢサーバ１は、各ＤＢサーバから各テーブルの参照状況を示す情報を予め取得して記憶部に記憶しておく。そして、ＤＢサーバ１は、各ＤＢサーバに対する参照クエリの振り分けを、各ＤＢサーバから取得した各テーブルの参照状況を示す情報を参照することによって行う。
【００５９】
これにより、ＤＢサーバ１は、参照クエリを効率的に処理することができるＤＢサーバの選択を精度良く行うことが可能になる。
【００６０】
また、ＤＢサーバ１は、他のＤＢサーバとの間においてデータの同期を行う必要性から、他のＤＢサーバの増減情報（例えば、仮想マシンからなるＤＢサーバのスケールイン及びスケールアウトの実施情報）を把握する機能を有している。そのため、ＤＢサーバ１は、各ＤＢサーバが有する各テーブルの参照状況を示す情報を取得することが可能である。
【００６１】
これにより、ＤＢサーバ１は、図１で説明したロードバランサ２１と異なり、各ＤＢサーバの現在の処理負荷だけでなく、各ＤＢサーバに対応する参照状況を示す情報についても考慮した上で、参照クエリに対する処理を行うＤＢサーバの選択を行うことが可能になる。
【００６２】
［第１の実施の形態の詳細］
次に、第１の実施の形態の詳細について説明する。図１０から図１６は、第１の実施の形態における分散制御処理の詳細を説明するフローチャート図である。また、図１７及び図１９は、第１の実施の形態における分散制御処理の詳細を説明する図である。図１７から図１９を参照しながら、図１０及び図１６の分散制御処理の詳細について説明する。なお、以下、各ＤＢサーバが仮想マシンであるものとして説明を行う。
【００６３】
［第１情報生成処理］
初めに、分散制御処理の事前処理であって、ＤＢ状況情報１３１を生成する処理（以下、第１情報生成処理）について説明を行う。
【００６４】
ＤＢサーバ１の情報生成部１１１は、第１情報取得タイミングになるまで待機する（Ｓ１１のＮＯ）。第１情報取得タイミングは、例えば、１分ごと等の定期的なタイミングであってよい。
【００６５】
そして、第１情報取得タイミングになった場合（Ｓ１１のＹＥＳ）、情報生成部１１１は、各ＤＢサーバの状況を示す情報を各ＤＢサーバから取得する（Ｓ１２）。
【００６６】
具体的に、情報生成部１１１は、例えば、各ＤＢサーバが受信する可能性があるクエリに対応する各テーブルのキャッシュヒット率を、各ＤＢサーバの状況を示す情報として取得する。
【００６７】
また、情報生成部１１１は、例えば、各ＤＢサーバが受信する可能性があるクエリに対応する各テーブルを参照する際に待ち時間が発生するか否かを示す情報を、各ＤＢサーバの状況を示す情報として取得する。すなわち、情報生成部１１１は、例えば、各ＤＢサーバが受信する可能性があるクエリに対応する各テーブルの参照が他のクエリによってロック（制限）されている状況にあるか否かを示す情報（以下、ロック情報とも呼ぶ）を取得する。
【００６８】
さらに、情報生成部１１１は、例えば、各ＤＢサーバが受信する可能性があるクエリに対応する各テーブルの参照に要する記憶領域へのアクセス回数を示す情報を、各ＤＢサーバの状況を示す情報として取得する。すなわち、情報生成部１１１は、例えば、各ＤＢサーバが受信する可能性があるクエリに対応する各テーブルが記憶領域において断片化して記憶されているか否かを示す情報（以下、記憶効率情報とも呼ぶ）を取得する。
【００６９】
続いて、情報生成部１１１は、Ｓ１２の処理で取得した情報からＤＢ状況情報１３１を生成する（Ｓ１３）。そして、情報生成部１１１は、Ｓ１３の処理で生成したＤＢ状況情報１３１を情報格納領域１３０に記憶する（Ｓ１４）。その後、ＤＢサーバ１は、第１情報生成処理を終了する。以下、ＤＢ状況情報１３１の具体例について説明を行う。
【００７０】
［ＤＢ状況情報の具体例］
図１７は、ＤＢ状況情報１３１の具体例を説明する図である。具体的に、図１７は、ＤＢ状況情報１３１に含まれる情報のうち、ある１つのテーブルに関する情報の具体例を説明する図である。
【００７１】
図１７に示すＤＢ状況情報１３１は、ＤＢ状況情報１３１に含まれる各情報を識別する「項番」と、ＤＢサーバの識別情報が設定される「ＤＢ名称」と、Ｓ１２の処理で取得したキャッシュヒット率に対応する値（例えば、キャッシュヒット率に比例する値）が設定される「キャッシュヒット率」を項目として有する。「ＤＢ名称」には、例えば、図１等で説明したＤＢサーバ１に対応する「マスタ」、ＤＢサーバ２に対応する「スレーブ１」及びＤＢサーバ３に対応する「スレーブ２」のうちのいずれかが設定される。
【００７２】
また、図１７に示すＤＢ状況情報１３１は、Ｓ１２の処理で取得したロック情報に対応する値（例えば、テーブルがロックされている状態にあることを示すロック情報を取得したか否かに対応する値）が設定される「ロック情報」を項目として有する。さらに、図１７に示すＤＢ状況情報１３１は、Ｓ１２の処理で取得した記憶格納効率に対応する値（例えば、記憶格納効率に比例する値）が設定される「記憶格納効率」を項目として有する。
【００７３】
具体的に、図１７に示すＤＢ状況情報１３１において、「項番」が「１」である情報には、「ＤＢ名称」として「マスタ」が設定され、「キャッシュヒット率」として「０．１」が設定され、「ロック情報」として「０」が設定され、「記憶格納効率」として「０．１」が設定されている。
【００７４】
また、図１７に示すＤＢ状況情報１３１において、「項番」が「２」である情報には、「ＤＢ名称」として「スレーブ１」が設定され、「キャッシュヒット率」として「０．７」が設定され、「ロック情報」として「０」が設定され、「記憶格納効率」として「０．１」が設定されている。
【００７５】
さらに、図１７に示すＤＢ状況情報１３１において、「項番」が「３」である情報には、「ＤＢ名称」として「スレーブ２」が設定され、「キャッシュヒット率」として「０．１」が設定され、「ロック情報」として「１」が設定され、「記憶格納効率」として「０．１」が設定されている。
【００７６】
なお、図１７に示すＤＢ状況情報１３１において、「キャッシュヒット率」、「ロック情報」及び「記憶格納効率」には、例えば、「高」、「中」及び「低」のうちのいずれかが設定されるものであってもよい。
【００７７】
［第２情報生成処理］
次に、分散制御処理の事前処理であって、ＤＢ負荷情報１３２を生成する処理（以下、第２情報生成処理）について説明を行う。
【００７８】
情報生成部１１１は、第２情報取得タイミングになるまで待機する（Ｓ２１のＮＯ）。第２情報取得タイミングは、１分ごと等の定期的なタイミングであってよい。なお、第２情報取得タイミングは、例えば、第１情報取得タイミングと同じタイミングであってもよい。
【００７９】
そして、第２情報取得タイミングになった場合（Ｓ２１のＹＥＳ）、情報生成部１１１は、各ＤＢサーバの負荷を示す情報を各ＤＢサーバから取得する（Ｓ２２）。
【００８０】
具体的に、情報生成部１１１は、例えば、各ＤＢサーバの現在のＣＰＵ使用率を各ＤＢサーバの状況を示す情報として取得する。
【００８１】
続いて、情報生成部１１１は、Ｓ２２の処理で取得した情報からＤＢ負荷情報１３２を生成する（Ｓ２３）。そして、情報生成部１１１は、Ｓ２３の処理で生成したＤＢ負荷情報１３２を情報格納領域１３０に記憶する（Ｓ２４）。その後、ＤＢサーバ１は、第２情報生成処理を終了する。以下、ＤＢ負荷情報１３２の具体例について説明を行う。
【００８２】
［ＤＢ負荷情報の具体例］
図１８は、ＤＢ負荷情報１３２の具体例を説明する図である。
【００８３】
図１８に示すＤＢ負荷情報１３２は、ＤＢ負荷情報１３２に含まれる各情報を識別する「項番」と、ＤＢサーバの識別情報が設定される「ＤＢ名称」と、Ｓ２２の処理で取得したＣＰＵ使用率に対応する値（ＣＰＵ使用率に比例する値）が設定される「ＣＰＵ使用率」とを項目として有している。
【００８４】
具体的に、図１８に示すＤＢ負荷情報１３２において、「項番」が「１」である情報には、「ＤＢ名称」として「マスタ」が設定され、「ＣＰＵ使用率」として「０．７」が設定されている。
【００８５】
また、図１８に示すＤＢ負荷情報１３２において、「項番」が「２」である情報には、「ＤＢ名称」として「スレーブ１」が設定され、「ＣＰＵ使用率」として「０．４」が設定されている。
【００８６】
さらに、図１８に示すＤＢ負荷情報１３２において、「項番」が「３」である情報には、「ＤＢ名称」として「スレーブ２」が設定され、「ＣＰＵ使用率」として「０．１」が設定されている。
【００８７】
なお、図１８に示すＤＢ負荷情報１３２において、「ＣＰＵ使用率」には、例えば、「高」、「中」及び「低」のうちのいずれかが設定されるものであってもよい。
【００８８】
［第３情報生成処理］
次に、分散制御処理の事前処理であって、ＤＢ接続情報１３３を生成する処理（以下、第３情報生成処理）について説明を行う。
【００８９】
情報生成部１１１は、ＤＢサーバの増減を検知するまで待機する（Ｓ３１のＮＯ）。具体的に、情報生成部１１１は、例えば、他のＤＢサーバから新たなＤＢサーバの追加が行われたことを示す情報を受信するまで、または、他のＤＢサーバからＤＢサーバの削除が行われることを示す情報を受信するまで待機する。
【００９０】
続いて、ＤＢサーバの増減を検知した場合（Ｓ３１のＹＥＳ）、情報生成部１１１は、Ｓ３１の処理で増減を検知したＤＢサーバを示す情報を含むＤＢ接続情報１３３を生成する（Ｓ３２）。そして、情報生成部１１１は、Ｓ３２の処理で生成したＤＢ接続情報１３３を情報格納領域１３０に記憶する（Ｓ３３）。その後、ＤＢサーバ１は、第３情報生成処理を終了する。以下、ＤＢ接続情報１３３の具体例について説明を行う。
【００９１】
［ＤＢ接続情報の具体例］
図１９は、ＤＢ接続情報１３３の具体例を説明する図である。
【００９２】
図１９に示すＤＢ接続情報１３３は、ＤＢ接続情報１３３に含まれる各情報を識別する「項番」と、ＤＢサーバの識別情報が設定される「ＤＢ名称」とを項目として有する。また、図１９に示すＤＢ接続情報１３３は、各ＤＢサーバのＩＰアドレスが設定される「ＩＰアドレス」と、各ＤＢサーバのポート番号が設定される「ポート番号」とが設定される。
【００９３】
具体的に、図１９に示すＤＢ接続情報１３３において、「項番」が「１」である情報には、「ＤＢ名称」として「マスタ」が設定され、「ＩＰアドレス」として「ＸＸＸ．ＸＸＸ」が設定され、「ポート番号」として「ＡＡＡ」が設定されている。
【００９４】
また、図１９に示すＤＢ接続情報１３３において、「項番」が「２」である情報には、「ＤＢ名称」として「スレーブ１」が設定され、「ＩＰアドレス」として「ＹＹＹ．ＹＹＹ」が設定され、「ポート番号」として「ＢＢＢ」が設定されている。
【００９５】
さらに、図１９に示すＤＢ接続情報１３３において、「項番」が「３」である情報には、「ＤＢ名称」として「スレーブ２」が設定され、「ＩＰアドレス」として「ＺＺＺ．ＺＺＺ」が設定され、「ポート番号」として「ＣＣＣ」が設定されている。
【００９６】
［分散制御処理（マスタのＤＢサーバ）］
次に、マスタのＤＢサーバが行う分散制御処理について説明を行う。
【００９７】
ＤＢサーバ１のクエリ受信部１１２は、図１３に示すように、参照クエリを受信するまで待機する（Ｓ４１のＮＯ）。具体的に、クエリ受信部１１２は、例えば、アプリサーバ１２から送信された参照クエリを受信するまで待機する。
【００９８】
そして、参照クエリを受信した場合（Ｓ４１のＹＥＳ）、ＤＢサーバ１のクエリ処理部１１６は、受信した参照クエリに対してパース処理を行う（Ｓ４２）。具体的に、クエリ処理部１１６は、Ｓ４１の処理で受信した参照クエリの解析を行い、Ｓ４１の処理で受信した参照クエリに対する処理において参照されるテーブルを特定する。
【００９９】
続いて、ＤＢサーバ１の情報取得部１１３は、情報格納領域１３０に記憶されたＤＢ状況情報１３１及びＤＢ負荷情報１３２に含まれる情報のうち、Ｓ４１の処理で受信した参照クエリに対応するテーブルについての情報を取得する（Ｓ４３）。
【０１００】
その後、ＤＢサーバ１のＤＢ選択部１１４は、Ｓ４３の処理で取得したＤＢ状況情報１３１及びＤＢ負荷情報１３２を参照し、Ｓ４１の処理で受信した参照クエリに対する処理を行わせるＤＢサーバを決定する（Ｓ４４）。以下、Ｓ４４の処理の具体例について説明を行う。
【０１０１】
［Ｓ４４の処理の具体例］
ＤＢ選択部１１４は、例えば、以下の式１を用いることにより、Ｓ４３の処理において取得したＤＢ状況情報１３１及びＤＢ負荷情報１３２から、Ｓ４１の処理で受信した参照クエリに対する処理を行わせる場合の各ＤＢサーバのコスト（以下、クエリ実行コストとも呼ぶ）を算出する。
【０１０２】
クエリ実行コスト＝（１−「キャッシュヒット率」の設定値）×キャッシュヒット率のコスト＋「ロック情報」の設定値×ロック情報のコスト＋（１−「記憶格納効率」の設定値）×記憶格納効率のコスト＋「ＣＰＵ使用率」の設定値×ＣＰＵ使用率のコスト          ・・・（式１）
【０１０３】
具体的に、図１７で説明したＤＢ状況情報１３１における「ＤＢ名称」が「マスタ」である情報（「項番」が「１」である情報）には、「キャッシュヒット率」として「０．１」が設定され、「ロック情報」として「０」が設定され、「記憶格納効率」として「０．１」が設定されている。また、図１８で説明したＤＢ負荷情報１３２における「ＤＢ名称」が「マスタ」である情報（「項番」が「１」である情報）には、「ＣＰＵ使用率」として「０．７」が設定されている。そのため、例えば、キャッシュヒット率のコスト、ロック情報のコスト、記憶格納効率のコスト及びＣＰＵ使用率のコストがそれぞれ「３０」、「３０」、「１０」及び「１０」である場合、ＤＢ選択部１１４は、マスタのＤＢサーバのクエリ実行コストとして「４３」を算出する。同様に、ＤＢ選択部１１４は、スレーブ１のＤＢサーバのクエリ実行コストとして「２２」を算出し、スレーブ２のＤＢサーバのクエリ実行コストとして「６７」を算出する。
【０１０４】
したがって、ＤＢ選択部１１４は、この場合、クエリ実行コストが最も小さいＤＢサーバであるスレーブ１のＤＢサーバを優先的に選択する。
【０１０５】
図１４に戻り、Ｓ４４の処理において自ＤＢサーバ（ＤＢサーバ１）が選択された場合（Ｓ５１のＹＥＳ）、クエリ処理部１１６は、Ｓ４１の処理で受信した参照クエリに対してオプティマイザ処理を行う（Ｓ５２）。具体的に、クエリ処理部１１６は、例えば、Ｓ４１の処理で受信した参照クエリの実行計画情報（図示しない）を生成する。参照クエリの実行計画情報は、例えば、参照クエリに対する処理を行う際に、インデックスの参照を行うか否かを含む情報である。
【０１０６】
そして、クエリ処理部１１６は、Ｓ４１の処理で受信した参照クエリに対してエクゼキュータ処理を行う（Ｓ５３）。具体的に、クエリ処理部１１６は、例えば、Ｓ５２の処理で生成した実行計画情報に従って、Ｓ４１の処理で受信した参照クエリに対する処理を実行する。その後、ＤＢサーバ１は、分散制御処理を終了する。
【０１０７】
一方、Ｓ４４の処理において他のＤＢサーバが選択された場合（Ｓ５１のＮＯ）、情報取得部１１３は、情報格納領域１３０に記憶されたＤＢ接続情報１３３を取得する（Ｓ５４）。そして、ＤＢ選択部１１４は、Ｓ５４の処理で取得したＤＢ接続情報１３３のうち、Ｓ４４の処理で決定したＤＢサーバに対応する情報を特定する（Ｓ５５）。具体的に、例えば、Ｓ４４の処理においてスレーブ１のＤＢサーバが選択された場合、ＤＢ選択部１１４は、図１９で説明したＤＢ接続情報１３３のうち、「ＤＢ名称」が「スレーブ１」である情報（「項番」が「２」である情報）の「ＩＰアドレス」及び「ポート番号」に設定された情報である「ＹＹＹ．ＹＹＹ」及び「ＢＢＢ」を特定する。
【０１０８】
続いて、ＤＢサーバ１の指示送信部１１５は、Ｓ４１の処理で受信した参照クエリの送信元に対し、Ｓ５５の処理で特定した情報を送信する（Ｓ５６）。具体的に、指示送信部１１５は、例えば、Ｓ４１の処理で受信した参照クエリの送信元であるアプリサーバ１２に対し、Ｓ５５の処理で特定した情報を送信する。その後、ＤＢサーバ１は、分散制御処理を終了する。
【０１０９】
これにより、ＤＢサーバ１は、アプリサーバ１２から受信した参照クエリを効率的に処理することができるＤＢサーバの選択を精度良く行うことが可能になる。
【０１１０】
また、事業者は、参照クエリに対する処理を行うＤＢサーバの選択をＤＢサーバ１に行わせることで、図２で説明したロードバランサ２１を配備する必要がなくなる。そのため、事業者は、ロードバランサ２１に対して、ＤＢサーバのスケールイン及びスケールアウトの実施状況を示す情報等の設定を行う必要がなくなる。
【０１１１】
［分散制御処理（アプリサーバ）］
次に、参照アプリを送信するアプリサーバ１２が行う分散制御処理について説明を行う。なお、以下、アプリサーバ１２において、ＤＢサーバ１等と情報の送受信を行うことが可能なエージェント（図示しない）が動作しているものとして説明を行う。
【０１１２】
アプリサーバ１２のエージェントは、図１５に示すように、ＤＢサーバ１からＤＢ接続情報１３３（ＤＢ接続情報１３３に含まれる情報の少なくとも一部）を受信するまで待機する（Ｓ６１のＮＯ）。
【０１１３】
そして、ＤＢ接続情報１３３を受信した場合（Ｓ６１のＹＥＳ）、エージェントは、Ｓ６１で受信した接続情報が示す送信先に対し、ＤＢサーバ１に送信した参照クエリを再送信する（Ｓ６２）。
【０１１４】
これにより、ＤＢサーバ１は、Ｓ４４の処理において、参照クエリに対する処理を行うＤＢサーバとして他のＤＢサーバを選択した場合であっても、選択した他のサーバに対して参照クエリの送信を行うことが可能になる。
【０１１５】
［分散制御処理（スレーブのＤＢサーバ）］
次に、スレーブのＤＢサーバが行う分散制御処理について説明を行う。
【０１１６】
クエリ受信部１１２は、図１６に示すように、参照クエリを受信するまで待機する（Ｓ７１のＮＯ）。具体的に、クエリ受信部１１２は、Ｓ６２の処理においてアプリサーバ１２が送信した参照クエリを受信するまで待機する。
【０１１７】
そして、参照クエリを受信した場合（Ｓ７１のＹＥＳ）、クエリ処理部１１６は、受信した参照クエリに対してパース処理を行う（Ｓ７２）。具体的に、クエリ処理部１１６は、Ｓ７１の処理で受信した参照クエリの解析を行う。
【０１１８】
続いて、クエリ処理部１１６は、Ｓ７１の処理で受信した参照クエリに対してオプティマイザ処理を行う。具体的に、クエリ処理部１１６は、Ｓ７１の処理で受信した参照クエリの実行計画情報（図示しない）を生成する（Ｓ７３）。
【０１１９】
さらに、クエリ処理部１１６は、Ｓ７１の処理で受信した参照クエリに対してエクゼキュータ処理を行う（Ｓ７４）。具体的に、クエリ処理部１１６は、Ｓ７３の処理で生成した実行計画に従って、Ｓ７１の処理で受信した参照クエリに対する処理を実行する。その後、ＤＢサーバ１は、分散制御処理を終了する。
【０１２０】
このように、本実施の形態におけるＤＢサーバ１は、各ＤＢサーバ（例えば、ＤＢサーバ１、２及び３）が有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、アプリサーバ１２から受信した参照クエリに対応するテーブルの参照状況を示す情報を各ＤＢサーバについて取得する。そして、ＤＢサーバ１は、取得した参照状況を示す情報に基づいて、アプリサーバ１２から受信した参照クエリを振り分けるＤＢサーバを選択する。
【０１２１】
これにより、情報処理システム１０では、参照クエリを効率的に処理することができるＤＢサーバの選択を精度良く行うことが可能になる。
【０１２２】
具体的に、ＤＢサーバ１は、例えば、ＣＰＵ使用率が他のＤＢサーバよりも高いＤＢサーバであっても、参照クエリに対応するテーブルがロックされていないＤＢサーバを優先的に選択することが可能になる。また、ＤＢサーバ１は、この場合、例えば、ＣＰＵ使用率が他のＤＢサーバよりも高いＤＢサーバであっても、参照クエリに対応するテーブルがキャッシュメモリに格納されているＤＢサーバを優先的に選択することが可能になる。
【０１２３】
［第２の実施の形態における分散制御処理］
次に、第２の実施の形態における分散制御処理について説明を行う。
【０１２４】
第２の実施の形態では、第１の実施の形態においてＤＢサーバ１が行っていた分散制御処理を各ＤＢサーバと異なる管理サーバ４が行う。これにより、管理サーバ４は、処理制御処理の実行に伴うＤＢサーバ１の処理負担を軽減させることが可能になる。
【０１２５】
［情報処理システムのハードウエア構成］
初めに、第２の実施の形態における情報処理システム１０のハードウエア構成について説明する。図２０は、第２の実施の形態における管理サーバ４のハードウエア構成を示す図である。
【０１２６】
管理サーバ４は、例えば、１台以上の物理マシンである。そして、管理サーバ４は、図２０に示すように、プロセッサであるＣＰＵ４０１と、メモリ４０２と、外部インターフェース（Ｉ／Ｏユニット）４０３と、記憶媒体４０４とを有する。各部は、バス４０５を介して互いに接続される。
【０１２７】
記憶媒体４０４は、例えば、記憶媒体４０４内のプログラム格納領域（図示しない）に、分散制御処理を行うためのプログラム４１０を記憶する。また、記憶媒体４０４は、例えば、分散制御処理を行う際に用いられる情報を記憶する記憶部４３０（以下、情報格納領域４３０とも呼ぶ）を有する。
【０１２８】
ＣＰＵ４０１は、記憶媒体４０４からロードされたプログラム４１０と協働して分散制御処理を行う。また、外部インターフェース４０３は、例えば、ＤＢサーバ１、ＤＢサーバ２、ＤＢサーバ３、アプリサーバ１１及びアプリサーバ１２と通信を行う。
【０１２９】
［情報処理システムの機能］
次に、第２の実施の形態における情報処理システム１０の機能について説明する。図２１は、第２の実施の形態における管理サーバ４の機能ブロック図である。なお、第２の実施の形態における各ＤＢサーバ（ＤＢサーバ１、２及び３）の機能は、図６で説明したＤＢサーバ２の機能と同じであるため説明を省略する。
【０１３０】
管理サーバ４のＣＰＵ４０１は、図２１に示すように、プログラム４１０と協働することにより、例えば、情報生成部４１１と、クエリ受信部４１２と、情報取得部４１３と、ＤＢ選択部４１４（以下、データベース選択部４１４とも呼ぶ）と、指示送信部４１５として動作する。また、情報格納領域４３０には、例えば、ＤＢ状況情報４３１と、ＤＢ負荷情報４３２と、ＤＢ接続情報４３３とが記憶される。なお、ＤＢ状況情報４３１、ＤＢ負荷情報４３２及びＤＢ接続情報４３３については、第１の実施の形態において説明したＤＢ状況情報１３１、ＤＢ負荷情報１３２及びＤＢ接続情報１３３と同じであるため説明を省略する。
【０１３１】
情報生成部４１１は、例えば、各ＤＢサーバから取得した各情報に基づいて、ＤＢ状況情報４３１、ＤＢ負荷情報４３２及びＤＢ接続情報４３３を生成する。そして、情報生成部４１１は、生成したＤＢ状況情報４３１、ＤＢ負荷情報４３２及びＤＢ接続情報４３３を情報格納領域４３０に記憶する。
【０１３２】
クエリ受信部４１２は、アプリサーバ１１から送信された更新クエリまたはアプリサーバ１２から送信された参照クエリを受信する。
【０１３３】
情報取得部４１３は、アプリサーバ１２から参照クエリを受信したことに応じて、各ＤＢサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する情報格納領域４３０を参照し、受信した参照クエリに対応するテーブルの参照状況を示す情報を各ＤＢサーバについて取得する。
【０１３４】
ＤＢ選択部４１４は、情報取得部４１３が取得した参照状況を示す情報に基づいて、参照クエリを振り分けるＤＢサーバを選択する。
【０１３５】
指示送信部４１５は、クエリ受信部４１２が受信した参照クエリの送信元であるアプリサーバ１２に、ＤＢ選択部４１４が選択したＤＢサーバに対する参照クエリの送信を指示する。
【０１３６】
［第２の実施の形態の概略］
次に、第２の実施の形態の概略について説明を行う。図２２は、第２の実施の形態における分散制御処理の概略を説明するフローチャート図である。図２３及び図２４は、第２の実施の形態における分散制御処理の概略を説明する図である。
【０１３７】
管理サーバ４は、図２２に示すように、参照クエリを受信するまで待機する（Ｓ１０１のＮＯ）。具体的に、アプリサーバ１２は、図２３に示すように、例えば、予め設定された送信先情報（図示しない）を参照し、送信先情報が示す管理サーバ４に対して参照クエリを送信する。そして、管理サーバ４は、アプリサーバ１２からの参照クエリを受信するまで待機する。
【０１３８】
続いて、参照クエリを受信した場合（Ｓ１０１のＹＥＳ）、管理サーバ４は、複数のＤＢサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する情報格納領域４３０を参照し、Ｓ１０１の処理で受信した参照クエリに対応するテーブルの参照状況を示す情報を複数のＤＢサーバについて取得する（Ｓ１０２）。
【０１３９】
具体的に、管理サーバ４は、この場合、図２３に示すように、情報格納領域４３０に記憶されたＤＢ状況情報４３１から、Ｓ１０１の処理で受信した参照クエリに対応するテーブルの参照状況を示す情報を複数のＤＢサーバについて取得する。
【０１４０】
その後、管理サーバ４は、Ｓ１０２の処理で取得した参照状況を示す情報に基づいて、Ｓ１０１の処理で受信したクエリを振り分けるＤＢサーバを選択する（Ｓ１０３）。
【０１４１】
具体的に、管理サーバ４は、図２４に示すように、例えば、情報格納領域４３０に記憶されたＤＢ状況情報４３１から、Ｓ１０１の処理で受信した参照クエリの振り分け先ＤＢを特定する。そして、例えば、Ｓ１０１の処理で受信した参照クエリの振り分け先ＤＢとしてＤＢサーバ３を選択した場合、管理サーバ４は、参照クエリの送信元であるアプリサーバ１２に対し、ＤＢサーバ３を識別する情報と、ＤＢサーバ３の送信先を示す情報（例えば、ＤＢサーバ３のＩＰアドレス）とを送信する。その後、アプリサーバ１２（アプリサーバ１２において動作するエージェント）は、管理サーバ４からの情報を送信に応じて、ＤＢサーバ３に対する参照クエリの再送信を行う。
【０１４２】
［第２の実施の形態の詳細］
次に、第２の実施の形態の詳細について説明する。図２５及び図２６は、第２の実施の形態における分散制御処理の詳細を説明するフローチャート図である。なお、以下、第１の実施の形態における分散制御処理の詳細と異なる処理についてのみ説明を行う。
【０１４３】
［分散制御処理（管理サーバ）］
管理サーバ４のクエリ受信部４１２は、図２５に示すように、参照クエリを受信するまで待機する（Ｓ１１１のＮＯ）。具体的に、クエリ受信部４１２は、例えば、アプリサーバ１２から参照クエリを受信するまで待機する。
【０１４４】
そして、参照クエリを受信した場合（Ｓ１１１のＹＥＳ）、クエリ受信部４１２は、受信した参照クエリに対してパース処理を行う（Ｓ１１２）。具体的に、クエリ受信部４１２は、Ｓ１１１の処理で受信した参照クエリの解析を行い、Ｓ１１１の処理で受信した参照クエリに対する処理において参照されるテーブルを特定する。
【０１４５】
続いて、管理サーバ４の情報取得部４１３は、情報格納領域４３０に記憶されたＤＢ状況情報４３１及びＤＢ負荷情報４３２に含まれる情報のうち、Ｓ１０１の処理で受信した参照クエリに対応するテーブルについての情報を取得する（Ｓ１１３）。
【０１４６】
次に、管理サーバ４のＤＢ選択部４１４は、Ｓ１１３の処理で取得したＤＢ状況情報４３１及びＤＢ負荷情報４３２を参照し、Ｓ１１１の処理で受信した参照クエリに対する処理を行わせるＤＢサーバを決定する（Ｓ１１４）。
【０１４７】
そして、情報取得部４１３は、図２６に示すように、情報格納領域４３０に記憶されたＤＢ接続情報４３３を取得する（Ｓ１２１）。そして、ＤＢ選択部４１４は、Ｓ１２１の処理で取得したＤＢ接続情報４３３のうち、Ｓ１１４の処理で決定したＤＢサーバに対応する情報を特定する（Ｓ１２２）。
【０１４８】
続いて、管理サーバ４の指示送信部４１５は、Ｓ１１１の処理で受信した参照クエリの送信元に対し、Ｓ１２２の処理で特定した情報を送信する（Ｓ１２３）。その後、管理サーバ４は、分散制御処理を終了する。
【０１４９】
これにより、管理サーバ４は、処理制御処理の実行に伴うＤＢサーバ１の処理負担を軽減させることが可能になる。
【０１５０】
以上の実施の形態をまとめると、以下の付記のとおりである。
【０１５１】
（付記１）
複数のデータベースサーバのうちの１つのデータベースサーバのコンピュータに実行させる分散制御プログラムであって、
前記複数のデータベースサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、受信したクエリに対応するテーブルの参照状況を示す情報を前記複数のデータベースサーバについて取得し、
取得した前記参照状況を示す情報に基づいて、前記クエリを振り分けるデータベースサーバを選択する、
処理を前記コンピュータに実行させることを特徴とする分散制御プログラム。
【０１５２】
（付記２）
付記１において、
前記参照状況を示す情報は、前記クエリに対応するテーブルの参照があった場合における前記クエリに対応するテーブルのキャッシュヒット率を示す情報を含む、
ことを特徴とする分散制御プログラム。
【０１５３】
（付記３）
付記２において、
前記選択する処理では、前記キャッシュヒット率が高いデータベースサーバを優先的に選択する、
ことを特徴とする分散制御プログラム。
【０１５４】
（付記４）
付記１において、
前記参照状況を示す情報は、前記クエリに対応するテーブルを参照する際に待ち時間が発生するか否かを示す情報を含む、
ことを特徴とする分散制御プログラム。
【０１５５】
（付記５）
付記４において、
前記待ち時間が発生するか否かを示す情報は、前記クエリに対応するテーブルの参照が他のクエリによってロックされている状況にあるか否かを示す情報である、
ことを特徴とする分散制御プログラム。
【０１５６】
（付記６）
付記４において、
前記選択する処理では、前記待ち時間が発生しないデータベースサーバを優先的に選択する、
ことを特徴とする分散制御プログラム。
【０１５７】
（付記７）
付記１において、
前記参照状況を示す情報は、前記クエリに対応するテーブルの参照に要する記憶領域へのアクセス回数を示す情報を含む、
ことを特徴とする分散制御プログラム。
【０１５８】
（付記８）
付記７において、
前記選択する処理では、前記アクセス回数が少ないデータベースサーバを優先的に選択する、
ことを特徴とする分散制御プログラム。
【０１５９】
（付記９）
付記１において、さらに、
前記クエリを振り分けるデータベースサーバとして前記複数のデータベースサーバのうちの他のデータベースサーバを選択した場合、前記クエリの送信元に、前記他のデータベースサーバに対する前記クエリの送信を指示する、
処理を前記コンピュータに実行させることを特徴とする分散制御プログラム。
【０１６０】
（付記１０）
付記９において、
前記指示する処理では、前記他のデータベースサーバのアドレスを含む情報を前記クエリの送信元に送信し、
前記クエリの送信元は、受信した前記アドレスを参照して、前記他のデータベースサーバに対して前記クエリを送信する、
ことを特徴とする分散制御プログラム。
【０１６１】
（付記１１）
付記１において、
前記取得する処理では、前記参照状況を示す情報と前記複数のデータベースサーバの負荷状況を示す情報を記憶する記憶部を参照し、前記クエリに対応するテーブルの参照状況を示す情報と前記負荷状況を示す情報とを前記複数のデータベースサーバについて取得し、
前記選択する処理では、取得した前記参照状況を示す情報と前記負荷状況を示す情報とに基づいて、前記クエリを振り分けるデータベースサーバを選択する、
ことを特徴とする分散制御プログラム。
【０１６２】
（付記１２）
複数のデータベースサーバに対して処理の分散を行う分散制御装置のコンピュータに実行させる分散制御プログラムであって、
前記複数のデータベースサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、受信したクエリに対応するテーブルの参照状況を示す情報を前記複数のデータベースサーバについて取得し、
取得した前記参照状況を示す情報に基づいて、前記クエリを振り分けるデータベースサーバを選択する、
処理を前記コンピュータに実行させることを特徴とする分散制御プログラム。
【０１６３】
（付記１３）
付記１２において、さらに、
前記クエリの送信元に、選択した前記データベースサーバに対する前記クエリの送信を指示する、
処理を前記コンピュータに実行させることを特徴とする分散制御プログラム。
【０１６４】
（付記１４）
複数のデータベースサーバのうちの１つのデータベースサーバであって、
前記複数のデータベースサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、受信したクエリに対応するテーブルの参照状況を示す情報を前記複数のデータベースサーバについて取得する情報取得部と、
取得した前記参照状況を示す情報に基づいて、前記クエリを振り分けるデータベースサーバを選択するデータベース選択部と、を有する、
ことを特徴とするデータベースサーバ。
【０１６５】
（付記１５）
複数のデータベースサーバに対して処理の分散を行う分散制御装置であって、
前記複数のデータベースサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、受信したクエリに対応するテーブルの参照状況を示す情報を前記複数のデータベースサーバについて取得する情報取得部と、
取得した前記参照状況を示す情報に基づいて、前記クエリを振り分けるデータベースサーバを選択するデータベース選択部と、を有する、
ことを特徴とする分散制御装置。
【０１６６】
（付記１６）
複数のデータベースサーバに対して処理の分散を行う分散制御方法であって、
前記複数のデータベースサーバのうちの１つのデータベースサーバが、前記複数のデータベースサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、受信したクエリに対応するテーブルの参照状況を示す情報を前記複数のデータベースサーバについて取得し、
前記１つのデータベースサーバが、取得した前記参照状況を示す情報に基づいて、前記クエリを振り分けるデータベースサーバを選択する、
ことを特徴とする分散制御方法。
【０１６７】
（付記１７）
複数のデータベースサーバに対して処理の分散を行う分散制御方法であって、
前記複数のデータベースサーバに対して処理の分散を行う分散制御装置が、前記複数のデータベースサーバのそれぞれが有する各テーブルの参照状況を示す情報を記憶する記憶部を参照し、受信したクエリに対応するテーブルの参照状況を示す情報を前記複数のデータベースサーバについて取得し、
前記分散制御装置が、取得した前記参照状況を示す情報に基づいて、前記クエリを振り分けるデータベースサーバを選択する、
ことを特徴とする分散制御方法。
【符号の説明】
【０１６８】
１：ＤＢサーバ              ２：ＤＢサーバ
３：ＤＢサーバ              １１：アプリサーバ
１２：アプリサーバ
【図１】
2019087133.tif 000003
【図２】
2019087133.tif 000004
【図３】
2019087133.tif 000005
【図４】
2019087133.tif 000006
【図５】
2019087133.tif 000007
【図６】
2019087133.tif 000008
【図７】
2019087133.tif 000009
【図８】
2019087133.tif 000010
【図９】
2019087133.tif 000011
【図１０】
2019087133.tif 000012
【図１１】
2019087133.tif 000013
【図１２】
2019087133.tif 000014
【図１３】
2019087133.tif 000015
【図１４】
2019087133.tif 000016
【図１５】
2019087133.tif 000017
【図１６】
2019087133.tif 000018
【図１７】
2019087133.tif 000019
【図１８】
2019087133.tif 000020
【図１９】
2019087133.tif 000021
【図２０】
2019087133.tif 000022
【図２１】
2019087133.tif 000023
【図２２】
2019087133.tif 000024
【図２３】
2019087133.tif 000025
【図２４】
2019087133.tif 000026
【図２５】
2019087133.tif 000027
【図２６】
2019087133.tif 000028