JP2015052977A - 負荷分散装置、負荷分散方法および負荷分散プログラム - Google Patents
負荷分散装置、負荷分散方法および負荷分散プログラム Download PDFInfo
- Publication number
- JP2015052977A JP2015052977A JP2013186207A JP2013186207A JP2015052977A JP 2015052977 A JP2015052977 A JP 2015052977A JP 2013186207 A JP2013186207 A JP 2013186207A JP 2013186207 A JP2013186207 A JP 2013186207A JP 2015052977 A JP2015052977 A JP 2015052977A
- Authority
- JP
- Japan
- Prior art keywords
- data
- core
- unit
- core processor
- load distribution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】リレーショナルデータベースの結合処理を高速化すること。【解決手段】負荷分散装置は、記憶部と、特定部と、依頼部と、マージ部とを備える。記憶部は、リレーショナルデータベースに記憶されるデータについて、当該データを複数に分割したデータ範囲を識別するデータ範囲識別子と、当該データ範囲に対する演算処理を実行するコアプロセッサを識別するコア識別子とを対応付けた管理情報を記憶する。特定部は、前記データに対する結合処理をリクエストされた場合、前記記憶部に記憶された前記管理情報を参照して、前記データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する。依頼部は、前記特定部によって特定された前記各コアプロセッサに前記データ範囲に対する結合処理を依頼する。マージ部は、前記各コアプロセッサからの結合処理結果をマージして、前記リクエストに応答する。【選択図】 図5
Description
本発明は、負荷分散装置、負荷分散方法および負荷分散プログラムに関する。
従来、複数のコアを持つプロセッサを備えるマルチコアシステムが利用されている。このようなマルチコアシステムで動作するOS(Operating System)は、プロセス(またはスレッド)を各コアに割り当てて処理を進めている。この際、やみくもにプロセスを各コアに割り当てると、性能低下を招く場合がある。
このため、各コアに処理を割り当てる方法として、処理分割分散装置が、複数に分けられたアプリケーションについて、あらかじめ指定された処理モデルに従って、処理を各コアに割り当てる技術が知られている。依存関係のない処理同士は、複数のコアで並列に実行することで高速に処理できるものである。
また、マルチコアシステムにおいて、各コアに処理を割り当てる方法として、コアの負荷やメモリアクセスの負荷を監視して、負荷に偏りがあった場合にはスレッドを他のコアに割り当てる技術が知られている(例えば、特許文献1参照)。
しかしながら、上記した処理モデルに従って、処理をコアに割り当てる技術では、リレーショナルデータベースの結合処理を高速化することができないという課題があった。具体的には、アプリケーション開発者は、システムが持っているコア数を意識して処理を適切に分割しなければならない。また、アプリケーション開発者は、処理モデルを適切に指定しなければならない。このため、開発者は、処理を適切に分割できない場合、或いは処理モデルを適切に指定できない場合、キャッシュヒット率を向上させることはできない。
また、RDBMS(Relational Data Base Management System)では、負荷の大きい処理の一つである結合処理を実行する場合、結合処理の対象となる複数のデータを参照することになる。ここで、結合処理の対象となる複数のデータ各々の処理を担当するプロセスを適切に配置できない場合、キャッシュヒット率を向上させることができなくなる。このようにキャッシュヒット率が高くない場合には、参照される複数のデータがキャッシュされていないことが多く発生し、結合処理を高速化することはできない。
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、リレーショナルデータベースの結合処理を高速化することを目的とする。
上述した課題を解決し、目的を達成するため、負荷分散装置は、記憶部と、特定部と、依頼部と、マージ部とを備える。記憶部は、リレーショナルデータベースに記憶されるデータについて、当該データを複数に分割したデータ範囲を識別するデータ範囲識別子と、当該データ範囲に対する演算処理を実行するコアプロセッサを識別するコア識別子とを対応付けた管理情報を記憶する。特定部は、前記データに対する結合処理をリクエストされた場合、前記記憶部に記憶された前記管理情報を参照して、前記データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する。依頼部は、前記特定部によって特定された前記各コアプロセッサに前記データ範囲に対する結合処理を依頼する。マージ部は、前記各コアプロセッサからの結合処理結果をマージして、前記リクエストに応答する。
本願に開示する負荷分散装置、負荷分散方法および負荷分散プログラムは、リレーショナルデータベースの結合処理を高速化することができるという効果を奏する。
以下に、本願に係る負荷分散装置、負荷分散方法および負荷分散プログラムの実施形態を図面に基づいて詳細に説明する。なお、この実施形態により本願に係る負荷分散装置、負荷分散方法および負荷分散プログラムが限定されるものではない。
(第1の実施形態)
まず、図1を用いて、第1の実施形態に係るマルチコアシステム100について説明する。図1は、第1の実施形態に係るマルチコアシステム100の構成例を説明するための図である。第1の実施形態に係るマルチコアシステム100は、負荷分散装置10と、マルチコアサーバ20と、データベース40とを有する。また、マルチコアシステム100には、クライアント30が接続される。
まず、図1を用いて、第1の実施形態に係るマルチコアシステム100について説明する。図1は、第1の実施形態に係るマルチコアシステム100の構成例を説明するための図である。第1の実施形態に係るマルチコアシステム100は、負荷分散装置10と、マルチコアサーバ20と、データベース40とを有する。また、マルチコアシステム100には、クライアント30が接続される。
クライアント30は、データベース40に記憶されたデータを要求するリクエストを、負荷分散装置10を介して、マルチコアサーバ20に対して送信する。また、クライアント30は、リクエストに対する実行結果を、負荷分散装置10を介して、マルチコアサーバ20から受信する。
データベース40は、クライアント30によって要求されるデータを記憶する。以下では、データベース40がリレーショナルデータベースである場合を説明する。なお、データベース40が持つデータのリレーションについては、後に図3及び図4を用いて説明する。
マルチコアサーバ20は、データベース40を管理するサーバである。マルチコアサーバ20は、負荷分散装置10を介してクライアント30からのリクエストを受信する。マルチコアサーバ20は、受信したリクエストに応じて、データベース40にアクセスしてデータを取得する処理を行い、負荷分散装置10を介して処理結果をクライアント30に返信する。図1に示す例では、マルチコアサーバ20は、複数のコアを用いて、複数のプロセス20A〜20Dを実行している。なお、マルチコアサーバ20の構成については、後に図2を用いて詳述する。
負荷分散装置10は、クライアント30からマルチコアサーバ20へのリクエストを中継し、マルチコアサーバ20からクライアント30への実行結果を中継する。ここで、負荷分散装置10は、管理テーブル12aを記憶する記憶部12を備える(なお、図1では、記憶部12及び管理テーブル12aの図示を省略する)。管理テーブル12aは、リレーショナルデータベースに記憶されるデータについて、当該データを複数に分割したデータ範囲を識別するデータ範囲識別子と、当該データ範囲に対する演算処理を実行するコアプロセッサを識別するコア識別子とを対応付けた情報を記憶する。そして、負荷分散装置10は、データに対する結合処理をリクエストされた場合、記憶部12に記憶された管理テーブル12aを参照して、データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する。また、負荷分散装置10は、特定した各コアプロセッサにデータ範囲に対する結合処理を依頼する。そして、負荷分散装置10は、各コアプロセッサからの結合処理結果をマージして、リクエストに応答する。このようにして、負荷分散装置10は、マルチコアサーバ20においてキャッシュヒット率を上げるように、クライアント30からのリクエストを適するプロセスへ割り当てる。
このように、負荷分散装置10は、特定のデータのIDに関連する結合処理が特定のコアで固定的に行われるため、コアが持つデータのキャッシュヒット率を向上させることができる。これにより、負荷分散装置10は、関係データベースの結合処理を高速化することができる。なお、負荷分散装置10の詳しい構成と処理については、後に図5を用いて説明する。
次に、図2を用いて、マルチコアシステム100のマルチコアサーバ20の構成を説明する。図2は、第1の実施形態に係るマルチコアサーバ20の構成を示すブロック図である。
図2に示すように、マルチコアサーバ20は、複数のプロセッサ200、210、L3キャッシュ220、及びメモリ230を有する。プロセッサ200は、複数のコアプロセッサ201A、201B、複数のL1キャッシュ202A、202B、L2キャッシュ203から構成される。各コア201A、201Bは、それぞれ担当するプロセスの処理を実行する。なお、コアプロセッサのことをコアとも言う。
L1キャッシュ202Aは、コア201A専用のキャッシュであり、L1キャッシュ202Bは、コア201B専用のキャッシュである。L2キャッシュ203は、複数のコア201A、201Bで共有されるキャッシュである。
プロセッサ210の構成は、プロセッサ200の構成と同様であり、複数のコア211A、211B、複数のL1キャッシュ212A、212B、L2キャッシュ213から構成される。各コア211A、211Bは、それぞれ担当するプロセスの処理を実行する。なお、L1キャッシュ212Aは、コア211A専用のキャッシュであり、L1キャッシュ212Bは、コア211B専用のキャッシュである。L2キャッシュ213は、複数のコア211A、211Bで共有されるキャッシュである。
L3キャッシュ220は、プロセッサ200、210のチップ外で共有されるキャッシュである。メモリ230は、マルチコアサーバ20のメインメモリである。上記したキャッシュは、レベルが低い、すなわちコアに近いものほど高速であるが、容量が小さい。具体的には、L1キャッシュ202は、L2キャッシュ203よりも容量が小さく、L2キャッシュ203は、L3キャッシュ220よりも容量が小さい。そして、例えば、コア201Aは、L2キャッシュ203よりもL1キャッシュ202に高速にアクセス可能であり、L3キャッシュ220よりもL2キャッシュ203に高速にアクセス可能である。このようなことから、アクセス頻度の高いデータは、レベルが低い(コアに近い)キャッシュに保持されることが望ましい。
次に、図3及び図4を用いて、データベース40が記憶するデータのリレーションについて説明する。図3及び図4は、第1の実施形態に係るデータベース40が記憶するデータのリレーションの一例を示す図である。
図3に示す例では、売上表Rを例示する。図3に示すように、売上表Rは、オブジェクトを識別する「oid」と、商品コードを示す「code」と、在庫数を示す「number」とを対応付けて記憶する。例えば、図3の例を挙げて説明すると、oid「0001」、code「100」、number「10」のデータは、oid「0001」のデータについて、codeが「100」である商品の在庫数が「10」個であることを意味している。
図4に示す例では、商品表Sを例示する。図4に示すように、商品表Sは、商品コードを示す「code」と、商品価格を示す「price」とを対応付けて記憶する。例えば、図4の例を挙げて説明すると、code「100」、price「100」のデータは、code「100」である商品の単価が「100」円であることを意味している。このようなデータ構造を有する売上表Rと、商品表Sとは、「code」によって関係付けられる。
次に、図5を用いて、図1に示した負荷分散装置10の構成を説明する。図5は、第1の実施形態に係る負荷分散装置10の構成例を示すブロック図である。図5に示すように、この負荷分散装置10は、通信制御部11、記憶部12、制御部13を有する。
通信制御部11は、接続されるマルチコアサーバ20およびクライアント30との間でやり取りする各種情報に関する通信を制御する。具体的には、通信制御部11は、クライアント30からリクエストを受信し、マルチコアサーバ20へリクエストを送信する。また、マルチコアサーバ20から実行結果を受信し、クライアント30へ実行結果を送信する。
記憶部12は、制御部13による各種処理に必要なデータおよびプログラムを格納する。記憶部12は、管理テーブル12aを備える。この管理テーブル12aは、データベース40に記憶されるデータを識別する各IDと、該データへのアクセスに関する処理を担当する各プロセスを識別するためのプロセスのIDと、プロセスを振り分けられたコアプロセッサを識別するためのコアプロセッサのIDとを対応付けた情報を記憶する。すなわち、管理テーブル12aには、どの範囲のデータをどのプロセスが担当しどのコアプロセッサに振り分けるかが事前に登録されている。
ここで、図6を用いて、管理テーブル12aが記憶するデータ構造の一例を説明する。図6は、第1の実施形態に係る管理テーブル12aが記憶するデータ構造の一例を示す図である。図6に示すように、管理テーブル12aは、データベース40に記憶されるデータ範囲を識別する複数のIDである「IDの範囲」と、データへのアクセスに関する処理を担当するプロセスのIDを示す「担当プロセス」と、プロセスを振り分けられたコアプロセッサを示す「コア」とを対応付けて記憶する。ここで、「IDの範囲」と「担当プロセス」との対応付けは、予め管理者などによって設定されている。また、「コア」には、後述する振分部13bによってデータが格納される。
図6の例を挙げて説明すると、管理テーブル12aは、IDの範囲「1〜1000」と担当プロセス「20A」と、コアプロセッサ「201A」とを対応付けて記憶し、IDの範囲「1001〜2000」と担当プロセス「20B」と、コアプロセッサ「201B」とを対応付けて記憶する。また、管理テーブル12aは、IDの範囲「2001〜3000」と担当プロセス「20C」と、コアプロセッサ「211A」とを対応付けて記憶し、IDの範囲「3001〜4000」と担当プロセス「20D」と、コアプロセッサ「211B」とを対応付けて記憶する。
すなわち、図6に示す管理テーブル12aは、全体のデータは1〜4000まであり、データ範囲1〜1000を担当するプロセス20Aがコアプロセッサ201Aに振り分けられ、データ範囲1001〜2000を担当するプロセス20Bがコアプロセッサ201Bに振り分けられることが規定されていることを示す。また、図6に示す管理テーブル12aは、データ範囲2001〜3000を担当するプロセス20Cがコアプロセッサ211Aに振り分けられ、データ範囲3001〜4000を担当するプロセス20Dがコアプロセッサ211Bに振り分けられることが規定されていることを示す。
図5に戻る。制御部13は、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、これらによって種々の処理を実行する。制御部13は、クライアント側送受信部13aと、振分部13bと、特定部13cと、サーバ側送受信部13dと、データマージ部13eとを有する。
クライアント側送受信部13aは、クライアント30からリクエストを受信する。例えば、リクエストとして、「SELECT oid, number, price FROM R,S WHERE R.code=S.code」を受信する。なお、このリクエストは、売上表Rと、商品表Sとで「code」が同一である「oid」、「number」及び「price」を結合することをリクエストするものである。そして、クライアント側送受信部13aは、受信したリクエストを特定部13cに受け渡す。また、クライアント側送受信部13aは、データマージ部13eからマージ結果を受け渡された場合、クライアント30へリクエストに対する応答結果を送信する。
振分部13bは、リレーショナルデータベースへのアクセスを許可する前に、コアプロセッサの数に基づいてデータを複数のデータ範囲に分割し、分割したデータ範囲に対する演算処理を実行するコアプロセッサを決定して、管理テーブル12aを生成する。例えば、振分部13bは、例えば、初期化時などデータベース40へのアクセスを許可する前に、プロセッサアフィニティを使って、プロセスを特定のコアに割り当てる処理を実行する。
振分部13bは、コアプロセッサの数を取得し、取得したコアプロセッサの数でデータを等分する。ここでは、全体のデータが1〜4000まであり、コアプロセッサの数が4である場合を説明する。振分部13bは、コアプロセッサの数「4」でデータを等分する。すなわち、振分部13bは、データをデータ範囲1〜1000、データ範囲1001〜2000、データ範囲2001〜3000及びデータ範囲3001〜4000に等分する。振分部13bは、管理テーブル12aの「IDの範囲」に各データ範囲を記憶させる。
そして、振分部13bは、管理テーブル12aに記憶された各プロセスのIDで示されるプロセスについて、同一のプロセスが同一のコアに振り分けられるように、各コア201A、201B、211A、211Bに振り分ける。例えば、振分部13bは、担当プロセスとして管理テーブル12aに記憶された識別子が「20A」のプロセス20Aをコア201Aに割り当てる。同様に、担当プロセスとして管理テーブル12aに記憶された識別子が「20B」のプロセス20Bをコア201Bに割り当てる。また同様に、担当プロセスとして管理テーブル12aに記憶された識別子が「20C」のプロセス20Cをコア211Aに割り当て、担当プロセスとして管理テーブル12aに記憶された識別子が「20D」のプロセス20Dをコア211Bに割り当てる。
このように、振分部13bは、特定のデータ範囲のIDに関連する処理が特定のコアで固定的に行われるようにプロセスをコアプロセッサに割当てる。これにより、コアが持つデータのキャッシュヒット率を向上させることができる。
特定部13cは、データに対する結合処理をリクエストされた場合、管理テーブル12aを参照して、データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する。例えば、特定部13cは、リクエストとして、クエリ「SELECT oid, number, price FROM R,S WHERE R.code=S.code」をクライアント側送受信部13aが受信した場合、管理テーブル12aの「IDの範囲」を参照して、このクエリをサブクエリに分割する。
より具体的には、特定部13cは、クエリ「SELECT oid, number, price FROM R,S WHERE R.code=S.code」をサブクエリA「SELECT oid, number, price FROM R,S WHERE R.code=S.code and 1<=oid<=1000」と、サブクエリB「SELECT oid, number, price FROM R,S WHERE R.code=S.code and 1001<=oid<=2000」と、サブクエリC「SELECT oid, number, price FROM R,S WHERE R.code=S.code and 2001<=oid<=3000」と、サブクエリD「SELECT oid, number, price FROM R,S WHERE R.code=S.code and 3001<=oid<=4000」とに分割する。
続いて、特定部13cは、サブクエリに含まれるデータ範囲に対応するプロセスを管理テーブル12aから特定し、特定したプロセスを振り分けられたコアプロセッサを管理テーブル12aから特定する。ここでは、管理テーブル12aに示す「IDの範囲」が「oid」に対応する。具体的には、特定部13cは、サブクエリAのデータ範囲1〜1000に対応するプロセス20Aをマルチコアサーバ20のコア201Aに対して振り分け、サブクエリBのデータ範囲1001〜2000に対応するプロセス20Bをマルチコアサーバ20のコア201Bに対して振り分ける。同様に、特定部13cは、サブクエリCのデータ範囲2001〜3000に対応するプロセス20Cをマルチコアサーバ20のコア211Aに対して振り分け、サブクエリDのデータ範囲3001〜4000に対応するプロセス20Dをマルチコアサーバ20のコア211Bに対して振り分ける。このようにして、特定したコアにリクエストを送信して処理を行わせることで、例えば、プロセスのID「20A」に対応するコア201Aには、データ範囲が「1〜1000」のサブクエリAが集まることになる。このため、コアが処理するデータのキャッシュヒット率を向上させることが可能となる。
サーバ側送受信部13dは、特定部13cによって特定された各コアプロセッサにデータ範囲に対する結合処理をマルチコアサーバ20に依頼する。そして、サーバ側送受信部13dは、各コアプロセッサによってリクエストに応じた結合処理が行われた後、マルチコアサーバ20から結合処理の実行結果を受信する。サーバ側送受信部13dは、受信した結合処理結果それぞれをデータマージ部13eに受け渡す。なお、サーバ側送受信部13dのことを「依頼部」とも言う。
データマージ部13eは、各コアプロセッサからの結合処理結果をマージして、リクエストに応答する。例えば、データマージ部13eは、全ての応答を一つの応答にマージする。図7は、第1の実施形態に係る負荷分散装置10によるデータマージ処理動作を説明するための図である。図7では、図3に示した売上表Rと、図4に示した商品表Sとを、データ範囲ごとに各コアプロセッサで結合処理して得られた結合処理結果8a〜8dと、各結合処理結果8a〜8dをマージして得られたマージ処理結果8eとを図示する。なお、図7では、図3に示した売上表Rと、図4に示した商品表Sとを、「code」に基づき結合処理した結果として「oid」、「number」及び「price」を示す。
図7に示す8aは、サブクエリAのデータ範囲1〜1000に対応するプロセス20Aをマルチコアサーバ20のコア201Aが結合処理して得られた結合処理結果8aである。また、図7に示す8bは、サブクエリBのデータ範囲1001〜2000に対応するプロセス20Bをマルチコアサーバ20のコア201Bが結合処理して得られた結合処理結果8bである。また、図7に示す8cは、サブクエリCのデータ範囲2001〜3000に対応するプロセス20Cをマルチコアサーバ20のコア211Aが結合処理して得られた結合処理結果8cである。また、図7に示す8dは、サブクエリDのデータ範囲3001〜4000に対応するプロセス20Dをマルチコアサーバ20のコア211Bが結合処理して得られた結合処理結果8dである。データマージ部13eは、各コアプロセッサで結合処理して得られた結合処理結果8a〜8dをマージして、マージ処理結果8eを生成する。
そして、データマージ部13eは、マージ処理結果8eをリクエストに対する応答結果としてクライアント側送受信部13aへ受け渡す。この結果、クライアント側送受信部13aは、リクエストに対する応答結果としてマージ処理結果8eをクライアント30へ送信する。
次に、図8及び図9を用いて、第1の実施形態に係る負荷分散装置10による処理を説明する。図8は、第1の実施形態に係る振分部13bの処理手順を示すフローチャートである。なお、振分部13bは、データベース40へのアクセスを許可する前、例えば初期化時に以下の処理を実行する。
図8に示すように、振分部13bは、マルチコアサーバ20のコアプロセッサの数(コア数)を取得する(ステップS101)。続いて、振分部13bは、データをコア数で分割する(ステップS102)。これにより、振分部13bは、複数のデータ範囲を得る。そして、振分部13bは、各コアプロセッサにプロセスを振り分ける(ステップS103)。
図9は、第1の実施形態に係る負荷分散装置10による処理手順を示すフローチャートである。図9に示すように、クライアント側送受信部13aがクライアント30からリクエストを受信すると(ステップS201、Yes)、特定部13cは、管理テーブル12aを参照して、クエリをサブクエリに分割する(ステップS202)。
そして、特定部13cは、管理テーブル12aを参照して、分割したデータ範囲のIDに対応する担当プロセスを特定する(ステップS203)。また、特定部13cは、プロセスを振り分けられたコアプロセッサを管理テーブル12aから特定する(ステップS204)。
その後、サーバ側送受信部13dは、特定した担当プロセスに対するコアプロセッサに対して結合処理を依頼する(ステップS205)。続いて、サーバ側送受信部13dは、マルチコアサーバ20から実行結果を受信する(ステップS206)。サーバ側送受信部13dは、受信した実行結果をデータマージ部13eに受け渡す。
データマージ部13eは、実行結果をマージする(ステップS207)。そして、データマージ部13eは、全実行結果をマージしたか否かを判定する(ステップS208)。ここで、データマージ部13eは、全実行結果をマージしていないと判定した場合(ステップS208、No)、ステップS206に移行して引き続き実行結果をマージする。一方、データマージ部13eが、全実行結果をマージしたと判定した場合(ステップS208、Yes)、クライアント側送受信部13aは、応答結果をクライアント30に送信する(ステップS209)。
上述してきたように、負荷分散装置10は、特定のデータ範囲のIDに関連する処理が特定のコアで固定的に行われるようにプロセスをコアプロセッサに割当てる。これにより、コアが持つデータのキャッシュヒット率を向上させることができる。このため、負荷分散装置10によれば、リレーショナルデータベースの結合処理を高速化することができるという効果を奏する。
また、負荷分散装置10による機能は、ハードウェアでもソフトウェアでも実現可能である。このため、マルチコアサーバ20が商用オフザシェルフである場合にも、マルチコアシステム100において負荷分散装置10が有する機能を追加するだけで、結合処理の高速化が実現可能であり、実用的である。より具体的には、マルチコアシステム100において、負荷分散装置10を設置するだけで、マルチコアサーバ20のアプリケーションやOSやハードウェアを改造しなくても、結合処理を高速化することができる。或いは、マルチコアシステム100において、例えば、マルチコアサーバ20に負荷分散装置10と同様の機能を有するソフトウェアをインストールするだけで、マルチコアサーバ20のアプリケーションやOSやハードウェアを改造しなくても、結合処理を高速化することができる。
(第2の実施形態)
第1の実施形態では、負荷分散装置10が、コア数に基づいてデータを分割する場合について説明した。ところで、データの分割は、コア数に基づくものに限定されるものではない。そこで、第2の実施形態では、負荷分散装置10が、コアプロセッサが備えるキャッシュサイズとデータのサイズとに基づいてデータを複数のデータ範囲に分割する場合について説明する。
第1の実施形態では、負荷分散装置10が、コア数に基づいてデータを分割する場合について説明した。ところで、データの分割は、コア数に基づくものに限定されるものではない。そこで、第2の実施形態では、負荷分散装置10が、コアプロセッサが備えるキャッシュサイズとデータのサイズとに基づいてデータを複数のデータ範囲に分割する場合について説明する。
第2の実施形態に係る負荷分散装置10の構成は、図5に示す第1の実施形態に係る負荷分散装置10の構成と同様である。すなわち、第2の実施形態に係る負荷分散装置10は、通信制御部11、記憶部12、制御部13を有する。
通信制御部11は、接続されるマルチコアサーバ20およびクライアント30との間でやり取りする各種情報に関する通信を制御する。記憶部12は、管理テーブル12aを備える。制御部13は、クライアント側送受信部13aと、振分部13bと、特定部13cと、サーバ側送受信部13dと、データマージ部13eとを有する。
かかる構成において、第2の実施形態に係る振分部13bは、リレーショナルデータベースへのアクセスを許可する前に、コアプロセッサが備えるキャッシュサイズとデータのサイズとに基づいてデータを複数のデータ範囲に分割し、分割したデータ範囲に対する演算処理を実行するコアプロセッサを決定して、管理テーブル12aを生成する。
より具体的なジョインのテーブルの適切な分割の例として、integer型2つのリレーションを例に説明する。integer型1つのデータサイズは、4バイトである。リレーションが2つであるため、1タプルは8バイトとなる。また、1つのコアが備えるキャッシュサイズを32KBと仮定すると、キャッシュからあふれないためには、32KB/8B=4KB、つまり、1パーティションが4KBとなるようにクエリを分割する。振分部13bは、この条件に従い、ジョインのテーブルを分割することでクエリを分割する。同様に、振分部13bは、1つのコアが備えるキャッシュサイズを64KBと仮定すると、キャッシュからあふれないためには、64KB/8B=8KB、つまり、1パーティションが8KBとなるようにクエリを分割する。
図10は、第2の実施形態に係る振分部13bが生成した管理テーブル12aの一例を示す図である。なお、図10に示す管理テーブル12aが記憶するデータ構造は、図6に示した第1の実施形態に係る管理テーブル12aが記憶するデータ構造と同様である。
図10では、全体のデータが1〜4000まであり、コアプロセッサの数が4である場合を説明する。また、integer型2つのリレーションであり、キャッシュサイズが32KBである場合を説明する。なお、図10に示す例では、プロセス20Aは、データ範囲1〜1000を担当し、プロセス20Bは、データ範囲1001〜2000を担当する。また、図10に示す例では、プロセス20Cは、データ範囲2001〜3000を担当し、プロセス20Dは、データ範囲3001〜4000を担当する。なお、「IDの範囲」と「担当プロセス」との対応付けは、予め管理者などによって設定されているものとする。図10に示すように、振分部13bは、1パーティションが4KBとなるようにクエリを分割すると、500タプルごとにクエリを分割することになる。そして、振分部13bは、500タプルごとに分割したデータ範囲について、コアプロセッサを振り分ける。図10に示す例では、振分部13bは、データ範囲1〜500をコア201Aに振り分け、データ範囲501〜1000をコア201Bに振り分ける。
特定部13cは、データに対する結合処理をリクエストされた場合、管理テーブル12aを参照して、データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する。
サーバ側送受信部13dは、特定部13cによって特定された各コアプロセッサにデータ範囲に対する結合処理をマルチコアサーバ20依頼する。そして、サーバ側送受信部13dは、各コアプロセッサによってリクエストに応じた結合処理が行われた後、マルチコアサーバ20から結合処理の実行結果を受信する。サーバ側送受信部13dは、受信した結合処理結果それぞれをデータマージ部13eに受け渡す。
データマージ部13eは、各コアプロセッサからの結合処理結果をマージして、リクエストに応答する。そして、データマージ部13eは、マージ処理結果8eをリクエストに対する応答結果としてクライアント側送受信部13aへ受け渡す。この結果、クライアント側送受信部13aは、リクエストに対する応答結果としてマージ処理結果8eをクライアント30へ送信する。そして、データマージ部13eは、各コアプロセッサによる結合処理結果をマージする。
次に、第2の実施形態に係る振分部13bの処理手順について説明する。図11は、第2の実施形態に係る振分部13bの処理手順を示すフローチャートである。なお、振分部13bは、データベース40へのアクセスを許可する前、例えば初期化時に以下の処理を実行する。
図11に示すように、振分部13bは、データベース40のリレーション数を特定する(ステップS301)。そして、振分部13bは、リレーション数から1タプルのバイト数を特定する(ステップS302)。また、振分部13bは、コアプロセッサが備えるキャッシュサイズを取得する(ステップS303)。
続いて、振分部13bは、1タプルのバイト数と、コアプロセッサが備えるキャッシュサイズとから1パーティションサイズを算出する(ステップS304)。そして、振分部13bは、算出した1パーティションサイズごとにデータをデータ範囲に分割する(ステップS305)。これにより、振分部13bは、複数のデータ範囲を得る。そして、振分部13bは、各コアプロセッサにプロセスを振り分ける(ステップS306)。
このように第2の実施形態では、小さいジョインがキャッシュに収まるように改良することで、テーブルのサイズが大きい場合、コア数で分割してもキャッシュサイズからデータがあふれることを防止する。このため、キャッシュヒット率を更に向上させることができる。この結果、第2の実施形態に係る負荷分散装置10によれば、リレーショナルデータベースの結合処理を高速化することができるという効果を奏する。なお、第1の実施形態と同様に、マルチコアサーバ20が商用オフザシェルフであっても、マルチコアシステム100において負荷分散装置10が有する機能を追加するだけで、マルチコアサーバ20を改造せずに、結合処理の高速化が実現可能である。
(第3の実施形態)
さて、これまで本発明の実施形態について説明したが、本発明は上述した実施形態以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では第3の実施形態として本発明に含まれる他の実施形態を説明する。
さて、これまで本発明の実施形態について説明したが、本発明は上述した実施形態以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では第3の実施形態として本発明に含まれる他の実施形態を説明する。
(システム構成等)
例えば、振分部13bは、例えば、売上表Rのデータサイズを「D1」、L1キャッシュのサイズを「C」とした場合、売上表Rのデータサイズ「D1」をコアプロセッサの数で等分せずに、L1キャッシュのサイズ「C」で分割するようにしてもよい。ここで分割された売上表Rのデータ範囲を、R1、R2、・・・、Rm(mはD1/C)とする。また、振分部13bは、商品表Sのデータサイズを「D2」とした場合、商品表Sのデータサイズ「D2」をコアプロセッサの数で等分せずに、L1キャッシュのサイズ「C」で分割する。ここで分割された商品表Sのデータ範囲を、S1、S2、・・・、Sn(nはD2/C)とする。そして、振分部13bは、各コアプロセッサで小さいデータ範囲ごとに結合処理を依頼する。例えば、コアプロセッサは、R1とS1とを結合処理させ、R2とS2とを結合処理させる。そして、データマージ部13eは、コアプロセッサによる各結合処理結果をマージする。
例えば、振分部13bは、例えば、売上表Rのデータサイズを「D1」、L1キャッシュのサイズを「C」とした場合、売上表Rのデータサイズ「D1」をコアプロセッサの数で等分せずに、L1キャッシュのサイズ「C」で分割するようにしてもよい。ここで分割された売上表Rのデータ範囲を、R1、R2、・・・、Rm(mはD1/C)とする。また、振分部13bは、商品表Sのデータサイズを「D2」とした場合、商品表Sのデータサイズ「D2」をコアプロセッサの数で等分せずに、L1キャッシュのサイズ「C」で分割する。ここで分割された商品表Sのデータ範囲を、S1、S2、・・・、Sn(nはD2/C)とする。そして、振分部13bは、各コアプロセッサで小さいデータ範囲ごとに結合処理を依頼する。例えば、コアプロセッサは、R1とS1とを結合処理させ、R2とS2とを結合処理させる。そして、データマージ部13eは、コアプロセッサによる各結合処理結果をマージする。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
(プログラム)
また、上記実施形態において説明した負荷分散装置10が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、上記実施形態に係る負荷分散装置10が実行する処理をコンピュータが実行可能な言語で記述した負荷分散プログラムを作成することもできる。この場合、コンピュータが負荷分散プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかる負荷分散プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録され負荷分散プログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。以下に、図1に示した負荷分散装置10と同様の機能を実現する負荷分散プログラムを実行するコンピュータの一例を説明する。なお、図1に示した負荷分散装置10が実行する処理をプログラムとしてコンピュータが行う場合に、図1のマルチコアサーバ20上でプログラムが実行されてもよい。
また、上記実施形態において説明した負荷分散装置10が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、上記実施形態に係る負荷分散装置10が実行する処理をコンピュータが実行可能な言語で記述した負荷分散プログラムを作成することもできる。この場合、コンピュータが負荷分散プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかる負荷分散プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録され負荷分散プログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。以下に、図1に示した負荷分散装置10と同様の機能を実現する負荷分散プログラムを実行するコンピュータの一例を説明する。なお、図1に示した負荷分散装置10が実行する処理をプログラムとしてコンピュータが行う場合に、図1のマルチコアサーバ20上でプログラムが実行されてもよい。
図12は、負荷分散プログラムを実行するコンピュータ1000を示す図である。図12に例示するように、コンピュータ1000は、例えば、メモリ1010と、CPU1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、シリアルポートインタフェース1050と、ビデオアダプタ1060と、ネットワークインタフェース1070とを有し、これらの各部はバス1080によって接続される。
メモリ1010は、図12に例示するように、ROM(Read Only Memory)1011及びRAM1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、図12に例示するように、ハードディスクドライブ1031に接続される。ディスクドライブインタフェース1040は、図12に例示するように、ディスクドライブ1041に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ1041に挿入される。シリアルポートインタフェース1050は、図12に例示するように、例えばマウス1051、キーボード1052に接続される。ビデオアダプタ1060は、図12に例示するように、例えばディスプレイ1061に接続される。
ここで、図12に例示するように、ハードディスクドライブ1031は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093、プログラムデータ1094を記憶する。すなわち、上記の負荷分散プログラムは、コンピュータ1000によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ1031に記憶される。
また、上記実施形態で説明した各種データは、プログラムデータとして、例えばメモリ1010やハードディスクドライブ1031に記憶される。そして、CPU1020が、メモリ1010やハードディスクドライブ1031に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出し、特定ステップと、依頼ステップと、マージステップとを実行する。
なお、負荷分散プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1031に記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ等を介してCPU1020によって読み出されてもよい。あるいは、負荷分散プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ネットワーク(LAN(Local Area Network)、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
10 負荷分散装置
11 通信制御部
12 記憶部
12a 管理テーブル
13 制御部
13a クライアント側送受信部
13b 振分部
13c 特定部
13d サーバ側送受信部
13e データマージ部
20 マルチコアサーバ
30 クライアント
40 データベース
100 マルチコアシステム
11 通信制御部
12 記憶部
12a 管理テーブル
13 制御部
13a クライアント側送受信部
13b 振分部
13c 特定部
13d サーバ側送受信部
13e データマージ部
20 マルチコアサーバ
30 クライアント
40 データベース
100 マルチコアシステム
Claims (5)
- リレーショナルデータベースに記憶されるデータについて、当該データを複数に分割したデータ範囲を識別するデータ範囲識別子と、当該データ範囲に対する演算処理を実行するコアプロセッサを識別するコア識別子とを対応付けた管理情報を記憶する記憶部と、
前記データに対する結合処理をリクエストされた場合、前記記憶部に記憶された前記管理情報を参照して、前記データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する特定部と、
前記特定部によって特定された前記各コアプロセッサに前記データ範囲に対する結合処理を依頼する依頼部と、
前記各コアプロセッサからの結合処理結果をマージして、前記リクエストに応答するマージ部と、
を備えることを特徴とする負荷分散装置。 - 前記リレーショナルデータベースへのアクセスを許可する前に、前記コアプロセッサの数に基づいて前記データを複数のデータ範囲に分割し、分割したデータ範囲に対する演算処理を実行するコアプロセッサを決定して、前記管理情報を生成する振分部を更に備えたことを特徴とする請求項1に記載の負荷分散装置。
- 前記リレーショナルデータベースへのアクセスを許可する前に、前記コアプロセッサが備えるキャッシュサイズと前記データのサイズとに基づいて前記データを複数のデータ範囲に分割し、分割したデータ範囲に対する演算処理を実行するコアプロセッサを決定して、前記管理情報を生成する振分部を更に備えたことを特徴とする請求項1に記載の負荷分散装置。
- 負荷分散装置で実行される負荷分散方法であって、
前記負荷分散装置は、リレーショナルデータベースに記憶されるデータについて、当該データを複数に分割したデータ範囲を識別するデータ範囲識別子と、当該データ範囲に対する演算処理を実行するコアプロセッサを識別するコア識別子とを対応付けた管理情報を記憶する記憶部を備え、
前記データに対する結合処理をリクエストされた場合、前記記憶部に記憶された前記管理情報を参照して、前記データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する特定工程と、
特定された前記各コアプロセッサに前記データ範囲に対する結合処理を依頼する依頼工程と、
前記各コアプロセッサからの結合処理結果をマージして、前記リクエストに応答するマージ工程と、
を含んだことを特徴とする負荷分散方法。 - リレーショナルデータベースに記憶されるデータに対する結合処理をリクエストされた場合、記憶部に記憶された、前記データを複数に分割したデータ範囲を識別するデータ範囲識別子と、当該データ範囲に対する演算処理を実行するコアプロセッサを識別するコア識別子とを対応付けた管理情報を参照して、前記データに含まれるデータ範囲の各々に対応付けられた各コアプロセッサを特定する特定ステップと、
特定した前記各コアプロセッサに前記データ範囲に対する結合処理を依頼する依頼ステップと、
前記各コアプロセッサからの結合処理結果をマージして、前記リクエストに応答するマージステップと、
をコンピュータに実行させるための負荷分散プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013186207A JP2015052977A (ja) | 2013-09-09 | 2013-09-09 | 負荷分散装置、負荷分散方法および負荷分散プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013186207A JP2015052977A (ja) | 2013-09-09 | 2013-09-09 | 負荷分散装置、負荷分散方法および負荷分散プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2015052977A true JP2015052977A (ja) | 2015-03-19 |
Family
ID=52701948
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013186207A Pending JP2015052977A (ja) | 2013-09-09 | 2013-09-09 | 負荷分散装置、負荷分散方法および負荷分散プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2015052977A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105372693A (zh) * | 2015-11-26 | 2016-03-02 | 沈阳东软医疗系统有限公司 | 一种晶体和光导的合成方法及模具 |
JP2020521238A (ja) * | 2017-05-15 | 2020-07-16 | アルテリックス インコーポレイテッド | キャッシュ最適化及び効率的な処理のためのデータ集約の方法 |
CN113366444A (zh) * | 2019-02-05 | 2021-09-07 | 三菱电机株式会社 | 信息处理装置、信息处理系统、程序和信息处理方法 |
-
2013
- 2013-09-09 JP JP2013186207A patent/JP2015052977A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105372693A (zh) * | 2015-11-26 | 2016-03-02 | 沈阳东软医疗系统有限公司 | 一种晶体和光导的合成方法及模具 |
JP2020521238A (ja) * | 2017-05-15 | 2020-07-16 | アルテリックス インコーポレイテッド | キャッシュ最適化及び効率的な処理のためのデータ集約の方法 |
JP7038740B2 (ja) | 2017-05-15 | 2022-03-18 | アルテリックス インコーポレイテッド | キャッシュ最適化及び効率的な処理のためのデータ集約の方法 |
CN113366444A (zh) * | 2019-02-05 | 2021-09-07 | 三菱电机株式会社 | 信息处理装置、信息处理系统、程序和信息处理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6764989B2 (ja) | 要求処理技術 | |
US11003664B2 (en) | Efficient hybrid parallelization for in-memory scans | |
US7383247B2 (en) | Query routing of federated information systems for fast response time, load balance, availability, and reliability | |
US20140331235A1 (en) | Resource allocation apparatus and method | |
US9891861B2 (en) | Off-line affinity-aware parallel zeroing of memory in non-uniform memory access (NUMA) servers | |
US11556536B2 (en) | Autonomic caching for in memory data grid query processing | |
WO2015117565A1 (en) | Methods and systems for dynamically allocating resources and tasks among database work agents in smp environment | |
JP2016515228A (ja) | 低レイテンシデータアクセス用のデータストリーム分割 | |
US20130138885A1 (en) | Dynamic process/object scoped memory affinity adjuster | |
US10621000B2 (en) | Regulating enterprise database warehouse resource usage of dedicated and shared process by using OS kernels, tenants, and table storage engines | |
JP2008123040A (ja) | リソース割当方法、リソース割当プログラム、および、管理コンピュータ | |
US11163792B2 (en) | Work assignment in parallelized database synchronization | |
GB2584980A (en) | Workload management with data access awareness in a computing cluster | |
US20220374431A1 (en) | Techniques for a deterministic distributed cache to accelerate sql queries | |
US20150112967A1 (en) | Database management system, computer, and database management method | |
US11188532B2 (en) | Successive database record filtering on disparate database types | |
US10241838B2 (en) | Domain based resource isolation in multi-core systems | |
JP2015052977A (ja) | 負荷分散装置、負荷分散方法および負荷分散プログラム | |
JP2009037369A (ja) | データベースサーバへのリソース割当て方法 | |
US9805177B1 (en) | Processing large data sets from heterogeneous data sources using federated computing resources | |
JP2014081765A (ja) | 負荷分散装置、負荷分散方法および負荷分散プログラム | |
US9355128B2 (en) | Using a sequence object of a database | |
US12079189B2 (en) | Automated database cache resizing | |
Xi et al. | CARIC-DA: Core affinity with a range index for cache-conscious data access in a multicore environment | |
US11294732B2 (en) | Self-partitioning distributed computing system |