(57)【要約】【課題】リレーショナルデータベースの結合処理を高速化すること。【解決手段】負荷分散装置は、記憶部と、特定部と、依頼部と、マージ部とを備える。記憶部は、リレーショナルデータベースに記憶されるデータについて、当該データを複数に分割したデータ範囲を識別するデータ範囲識別子と、当該データ範囲に対する演算処理を実行するコアプロセッサを識別するコア識別子とを対応付けた管理情報を記憶する。特定部は、前記データに対する結合処理をリクエストされた場合、前記記憶部に記憶された前記管理情報を参照して、前記データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する。依頼部は、前記特定部によって特定された前記各コアプロセッサに前記データ範囲に対する結合処理を依頼する。マージ部は、前記各コアプロセッサからの結合処理結果をマージして、前記リクエストに応答する。【選択図】        図５
2015052977.tif 000002
【特許請求の範囲】
【請求項１】
リレーショナルデータベースに記憶されるデータについて、当該データを複数に分割したデータ範囲を識別するデータ範囲識別子と、当該データ範囲に対する演算処理を実行するコアプロセッサを識別するコア識別子とを対応付けた管理情報を記憶する記憶部と、
前記データに対する結合処理をリクエストされた場合、前記記憶部に記憶された前記管理情報を参照して、前記データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する特定部と、
前記特定部によって特定された前記各コアプロセッサに前記データ範囲に対する結合処理を依頼する依頼部と、
前記各コアプロセッサからの結合処理結果をマージして、前記リクエストに応答するマージ部と、
を備えることを特徴とする負荷分散装置。
【請求項２】
前記リレーショナルデータベースへのアクセスを許可する前に、前記コアプロセッサの数に基づいて前記データを複数のデータ範囲に分割し、分割したデータ範囲に対する演算処理を実行するコアプロセッサを決定して、前記管理情報を生成する振分部を更に備えたことを特徴とする請求項１に記載の負荷分散装置。
【請求項３】
前記リレーショナルデータベースへのアクセスを許可する前に、前記コアプロセッサが備えるキャッシュサイズと前記データのサイズとに基づいて前記データを複数のデータ範囲に分割し、分割したデータ範囲に対する演算処理を実行するコアプロセッサを決定して、前記管理情報を生成する振分部を更に備えたことを特徴とする請求項１に記載の負荷分散装置。
【請求項４】
負荷分散装置で実行される負荷分散方法であって、
前記負荷分散装置は、リレーショナルデータベースに記憶されるデータについて、当該データを複数に分割したデータ範囲を識別するデータ範囲識別子と、当該データ範囲に対する演算処理を実行するコアプロセッサを識別するコア識別子とを対応付けた管理情報を記憶する記憶部を備え、
前記データに対する結合処理をリクエストされた場合、前記記憶部に記憶された前記管理情報を参照して、前記データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する特定工程と、
特定された前記各コアプロセッサに前記データ範囲に対する結合処理を依頼する依頼工程と、
前記各コアプロセッサからの結合処理結果をマージして、前記リクエストに応答するマージ工程と、
を含んだことを特徴とする負荷分散方法。
【請求項５】
リレーショナルデータベースに記憶されるデータに対する結合処理をリクエストされた場合、記憶部に記憶された、前記データを複数に分割したデータ範囲を識別するデータ範囲識別子と、当該データ範囲に対する演算処理を実行するコアプロセッサを識別するコア識別子とを対応付けた管理情報を参照して、前記データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する特定ステップと、
特定した前記各コアプロセッサに前記データ範囲に対する結合処理を依頼する依頼ステップと、
前記各コアプロセッサからの結合処理結果をマージして、前記リクエストに応答するマージステップと、
をコンピュータに実行させるための負荷分散プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、負荷分散装置、負荷分散方法および負荷分散プログラムに関する。
【背景技術】
【０００２】
従来、複数のコアを持つプロセッサを備えるマルチコアシステムが利用されている。このようなマルチコアシステムで動作するＯＳ（Operating  System）は、プロセス（またはスレッド）を各コアに割り当てて処理を進めている。この際、やみくもにプロセスを各コアに割り当てると、性能低下を招く場合がある。
【０００３】
このため、各コアに処理を割り当てる方法として、処理分割分散装置が、複数に分けられたアプリケーションについて、あらかじめ指定された処理モデルに従って、処理を各コアに割り当てる技術が知られている。依存関係のない処理同士は、複数のコアで並列に実行することで高速に処理できるものである。
【０００４】
また、マルチコアシステムにおいて、各コアに処理を割り当てる方法として、コアの負荷やメモリアクセスの負荷を監視して、負荷に偏りがあった場合にはスレッドを他のコアに割り当てる技術が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１９１９４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記した処理モデルに従って、処理をコアに割り当てる技術では、リレーショナルデータベースの結合処理を高速化することができないという課題があった。具体的には、アプリケーション開発者は、システムが持っているコア数を意識して処理を適切に分割しなければならない。また、アプリケーション開発者は、処理モデルを適切に指定しなければならない。このため、開発者は、処理を適切に分割できない場合、或いは処理モデルを適切に指定できない場合、キャッシュヒット率を向上させることはできない。
【０００７】
また、ＲＤＢＭＳ（Relational  Data  Base  Management  System）では、負荷の大きい処理の一つである結合処理を実行する場合、結合処理の対象となる複数のデータを参照することになる。ここで、結合処理の対象となる複数のデータ各々の処理を担当するプロセスを適切に配置できない場合、キャッシュヒット率を向上させることができなくなる。このようにキャッシュヒット率が高くない場合には、参照される複数のデータがキャッシュされていないことが多く発生し、結合処理を高速化することはできない。
【０００８】
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、リレーショナルデータベースの結合処理を高速化することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、負荷分散装置は、記憶部と、特定部と、依頼部と、マージ部とを備える。記憶部は、リレーショナルデータベースに記憶されるデータについて、当該データを複数に分割したデータ範囲を識別するデータ範囲識別子と、当該データ範囲に対する演算処理を実行するコアプロセッサを識別するコア識別子とを対応付けた管理情報を記憶する。特定部は、前記データに対する結合処理をリクエストされた場合、前記記憶部に記憶された前記管理情報を参照して、前記データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する。依頼部は、前記特定部によって特定された前記各コアプロセッサに前記データ範囲に対する結合処理を依頼する。マージ部は、前記各コアプロセッサからの結合処理結果をマージして、前記リクエストに応答する。
【発明の効果】
【００１０】
本願に開示する負荷分散装置、負荷分散方法および負荷分散プログラムは、リレーショナルデータベースの結合処理を高速化することができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、第１の実施形態に係るマルチコアシステムの構成例を説明するための図である。
【図２】図２は、第１の実施形態に係るマルチコアサーバの構成を示すブロック図である。
【図３】図３は、第１の実施形態に係るデータベースが記憶するデータのリレーションの一例を説明する図である。
【図４】図４は、第１の実施形態に係るデータベースが記憶するデータのリレーションの一例を説明する図である。
【図５】図５は、第１の実施形態に係る負荷分散装置の構成例を示すブロック図である。
【図６】図６は、第１の実施形態に係る管理テーブルが記憶するデータ構造の一例を示す図である。
【図７】図７は、第１の実施形態に係る負荷分散装置によるデータマージ処理動作を説明するための図である。
【図８】図８は、第１の実施形態に係る振分部の処理手順を示すフローチャートである。
【図９】図９は、第１の実施形態に係る負荷分散装置の処理手順を示すフローチャートである。
【図１０】図１０は、第２の実施形態に係る振分部が生成した管理テーブルの一例を示す図である。
【図１１】図１１は、第２の実施形態に係る振分部の処理手順を示すフローチャートである。
【図１２】図１２は、負荷分散プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１２】
以下に、本願に係る負荷分散装置、負荷分散方法および負荷分散プログラムの実施形態を図面に基づいて詳細に説明する。なお、この実施形態により本願に係る負荷分散装置、負荷分散方法および負荷分散プログラムが限定されるものではない。
【００１３】
（第１の実施形態）
まず、図１を用いて、第１の実施形態に係るマルチコアシステム１００について説明する。図１は、第１の実施形態に係るマルチコアシステム１００の構成例を説明するための図である。第１の実施形態に係るマルチコアシステム１００は、負荷分散装置１０と、マルチコアサーバ２０と、データベース４０とを有する。また、マルチコアシステム１００には、クライアント３０が接続される。
【００１４】
クライアント３０は、データベース４０に記憶されたデータを要求するリクエストを、負荷分散装置１０を介して、マルチコアサーバ２０に対して送信する。また、クライアント３０は、リクエストに対する実行結果を、負荷分散装置１０を介して、マルチコアサーバ２０から受信する。
【００１５】
データベース４０は、クライアント３０によって要求されるデータを記憶する。以下では、データベース４０がリレーショナルデータベースである場合を説明する。なお、データベース４０が持つデータのリレーションについては、後に図３及び図４を用いて説明する。
【００１６】
マルチコアサーバ２０は、データベース４０を管理するサーバである。マルチコアサーバ２０は、負荷分散装置１０を介してクライアント３０からのリクエストを受信する。マルチコアサーバ２０は、受信したリクエストに応じて、データベース４０にアクセスしてデータを取得する処理を行い、負荷分散装置１０を介して処理結果をクライアント３０に返信する。図１に示す例では、マルチコアサーバ２０は、複数のコアを用いて、複数のプロセス２０Ａ〜２０Ｄを実行している。なお、マルチコアサーバ２０の構成については、後に図２を用いて詳述する。
【００１７】
負荷分散装置１０は、クライアント３０からマルチコアサーバ２０へのリクエストを中継し、マルチコアサーバ２０からクライアント３０への実行結果を中継する。ここで、負荷分散装置１０は、管理テーブル１２ａを記憶する記憶部１２を備える（なお、図１では、記憶部１２及び管理テーブル１２ａの図示を省略する）。管理テーブル１２ａは、リレーショナルデータベースに記憶されるデータについて、当該データを複数に分割したデータ範囲を識別するデータ範囲識別子と、当該データ範囲に対する演算処理を実行するコアプロセッサを識別するコア識別子とを対応付けた情報を記憶する。そして、負荷分散装置１０は、データに対する結合処理をリクエストされた場合、記憶部１２に記憶された管理テーブル１２ａを参照して、データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する。また、負荷分散装置１０は、特定した各コアプロセッサにデータ範囲に対する結合処理を依頼する。そして、負荷分散装置１０は、各コアプロセッサからの結合処理結果をマージして、リクエストに応答する。このようにして、負荷分散装置１０は、マルチコアサーバ２０においてキャッシュヒット率を上げるように、クライアント３０からのリクエストを適するプロセスへ割り当てる。
【００１８】
このように、負荷分散装置１０は、特定のデータのＩＤに関連する結合処理が特定のコアで固定的に行われるため、コアが持つデータのキャッシュヒット率を向上させることができる。これにより、負荷分散装置１０は、関係データベースの結合処理を高速化することができる。なお、負荷分散装置１０の詳しい構成と処理については、後に図５を用いて説明する。
【００１９】
次に、図２を用いて、マルチコアシステム１００のマルチコアサーバ２０の構成を説明する。図２は、第１の実施形態に係るマルチコアサーバ２０の構成を示すブロック図である。
【００２０】
図２に示すように、マルチコアサーバ２０は、複数のプロセッサ２００、２１０、Ｌ３キャッシュ２２０、及びメモリ２３０を有する。プロセッサ２００は、複数のコアプロセッサ２０１Ａ、２０１Ｂ、複数のＬ１キャッシュ２０２Ａ、２０２Ｂ、Ｌ２キャッシュ２０３から構成される。各コア２０１Ａ、２０１Ｂは、それぞれ担当するプロセスの処理を実行する。なお、コアプロセッサのことをコアとも言う。
【００２１】
Ｌ１キャッシュ２０２Ａは、コア２０１Ａ専用のキャッシュであり、Ｌ１キャッシュ２０２Ｂは、コア２０１Ｂ専用のキャッシュである。Ｌ２キャッシュ２０３は、複数のコア２０１Ａ、２０１Ｂで共有されるキャッシュである。
【００２２】
プロセッサ２１０の構成は、プロセッサ２００の構成と同様であり、複数のコア２１１Ａ、２１１Ｂ、複数のＬ１キャッシュ２１２Ａ、２１２Ｂ、Ｌ２キャッシュ２１３から構成される。各コア２１１Ａ、２１１Ｂは、それぞれ担当するプロセスの処理を実行する。なお、Ｌ１キャッシュ２１２Ａは、コア２１１Ａ専用のキャッシュであり、Ｌ１キャッシュ２１２Ｂは、コア２１１Ｂ専用のキャッシュである。Ｌ２キャッシュ２１３は、複数のコア２１１Ａ、２１１Ｂで共有されるキャッシュである。
【００２３】
Ｌ３キャッシュ２２０は、プロセッサ２００、２１０のチップ外で共有されるキャッシュである。メモリ２３０は、マルチコアサーバ２０のメインメモリである。上記したキャッシュは、レベルが低い、すなわちコアに近いものほど高速であるが、容量が小さい。具体的には、Ｌ１キャッシュ２０２は、Ｌ２キャッシュ２０３よりも容量が小さく、Ｌ２キャッシュ２０３は、Ｌ３キャッシュ２２０よりも容量が小さい。そして、例えば、コア２０１Ａは、Ｌ２キャッシュ２０３よりもＬ１キャッシュ２０２に高速にアクセス可能であり、Ｌ３キャッシュ２２０よりもＬ２キャッシュ２０３に高速にアクセス可能である。このようなことから、アクセス頻度の高いデータは、レベルが低い（コアに近い）キャッシュに保持されることが望ましい。
【００２４】
次に、図３及び図４を用いて、データベース４０が記憶するデータのリレーションについて説明する。図３及び図４は、第１の実施形態に係るデータベース４０が記憶するデータのリレーションの一例を示す図である。
【００２５】
図３に示す例では、売上表Ｒを例示する。図３に示すように、売上表Ｒは、オブジェクトを識別する「ｏｉｄ」と、商品コードを示す「ｃｏｄｅ」と、在庫数を示す「ｎｕｍｂｅｒ」とを対応付けて記憶する。例えば、図３の例を挙げて説明すると、ｏｉｄ「０００１」、ｃｏｄｅ「１００」、ｎｕｍｂｅｒ「１０」のデータは、ｏｉｄ「０００１」のデータについて、ｃｏｄｅが「１００」である商品の在庫数が「１０」個であることを意味している。
【００２６】
図４に示す例では、商品表Ｓを例示する。図４に示すように、商品表Ｓは、商品コードを示す「ｃｏｄｅ」と、商品価格を示す「ｐｒｉｃｅ」とを対応付けて記憶する。例えば、図４の例を挙げて説明すると、ｃｏｄｅ「１００」、ｐｒｉｃｅ「１００」のデータは、ｃｏｄｅ「１００」である商品の単価が「１００」円であることを意味している。このようなデータ構造を有する売上表Ｒと、商品表Ｓとは、「ｃｏｄｅ」によって関係付けられる。
【００２７】
次に、図５を用いて、図１に示した負荷分散装置１０の構成を説明する。図５は、第１の実施形態に係る負荷分散装置１０の構成例を示すブロック図である。図５に示すように、この負荷分散装置１０は、通信制御部１１、記憶部１２、制御部１３を有する。
【００２８】
通信制御部１１は、接続されるマルチコアサーバ２０およびクライアント３０との間でやり取りする各種情報に関する通信を制御する。具体的には、通信制御部１１は、クライアント３０からリクエストを受信し、マルチコアサーバ２０へリクエストを送信する。また、マルチコアサーバ２０から実行結果を受信し、クライアント３０へ実行結果を送信する。
【００２９】
記憶部１２は、制御部１３による各種処理に必要なデータおよびプログラムを格納する。記憶部１２は、管理テーブル１２ａを備える。この管理テーブル１２ａは、データベース４０に記憶されるデータを識別する各ＩＤと、該データへのアクセスに関する処理を担当する各プロセスを識別するためのプロセスのＩＤと、プロセスを振り分けられたコアプロセッサを識別するためのコアプロセッサのＩＤとを対応付けた情報を記憶する。すなわち、管理テーブル１２ａには、どの範囲のデータをどのプロセスが担当しどのコアプロセッサに振り分けるかが事前に登録されている。
【００３０】
ここで、図６を用いて、管理テーブル１２ａが記憶するデータ構造の一例を説明する。図６は、第１の実施形態に係る管理テーブル１２ａが記憶するデータ構造の一例を示す図である。図６に示すように、管理テーブル１２ａは、データベース４０に記憶されるデータ範囲を識別する複数のＩＤである「ＩＤの範囲」と、データへのアクセスに関する処理を担当するプロセスのＩＤを示す「担当プロセス」と、プロセスを振り分けられたコアプロセッサを示す「コア」とを対応付けて記憶する。ここで、「ＩＤの範囲」と「担当プロセス」との対応付けは、予め管理者などによって設定されている。また、「コア」には、後述する振分部１３ｂによってデータが格納される。
【００３１】
図６の例を挙げて説明すると、管理テーブル１２ａは、ＩＤの範囲「１〜１０００」と担当プロセス「２０Ａ」と、コアプロセッサ「２０１Ａ」とを対応付けて記憶し、ＩＤの範囲「１００１〜２０００」と担当プロセス「２０Ｂ」と、コアプロセッサ「２０１Ｂ」とを対応付けて記憶する。また、管理テーブル１２ａは、ＩＤの範囲「２００１〜３０００」と担当プロセス「２０Ｃ」と、コアプロセッサ「２１１Ａ」とを対応付けて記憶し、ＩＤの範囲「３００１〜４０００」と担当プロセス「２０Ｄ」と、コアプロセッサ「２１１Ｂ」とを対応付けて記憶する。
【００３２】
すなわち、図６に示す管理テーブル１２ａは、全体のデータは１〜４０００まであり、データ範囲１〜１０００を担当するプロセス２０Ａがコアプロセッサ２０１Ａに振り分けられ、データ範囲１００１〜２０００を担当するプロセス２０Ｂがコアプロセッサ２０１Ｂに振り分けられることが規定されていることを示す。また、図６に示す管理テーブル１２ａは、データ範囲２００１〜３０００を担当するプロセス２０Ｃがコアプロセッサ２１１Ａに振り分けられ、データ範囲３００１〜４０００を担当するプロセス２０Ｄがコアプロセッサ２１１Ｂに振り分けられることが規定されていることを示す。
【００３３】
図５に戻る。制御部１３は、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、これらによって種々の処理を実行する。制御部１３は、クライアント側送受信部１３ａと、振分部１３ｂと、特定部１３ｃと、サーバ側送受信部１３ｄと、データマージ部１３ｅとを有する。
【００３４】
クライアント側送受信部１３ａは、クライアント３０からリクエストを受信する。例えば、リクエストとして、「SELECT  oid,  number,  price  FROM  R,S  WHERE  R.code=S.code」を受信する。なお、このリクエストは、売上表Ｒと、商品表Ｓとで「ｃｏｄｅ」が同一である「ｏｉｄ」、「ｎｕｍｂｅｒ」及び「ｐｒｉｃｅ」を結合することをリクエストするものである。そして、クライアント側送受信部１３ａは、受信したリクエストを特定部１３ｃに受け渡す。また、クライアント側送受信部１３ａは、データマージ部１３ｅからマージ結果を受け渡された場合、クライアント３０へリクエストに対する応答結果を送信する。
【００３５】
振分部１３ｂは、リレーショナルデータベースへのアクセスを許可する前に、コアプロセッサの数に基づいてデータを複数のデータ範囲に分割し、分割したデータ範囲に対する演算処理を実行するコアプロセッサを決定して、管理テーブル１２ａを生成する。例えば、振分部１３ｂは、例えば、初期化時などデータベース４０へのアクセスを許可する前に、プロセッサアフィニティを使って、プロセスを特定のコアに割り当てる処理を実行する。
【００３６】
振分部１３ｂは、コアプロセッサの数を取得し、取得したコアプロセッサの数でデータを等分する。ここでは、全体のデータが１〜４０００まであり、コアプロセッサの数が４である場合を説明する。振分部１３ｂは、コアプロセッサの数「４」でデータを等分する。すなわち、振分部１３ｂは、データをデータ範囲１〜１０００、データ範囲１００１〜２０００、データ範囲２００１〜３０００及びデータ範囲３００１〜４０００に等分する。振分部１３ｂは、管理テーブル１２ａの「ＩＤの範囲」に各データ範囲を記憶させる。
【００３７】
そして、振分部１３ｂは、管理テーブル１２ａに記憶された各プロセスのＩＤで示されるプロセスについて、同一のプロセスが同一のコアに振り分けられるように、各コア２０１Ａ、２０１Ｂ、２１１Ａ、２１１Ｂに振り分ける。例えば、振分部１３ｂは、担当プロセスとして管理テーブル１２ａに記憶された識別子が「２０Ａ」のプロセス２０Ａをコア２０１Ａに割り当てる。同様に、担当プロセスとして管理テーブル１２ａに記憶された識別子が「２０Ｂ」のプロセス２０Ｂをコア２０１Ｂに割り当てる。また同様に、担当プロセスとして管理テーブル１２ａに記憶された識別子が「２０Ｃ」のプロセス２０Ｃをコア２１１Ａに割り当て、担当プロセスとして管理テーブル１２ａに記憶された識別子が「２０Ｄ」のプロセス２０Ｄをコア２１１Ｂに割り当てる。
【００３８】
このように、振分部１３ｂは、特定のデータ範囲のＩＤに関連する処理が特定のコアで固定的に行われるようにプロセスをコアプロセッサに割当てる。これにより、コアが持つデータのキャッシュヒット率を向上させることができる。
【００３９】
特定部１３ｃは、データに対する結合処理をリクエストされた場合、管理テーブル１２ａを参照して、データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する。例えば、特定部１３ｃは、リクエストとして、クエリ「SELECT  oid,  number,  price  FROM  R,S  WHERE  R.code=S.code」をクライアント側送受信部１３ａが受信した場合、管理テーブル１２ａの「ＩＤの範囲」を参照して、このクエリをサブクエリに分割する。
【００４０】
より具体的には、特定部１３ｃは、クエリ「SELECT  oid,  number,  price  FROM  R,S  WHERE  R.code=S.code」をサブクエリＡ「SELECT  oid,  number,  price  FROM  R,S  WHERE  R.code=S.code  and  1<=oid<=1000」と、サブクエリＢ「SELECT  oid,  number,  price  FROM  R,S  WHERE  R.code=S.code  and  1001<=oid<=2000」と、サブクエリＣ「SELECT  oid,  number,  price  FROM  R,S  WHERE  R.code=S.code  and  2001<=oid<=3000」と、サブクエリＤ「SELECT  oid,  number,  price  FROM  R,S  WHERE  R.code=S.code  and  3001<=oid<=4000」とに分割する。
【００４１】
続いて、特定部１３ｃは、サブクエリに含まれるデータ範囲に対応するプロセスを管理テーブル１２ａから特定し、特定したプロセスを振り分けられたコアプロセッサを管理テーブル１２ａから特定する。ここでは、管理テーブル１２ａに示す「ＩＤの範囲」が「ｏｉｄ」に対応する。具体的には、特定部１３ｃは、サブクエリＡのデータ範囲１〜１０００に対応するプロセス２０Ａをマルチコアサーバ２０のコア２０１Ａに対して振り分け、サブクエリＢのデータ範囲１００１〜２０００に対応するプロセス２０Ｂをマルチコアサーバ２０のコア２０１Ｂに対して振り分ける。同様に、特定部１３ｃは、サブクエリＣのデータ範囲２００１〜３０００に対応するプロセス２０Ｃをマルチコアサーバ２０のコア２１１Ａに対して振り分け、サブクエリＤのデータ範囲３００１〜４０００に対応するプロセス２０Ｄをマルチコアサーバ２０のコア２１１Ｂに対して振り分ける。このようにして、特定したコアにリクエストを送信して処理を行わせることで、例えば、プロセスのＩＤ「２０Ａ」に対応するコア２０１Ａには、データ範囲が「１〜１０００」のサブクエリＡが集まることになる。このため、コアが処理するデータのキャッシュヒット率を向上させることが可能となる。
【００４２】
サーバ側送受信部１３ｄは、特定部１３ｃによって特定された各コアプロセッサにデータ範囲に対する結合処理をマルチコアサーバ２０に依頼する。そして、サーバ側送受信部１３ｄは、各コアプロセッサによってリクエストに応じた結合処理が行われた後、マルチコアサーバ２０から結合処理の実行結果を受信する。サーバ側送受信部１３ｄは、受信した結合処理結果それぞれをデータマージ部１３ｅに受け渡す。なお、サーバ側送受信部１３ｄのことを「依頼部」とも言う。
【００４３】
データマージ部１３ｅは、各コアプロセッサからの結合処理結果をマージして、リクエストに応答する。例えば、データマージ部１３ｅは、全ての応答を一つの応答にマージする。図７は、第１の実施形態に係る負荷分散装置１０によるデータマージ処理動作を説明するための図である。図７では、図３に示した売上表Ｒと、図４に示した商品表Ｓとを、データ範囲ごとに各コアプロセッサで結合処理して得られた結合処理結果８ａ〜８ｄと、各結合処理結果８ａ〜８ｄをマージして得られたマージ処理結果８ｅとを図示する。なお、図７では、図３に示した売上表Ｒと、図４に示した商品表Ｓとを、「ｃｏｄｅ」に基づき結合処理した結果として「ｏｉｄ」、「ｎｕｍｂｅｒ」及び「ｐｒｉｃｅ」を示す。
【００４４】
図７に示す８ａは、サブクエリＡのデータ範囲１〜１０００に対応するプロセス２０Ａをマルチコアサーバ２０のコア２０１Ａが結合処理して得られた結合処理結果８ａである。また、図７に示す８ｂは、サブクエリＢのデータ範囲１００１〜２０００に対応するプロセス２０Ｂをマルチコアサーバ２０のコア２０１Ｂが結合処理して得られた結合処理結果８ｂである。また、図７に示す８ｃは、サブクエリＣのデータ範囲２００１〜３０００に対応するプロセス２０Ｃをマルチコアサーバ２０のコア２１１Ａが結合処理して得られた結合処理結果８ｃである。また、図７に示す８ｄは、サブクエリＤのデータ範囲３００１〜４０００に対応するプロセス２０Ｄをマルチコアサーバ２０のコア２１１Ｂが結合処理して得られた結合処理結果８ｄである。データマージ部１３ｅは、各コアプロセッサで結合処理して得られた結合処理結果８ａ〜８ｄをマージして、マージ処理結果８ｅを生成する。
【００４５】
そして、データマージ部１３ｅは、マージ処理結果８ｅをリクエストに対する応答結果としてクライアント側送受信部１３ａへ受け渡す。この結果、クライアント側送受信部１３ａは、リクエストに対する応答結果としてマージ処理結果８ｅをクライアント３０へ送信する。
【００４６】
次に、図８及び図９を用いて、第１の実施形態に係る負荷分散装置１０による処理を説明する。図８は、第１の実施形態に係る振分部１３ｂの処理手順を示すフローチャートである。なお、振分部１３ｂは、データベース４０へのアクセスを許可する前、例えば初期化時に以下の処理を実行する。
【００４７】
図８に示すように、振分部１３ｂは、マルチコアサーバ２０のコアプロセッサの数（コア数）を取得する（ステップＳ１０１）。続いて、振分部１３ｂは、データをコア数で分割する（ステップＳ１０２）。これにより、振分部１３ｂは、複数のデータ範囲を得る。そして、振分部１３ｂは、各コアプロセッサにプロセスを振り分ける（ステップＳ１０３）。
【００４８】
図９は、第１の実施形態に係る負荷分散装置１０による処理手順を示すフローチャートである。図９に示すように、クライアント側送受信部１３ａがクライアント３０からリクエストを受信すると（ステップＳ２０１、Ｙｅｓ）、特定部１３ｃは、管理テーブル１２ａを参照して、クエリをサブクエリに分割する（ステップＳ２０２）。
【００４９】
そして、特定部１３ｃは、管理テーブル１２ａを参照して、分割したデータ範囲のＩＤに対応する担当プロセスを特定する（ステップＳ２０３）。また、特定部１３ｃは、プロセスを振り分けられたコアプロセッサを管理テーブル１２ａから特定する（ステップＳ２０４）。
【００５０】
その後、サーバ側送受信部１３ｄは、特定した担当プロセスに対するコアプロセッサに対して結合処理を依頼する（ステップＳ２０５）。続いて、サーバ側送受信部１３ｄは、マルチコアサーバ２０から実行結果を受信する（ステップＳ２０６）。サーバ側送受信部１３ｄは、受信した実行結果をデータマージ部１３ｅに受け渡す。
【００５１】
データマージ部１３ｅは、実行結果をマージする（ステップＳ２０７）。そして、データマージ部１３ｅは、全実行結果をマージしたか否かを判定する（ステップＳ２０８）。ここで、データマージ部１３ｅは、全実行結果をマージしていないと判定した場合（ステップＳ２０８、Ｎｏ）、ステップＳ２０６に移行して引き続き実行結果をマージする。一方、データマージ部１３ｅが、全実行結果をマージしたと判定した場合（ステップＳ２０８、Ｙｅｓ）、クライアント側送受信部１３ａは、応答結果をクライアント３０に送信する（ステップＳ２０９）。
【００５２】
上述してきたように、負荷分散装置１０は、特定のデータ範囲のＩＤに関連する処理が特定のコアで固定的に行われるようにプロセスをコアプロセッサに割当てる。これにより、コアが持つデータのキャッシュヒット率を向上させることができる。このため、負荷分散装置１０によれば、リレーショナルデータベースの結合処理を高速化することができるという効果を奏する。
【００５３】
また、負荷分散装置１０による機能は、ハードウェアでもソフトウェアでも実現可能である。このため、マルチコアサーバ２０が商用オフザシェルフである場合にも、マルチコアシステム１００において負荷分散装置１０が有する機能を追加するだけで、結合処理の高速化が実現可能であり、実用的である。より具体的には、マルチコアシステム１００において、負荷分散装置１０を設置するだけで、マルチコアサーバ２０のアプリケーションやＯＳやハードウェアを改造しなくても、結合処理を高速化することができる。或いは、マルチコアシステム１００において、例えば、マルチコアサーバ２０に負荷分散装置１０と同様の機能を有するソフトウェアをインストールするだけで、マルチコアサーバ２０のアプリケーションやＯＳやハードウェアを改造しなくても、結合処理を高速化することができる。
【００５４】
（第２の実施形態）
第１の実施形態では、負荷分散装置１０が、コア数に基づいてデータを分割する場合について説明した。ところで、データの分割は、コア数に基づくものに限定されるものではない。そこで、第２の実施形態では、負荷分散装置１０が、コアプロセッサが備えるキャッシュサイズとデータのサイズとに基づいてデータを複数のデータ範囲に分割する場合について説明する。
【００５５】
第２の実施形態に係る負荷分散装置１０の構成は、図５に示す第１の実施形態に係る負荷分散装置１０の構成と同様である。すなわち、第２の実施形態に係る負荷分散装置１０は、通信制御部１１、記憶部１２、制御部１３を有する。
【００５６】
通信制御部１１は、接続されるマルチコアサーバ２０およびクライアント３０との間でやり取りする各種情報に関する通信を制御する。記憶部１２は、管理テーブル１２ａを備える。制御部１３は、クライアント側送受信部１３ａと、振分部１３ｂと、特定部１３ｃと、サーバ側送受信部１３ｄと、データマージ部１３ｅとを有する。
【００５７】
かかる構成において、第２の実施形態に係る振分部１３ｂは、リレーショナルデータベースへのアクセスを許可する前に、コアプロセッサが備えるキャッシュサイズとデータのサイズとに基づいてデータを複数のデータ範囲に分割し、分割したデータ範囲に対する演算処理を実行するコアプロセッサを決定して、管理テーブル１２ａを生成する。
【００５８】
より具体的なジョインのテーブルの適切な分割の例として、ｉｎｔｅｇｅｒ型２つのリレーションを例に説明する。ｉｎｔｅｇｅｒ型１つのデータサイズは、４バイトである。リレーションが２つであるため、１タプルは８バイトとなる。また、１つのコアが備えるキャッシュサイズを３２ＫＢと仮定すると、キャッシュからあふれないためには、３２ＫＢ／８Ｂ＝４ＫＢ、つまり、１パーティションが４ＫＢとなるようにクエリを分割する。振分部１３ｂは、この条件に従い、ジョインのテーブルを分割することでクエリを分割する。同様に、振分部１３ｂは、１つのコアが備えるキャッシュサイズを６４ＫＢと仮定すると、キャッシュからあふれないためには、６４ＫＢ／８Ｂ＝８ＫＢ、つまり、１パーティションが８ＫＢとなるようにクエリを分割する。
【００５９】
図１０は、第２の実施形態に係る振分部１３ｂが生成した管理テーブル１２ａの一例を示す図である。なお、図１０に示す管理テーブル１２ａが記憶するデータ構造は、図６に示した第１の実施形態に係る管理テーブル１２ａが記憶するデータ構造と同様である。
【００６０】
図１０では、全体のデータが１〜４０００まであり、コアプロセッサの数が４である場合を説明する。また、ｉｎｔｅｇｅｒ型２つのリレーションであり、キャッシュサイズが３２ＫＢである場合を説明する。なお、図１０に示す例では、プロセス２０Ａは、データ範囲１〜１０００を担当し、プロセス２０Ｂは、データ範囲１００１〜２０００を担当する。また、図１０に示す例では、プロセス２０Ｃは、データ範囲２００１〜３０００を担当し、プロセス２０Ｄは、データ範囲３００１〜４０００を担当する。なお、「ＩＤの範囲」と「担当プロセス」との対応付けは、予め管理者などによって設定されているものとする。図１０に示すように、振分部１３ｂは、１パーティションが４ＫＢとなるようにクエリを分割すると、５００タプルごとにクエリを分割することになる。そして、振分部１３ｂは、５００タプルごとに分割したデータ範囲について、コアプロセッサを振り分ける。図１０に示す例では、振分部１３ｂは、データ範囲１〜５００をコア２０１Ａに振り分け、データ範囲５０１〜１０００をコア２０１Ｂに振り分ける。
【００６１】
特定部１３ｃは、データに対する結合処理をリクエストされた場合、管理テーブル１２ａを参照して、データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する。
【００６２】
サーバ側送受信部１３ｄは、特定部１３ｃによって特定された各コアプロセッサにデータ範囲に対する結合処理をマルチコアサーバ２０依頼する。そして、サーバ側送受信部１３ｄは、各コアプロセッサによってリクエストに応じた結合処理が行われた後、マルチコアサーバ２０から結合処理の実行結果を受信する。サーバ側送受信部１３ｄは、受信した結合処理結果それぞれをデータマージ部１３ｅに受け渡す。
【００６３】
データマージ部１３ｅは、各コアプロセッサからの結合処理結果をマージして、リクエストに応答する。そして、データマージ部１３ｅは、マージ処理結果８ｅをリクエストに対する応答結果としてクライアント側送受信部１３ａへ受け渡す。この結果、クライアント側送受信部１３ａは、リクエストに対する応答結果としてマージ処理結果８ｅをクライアント３０へ送信する。そして、データマージ部１３ｅは、各コアプロセッサによる結合処理結果をマージする。
【００６４】
次に、第２の実施形態に係る振分部１３ｂの処理手順について説明する。図１１は、第２の実施形態に係る振分部１３ｂの処理手順を示すフローチャートである。なお、振分部１３ｂは、データベース４０へのアクセスを許可する前、例えば初期化時に以下の処理を実行する。
【００６５】
図１１に示すように、振分部１３ｂは、データベース４０のリレーション数を特定する（ステップＳ３０１）。そして、振分部１３ｂは、リレーション数から１タプルのバイト数を特定する（ステップＳ３０２）。また、振分部１３ｂは、コアプロセッサが備えるキャッシュサイズを取得する（ステップＳ３０３）。
【００６６】
続いて、振分部１３ｂは、１タプルのバイト数と、コアプロセッサが備えるキャッシュサイズとから１パーティションサイズを算出する（ステップＳ３０４）。そして、振分部１３ｂは、算出した１パーティションサイズごとにデータをデータ範囲に分割する（ステップＳ３０５）。これにより、振分部１３ｂは、複数のデータ範囲を得る。そして、振分部１３ｂは、各コアプロセッサにプロセスを振り分ける（ステップＳ３０６）。
【００６７】
このように第２の実施形態では、小さいジョインがキャッシュに収まるように改良することで、テーブルのサイズが大きい場合、コア数で分割してもキャッシュサイズからデータがあふれることを防止する。このため、キャッシュヒット率を更に向上させることができる。この結果、第２の実施形態に係る負荷分散装置１０によれば、リレーショナルデータベースの結合処理を高速化することができるという効果を奏する。なお、第１の実施形態と同様に、マルチコアサーバ２０が商用オフザシェルフであっても、マルチコアシステム１００において負荷分散装置１０が有する機能を追加するだけで、マルチコアサーバ２０を改造せずに、結合処理の高速化が実現可能である。
【００６８】
（第３の実施形態）
さて、これまで本発明の実施形態について説明したが、本発明は上述した実施形態以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では第３の実施形態として本発明に含まれる他の実施形態を説明する。
【００６９】
（システム構成等）
例えば、振分部１３ｂは、例えば、売上表Ｒのデータサイズを「Ｄ１」、Ｌ１キャッシュのサイズを「Ｃ」とした場合、売上表Ｒのデータサイズ「Ｄ１」をコアプロセッサの数で等分せずに、Ｌ１キャッシュのサイズ「Ｃ」で分割するようにしてもよい。ここで分割された売上表Ｒのデータ範囲を、Ｒ１、Ｒ２、・・・、Ｒｍ（ｍはＤ１／Ｃ）とする。また、振分部１３ｂは、商品表Ｓのデータサイズを「Ｄ２」とした場合、商品表Ｓのデータサイズ「Ｄ２」をコアプロセッサの数で等分せずに、Ｌ１キャッシュのサイズ「Ｃ」で分割する。ここで分割された商品表Ｓのデータ範囲を、Ｓ１、Ｓ２、・・・、Ｓｎ（ｎはＤ２／Ｃ）とする。そして、振分部１３ｂは、各コアプロセッサで小さいデータ範囲ごとに結合処理を依頼する。例えば、コアプロセッサは、Ｒ１とＳ１とを結合処理させ、Ｒ２とＳ２とを結合処理させる。そして、データマージ部１３ｅは、コアプロセッサによる各結合処理結果をマージする。
【００７０】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００７１】
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００７２】
（プログラム）
また、上記実施形態において説明した負荷分散装置１０が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、上記実施形態に係る負荷分散装置１０が実行する処理をコンピュータが実行可能な言語で記述した負荷分散プログラムを作成することもできる。この場合、コンピュータが負荷分散プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかる負荷分散プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録され負荷分散プログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。以下に、図１に示した負荷分散装置１０と同様の機能を実現する負荷分散プログラムを実行するコンピュータの一例を説明する。なお、図１に示した負荷分散装置１０が実行する処理をプログラムとしてコンピュータが行う場合に、図１のマルチコアサーバ２０上でプログラムが実行されてもよい。
【００７３】
図１２は、負荷分散プログラムを実行するコンピュータ１０００を示す図である。図１２に例示するように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有し、これらの各部はバス１０８０によって接続される。
【００７４】
メモリ１０１０は、図１２に例示するように、ＲＯＭ（Read  Only  Memory）１０１１及びＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、図１２に例示するように、ハードディスクドライブ１０３１に接続される。ディスクドライブインタフェース１０４０は、図１２に例示するように、ディスクドライブ１０４１に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ１０４１に挿入される。シリアルポートインタフェース１０５０は、図１２に例示するように、例えばマウス１０５１、キーボード１０５２に接続される。ビデオアダプタ１０６０は、図１２に例示するように、例えばディスプレイ１０６１に接続される。
【００７５】
ここで、図１２に例示するように、ハードディスクドライブ１０３１は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、上記の負荷分散プログラムは、コンピュータ１０００によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ１０３１に記憶される。
【００７６】
また、上記実施形態で説明した各種データは、プログラムデータとして、例えばメモリ１０１０やハードディスクドライブ１０３１に記憶される。そして、ＣＰＵ１０２０が、メモリ１０１０やハードディスクドライブ１０３１に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出し、特定ステップと、依頼ステップと、マージステップとを実行する。
【００７７】
なお、負荷分散プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０３１に記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、負荷分散プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００７８】
１０  負荷分散装置
１１  通信制御部
１２  記憶部
１２ａ  管理テーブル
１３  制御部
１３ａ  クライアント側送受信部
１３ｂ  振分部
１３ｃ  特定部
１３ｄ  サーバ側送受信部
１３ｅ  データマージ部
２０  マルチコアサーバ
３０  クライアント
４０  データベース
１００  マルチコアシステム
【図１】
2015052977.tif 000003
【図２】
2015052977.tif 000004
【図３】
2015052977.tif 000005
【図４】
2015052977.tif 000006
【図５】
2015052977.tif 000007
【図６】
2015052977.tif 000008
【図７】
2015052977.tif 000009
【図８】
2015052977.tif 000010
【図９】
2015052977.tif 000011
【図１０】
2015052977.tif 000012
【図１１】
2015052977.tif 000013
【図１２】
2015052977.tif 000014