IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特許7421078情報処理装置、情報処理システムおよびデータ再配置プログラム
<>
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図1
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図2
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図3
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図4
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図5
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図6
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図7
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図8
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図9
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図10
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図11
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図12
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図13
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図14
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図15
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図16
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図17
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図18
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図19
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図20
  • 特許-情報処理装置、情報処理システムおよびデータ再配置プログラム 図21
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-16
(45)【発行日】2024-01-24
(54)【発明の名称】情報処理装置、情報処理システムおよびデータ再配置プログラム
(51)【国際特許分類】
   G06F 3/06 20060101AFI20240117BHJP
   G06F 11/20 20060101ALI20240117BHJP
   G06F 16/185 20190101ALI20240117BHJP
【FI】
G06F3/06 301J
G06F3/06 304N
G06F3/06 304F
G06F3/06 301X
G06F11/20 653
G06F16/185
【請求項の数】 8
(21)【出願番号】P 2020006477
(22)【出願日】2020-01-20
(65)【公開番号】P2021114130
(43)【公開日】2021-08-05
【審査請求日】2022-09-08
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】廣瀬 厚人
(72)【発明者】
【氏名】田中 環
【審査官】田名網 忠雄
(56)【参考文献】
【文献】特開2013-210930(JP,A)
【文献】米国特許出願公開第2013/0185264(US,A1)
【文献】特開2010-039819(JP,A)
【文献】特開2010-134583(JP,A)
【文献】特開2010-182017(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06-3/08
G06F 11/20
G06F 16/185
(57)【特許請求の範囲】
【請求項1】
同一データを含む複数のデータベースそれぞれに対応付けて、前記同一データを記憶する記憶領域の断片化の状況に依存する空き容量を示す空き容量情報を記憶する記憶部と、
前記複数のデータベースのうち、前記空き容量情報が示す前記空き容量が、第1のデータベースよりも第2のデータベースの方が大きい場合に、前記第1のデータベースを運用系のデータベースに決定し、前記第2のデータベースを待機系のデータベースに決定し、
前記運用系のデータベースの更新を前記待機系のデータベースに反映させるデータ同期を停止させ、前記待機系のデータベースが初期化された後、前記運用系のデータベースのデータを前記待機系のデータベースにコピーさせ、前記データ同期を再開させる、ことを含むデータ再配置処理を、前記第2のデータベースに対して実行し、
前記複数のデータベースの中で、前記運用系のデータベースおよび前記待機系のデータベースを変更することで、前記第2のデータベース以外のデータベースに対して前記データ再配置処理が実行されるよう制御する処理部と、
を有する情報処理装置。
【請求項2】
前記第1のデータベースは前記情報処理装置に配置され、前記第2のデータベースは他の情報処理装置に配置されており、
前記処理部は、前記他の情報処理装置から、正常に動作していることを示すメッセージであって前記第2のデータベースの前記空き容量情報が挿入されたハートビートメッセージを継続的に受信し、前記ハートビートメッセージから前記第2のデータベースの前記空き容量情報を取得する、
請求項1記載の情報処理装置。
【請求項3】
前記第1のデータベースは、前記複数のデータベースのうち前記空き容量が最も小さいデータベースであり、前記第2のデータベースは、前記複数のデータベースのうち前記空き容量が最も大きいデータベースである、
請求項1記載の情報処理装置。
【請求項4】
前記複数のデータベースは、前記空き容量が前記第1のデータベースよりも大きく前記第2のデータベースよりも小さい第3のデータベースを更に含み、
前記処理部は、前記第2のデータベース以外のデータベースに対して前記データ再配置処理が実行されるよう制御する際に、前記第3のデータベースを前記待機系のデータベースと決定することで、前記第1のデータベースよりも優先的に、前記第3のデータベースに対して前記データ再配置処理が実行されるよう制御する、
請求項3記載の情報処理装置。
【請求項5】
前記運用系のデータベースのデータは、複数のレコードを含み、
前記データ再配置処理では、前記運用系のデータベースにおいて不連続な記憶領域に分散して記憶された前記複数のレコードが、前記待機系のデータベースにおいて連続した記憶領域に記憶されるように、前記複数のレコードがコピーされる、
請求項1記載の情報処理装置。
【請求項6】
前記処理部は、前記第1のデータベースの前記空き容量が閾値未満になった場合に、前記第2のデータベースに対する前記データ再配置処理を開始する、
請求項1記載の情報処理装置。
【請求項7】
同一データを含む複数のデータベースのうちの第1のデータベースが配置されており、前記複数のデータベースそれぞれに対して、前記同一データを記憶する記憶領域の断片化の状況に依存する空き容量を監視する第1の情報処理装置と、
前記複数のデータベースのうちの第2のデータベースが配置された第2の情報処理装置とを有し、
前記第2のデータベースの前記空き容量が前記第1のデータベースよりも大きい場合、前記第1の情報処理装置は、前記第1のデータベースを運用系のデータベースに決定し、前記第2のデータベースを待機系のデータベースに決定し、
前記第1の情報処理装置は、前記運用系のデータベースの更新を前記待機系のデータベースに反映させるデータ同期を停止し、前記待機系のデータベースが初期化された後、前記運用系のデータベースのデータを前記待機系のデータベースにコピーし、前記データ同期を再開する、ことを含むデータ再配置処理を前記第2のデータベースに対して実行し、
前記複数のデータベースの中で、前記運用系のデータベースおよび前記待機系のデータベースを変更することで、前記第2の情報処理装置は、前記第1のデータベースに対して前記データ再配置処理を実行する、
情報処理システム。
【請求項8】
コンピュータに、
同一データを含む複数のデータベースそれぞれに対して、前記同一データを記憶する記憶領域の断片化の状況に依存する空き容量を監視し、
前記複数のデータベースのうち、前記空き容量が第1のデータベースよりも第2のデータベースの方が大きい場合に、前記第1のデータベースを運用系のデータベースに決定し、前記第2のデータベースを待機系のデータベースに決定し、
前記運用系のデータベースの更新を前記待機系のデータベースに反映させるデータ同期を停止させ、前記待機系のデータベースが初期化された後、前記運用系のデータベースのデータを前記待機系のデータベースにコピーさせ、前記データ同期を再開させる、ことを含むデータ再配置処理を、前記第2のデータベースに対して実行し、
前記複数のデータベースの中で、前記運用系のデータベースおよび前記待機系のデータベースを変更することで、前記第2のデータベース以外のデータベースに対して前記データ再配置処理が実行されるよう制御する、
処理を実行させるデータ再配置プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は情報処理装置、情報処理システムおよびデータ再配置プログラムに関する。
【背景技術】
【0002】
データベースでは、記憶領域に複数のレコードが記憶される。最初は隙間が生じないように複数のレコードを詰めて記憶することがある。しかし、データベースの運用を継続すると、長さが異なるレコードの追加および削除が繰り返し行われることがあり、長さが変わるようなレコードの更新が行われることがある。これにより、レコード間に断片的空き領域が生じ、新たなレコードを追加可能な連続的空き領域が減少するという、記憶領域の断片化(フラグメンテーション)が発生することがある。
【0003】
フラグメンテーションを放置すると、記憶領域の使用効率が低下する。例えば、レコードのデータ総量が記憶装置の総容量より十分少ないにもかかわらず、新たなレコードを追加できない断片的空き領域が多いために、実質的な空き容量が不足することがある。そこで、レコードを記憶領域上で再配置して断片的空き領域を減少させるという、断片化解消(デフラグメンテーションまたはデフラグ)を行うことがある。
【0004】
例えば、ディスク装置に記憶された複数のレコードを再配置するディスク制御システムが提案されている。提案のディスク制御システムは、仮想アドレスが連続している複数のレコードをディスク装置から読み出してバッファにコピーし、バッファにコピーされた複数のレコードを仮想アドレスの順に並び替えながらディスク装置に書き戻す。
【0005】
また、例えば、不揮発性メモリの断片化を解消する計算機システムが提案されている。提案の計算機システムは、不揮発性メモリに現用ヒープ領域と待機ヒープ領域とを確保する。計算機システムは、待機ヒープ領域の空き容量が少なくなった場合、待機ヒープ領域のデータブロックを詰めて再配置するデフラグを実行する。また、計算機システムは、任意のタイミングで、現用ヒープ領域と待機ヒープ領域の役割を入れ替える。
【先行技術文献】
【特許文献】
【0006】
【文献】特開2001-188658号公報
【文献】国際公開第2018/127948号
【発明の概要】
【発明が解決しようとする課題】
【0007】
データベースの可用性を向上させるため、同じレコードを記憶する複数のデータベースを用意して、それら複数のデータベースをクラスタシステムとして運用することがある。クラスタシステムでは、複数のデータベースのデータ再配置を一斉に実行するのではなく、それら複数のデータベースのデータ再配置を交代で実行することで、通常のデータ処理の性能低下を抑制することが考えられる。
【0008】
しかし、データ再配置のタイミングがデータベース間で異なると、断片化の状況に違いが生じ、レコードの追加に使用可能な空き容量がデータベース間で異なることがある。そのため、あるデータベースにレコードが正常に追加された後、他のデータベースにレコード追加を反映させるデータ同期が、空き容量不足によって失敗してしまう可能性がある。
【0009】
1つの側面では、本発明は、複数のデータベースのデータ再配置を円滑に行う情報処理装置、情報処理システムおよびデータ再配置プログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
1つの態様では、記憶部と処理部とを有する情報処理装置が提供される。記憶部は、同一データを含む複数のデータベースそれぞれに対応付けて、同一データを記憶する記憶領域の断片化の状況に依存する空き容量を示す空き容量情報を記憶する。処理部は、空き容量情報に基づいて、複数のデータベースの中から、第1のデータベースを運用系のデータベースに決定し、第1のデータベースよりも空き容量が大きい第2のデータベースを待機系のデータベースに決定する。処理部は、運用系のデータベースの更新を待機系のデータベースに反映させるデータ同期を停止させ、待機系のデータベースが初期化された後、運用系のデータベースのデータを待機系のデータベースにコピーさせ、データ同期を再開させる、ことを含むデータ再配置処理を、第2のデータベースに対して実行する。処理部は、複数のデータベースの中で、運用系のデータベースおよび待機系のデータベースを変更することで、第2のデータベース以外のデータベースに対してデータ再配置処理が実行されるよう制御する。
【0011】
また、1つの態様では、第1の情報処理装置と第2の情報処理装置とを含む情報処理システムが提供される。また、1つの態様では、データ再配置プログラムが提供される。
【発明の効果】
【0012】
1つの側面では、複数のデータベースのデータ再配置を円滑に行うことができる。
【図面の簡単な説明】
【0013】
図1】第1の実施の形態の情報処理装置の例を説明する図である。
図2】第2の実施の形態の情報処理システムの例を示す図である。
図3】データベースサーバのハードウェア例を示すブロック図である。
図4】情報処理システムの適用例を示す図である。
図5】オンラインシステムの機能例を示すブロック図である。
図6】記憶領域の断片化の例を示す図である。
図7】空き容量の算出例を示す図である。
図8】データベースサーバ間のデータ同期の失敗例を示す図である。
図9】レプリケーションにおけるデータ再配置の例を示す図である。
図10】2台のサーバのクラスタ制御の例を示す図である。
図11】2台のサーバのクラスタ制御の例を示す図(続き1)である。
図12】2台のサーバのクラスタ制御の例を示す図(続き2)である。
図13】3台のサーバのクラスタ制御の例を示す図である。
図14】データベースサーバの機能例を示すブロック図である。
図15】レコードの構造例を示す図である。
図16】ハートビートメッセージの構造例を示す図である。
図17】制御情報の構造例を示す図である。
図18】フェイルオーバ制御の手順例を示すフローチャートである。
図19】フェイルオーバ制御の手順例を示すフローチャート(続き)である。
図20】データ再配置の手順例を示すフローチャートである。
図21】レプリケーション制御の手順例を示すフローチャートである。
【発明を実施するための形態】
【0014】
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0015】
図1は、第1の実施の形態の情報処理装置の例を説明する図である。
第1の実施の形態の情報処理装置10は、冗長化された複数のデータベースのデータ再配置を制御する。情報処理装置10は、何れか1つのデータベースが配置されたデータベースサーバであってもよい。また、情報処理装置10は、データベースが配置されたデータベースサーバとは異なる管理サーバまたは管理端末であってもよい。情報処理装置10を、コンピュータやデータ再配置装置などと言うこともできる。
【0016】
情報処理装置10は、記憶部11および処理部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性ストレージでもよい。処理部12は、例えば、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)などのプロセッサである。ただし、処理部12は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路を含んでもよい。プロセッサは、RAMなどのメモリ(記憶部11でもよい)に記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うこともある。
【0017】
記憶部11は、複数のデータベースそれぞれの空き容量を示す空き容量情報を記憶する。空き容量情報は、それら複数のデータベースの空き容量を監視することで収集される。第1の実施の形態の複数のデータベースは、1つのクラスタを形成する。複数のデータベースが同一データを含むように同期することで、冗長化されている。データは、例えば、複数のレコードを含む。1つのレコードは、例えば、関係テーブルの1つの行に対応する。データベースは、HDDなどの不揮発性ストレージを用いてデータを保持するオンディスクデータベースであってもよい。また、データベースは、RAMなどの揮発性メモリを用いてデータを保持するインメモリデータベースであってもよい。
【0018】
ここで、空き容量は、データを記憶する記憶領域の断片化の状況に依存する。よって、複数のデータベースが同一データを含んでいても、断片化の状況が異なるために、データベースによって空き容量が異なることがある。断片化は、長さの異なるレコードの追加と削除を繰り返すことで発生することがあり、長さが変わるようにレコードを更新することで発生することがある。複数のレコードは、理想的には、レコード間に空き領域が生じないように密に記憶されることが好ましい。しかし、レコードの追加、更新および削除を通じて、レコード間に断片的空き領域が生じることがある。この断片的空き領域は、新たなレコードを挿入するのに十分なサイズがないために、レコード追加に使用されないデッドスペースとなってしまい、空き容量にカウントされないことがある。
【0019】
一例として、複数のデータベースに、データベース13とデータベース14が含まれる。記憶部11は、データベース13の空き容量を示す空き容量情報13aと、データベース14の空き容量を示す空き容量情報14aとを記憶する。例えば、データベース13の空き容量が2ギガバイトであり、データベース14の空き容量が3ギガバイトである。第1の実施の形態では、データベース13の方が空き容量が小さく、データベース14の方が空き容量が大きい。例えば、複数のデータベースの中で、データベース13の空き容量が最も小さく、データベース14の空き容量が最も大きい。
【0020】
処理部12は、記憶部11に記憶された空き容量情報に基づいて、複数のデータベースの中から運用系データベースと待機系データベースとを決定する。例えば、処理部12は、空き容量情報13a,14aに基づいて、データベース13,14の一方を運用系データベースに決定し、他方を待機系データベースに決定する。運用系データベースは、クライアントからの要求を処理する運用系サーバがもつデータベースであり、クライアントからの要求に応答してデータの検索、挿入、更新、削除などのデータ処理が行われる。待機系データベースは、運用系データベースのバックアップとして機能する。通常時には、運用系データベースと待機系データベースとの間で、運用系データベースに対する更新を待機系データベースに反映させるデータ同期が行われる。
【0021】
運用系データベースと待機系データベースの決定にあたり、処理部12は、運用系データベースの方が空き容量が小さく、待機系データベースの方が空き容量が大きいことを制約条件とする。例えば、処理部12は、最も空き容量が小さいデータベースを運用系データベースに決定する。上記のように、第1の実施の形態では、データベース14の方がデータベース13よりも空き容量が大きい。そこで、処理部12は、データベース13を運用系データベースに決定し、データベース14を待機系データベースに決定する。
【0022】
上記の方法で決定される運用系データベースと待機系データベースは、管理者によって指定された当初のシステム設定とは異なる可能性がある。また、空き容量の変化によって、上記の方法で決定される運用系データベースと待機系データベースが変化する可能性がある。その場合、処理部12は、フェイルオーバによって各データベースの役割を変更する。例えば、現在、データベース13が待機系データベースであり、データベース14が運用系データベースである場合、データベース13,14の役割を入れ替える。
【0023】
処理部12は、上記で決定された待機系データベースを優先的に対象データベースとして、データ再配置処理を実行する。例えば、空き容量が最も大きい待機系データベースを、優先的に対象データベースとする。データ再配置処理では、対象データベースの断片的空き領域を削減して空き容量を増加させるデフラグが実現される。
【0024】
データ再配置処理では、処理部12は、運用系データベースであるデータベース13と待機系データベースであるデータベース14との間のデータ同期を停止させる。データ同期の停止後、データベース14が初期化される。例えば、揮発性メモリまたは不揮発性ストレージに記憶されていた複数のレコードが削除される。データベース14の初期化を、処理部12が制御するようにしてもよい。データベース14が初期化された後、処理部12は、データベース13のデータをデータベース14にコピーさせる。
【0025】
このとき、断片的空き領域がデータベース13よりも減少するように、データがデータベース14に格納される。例えば、データベース13において存在するレコード間の断片的空き領域が、データベース14では存在しないように、複数のレコードが密にデータベース14に格納される。データベース13において複数のレコードが論理番号の順に並んでいない場合、レコードを論理番号の順にソートしてデータベース14に格納するようにしてもよい。また、データベース13において1つのレコードが複数の部分に分割されている場合、複数の部分を連結してデータベース14に格納するようにしてもよい。
【0026】
データベース13からデータベース14へのデータのコピーを通じて、データが再配置されることになり、データベース14のデフラグが実現される。データのコピー後、処理部12は、データベース13とデータベース14との間のデータ同期を再開させる。
【0027】
データベース14を対象とするデータ再配置処理の後、処理部12は、複数のデータベースの中で、運用系データベースおよび待機系データベースを変更する。そして、処理部12は、データベース14以外のデータベースを対象として、上記と同様のデータ再配置処理が実行されるよう制御する。これにより、クラスタを形成する複数のデータベースそれぞれに対して、断片的空き領域を削減するデフラグが行われることになる。
【0028】
例えば、処理部12は、運用系データベースと待機系データベースの役割を入れ替え、データベース13を待機系データベースに変更して、データベース14を運用系データベースに変更する。そして、処理部12は、待機系データベースであるデータベース13を対象として、上記と同様のデータ再配置処理が実行されるよう制御する。なお、データベース13より空き容量が大きくデータベース14より空き容量が小さい第3のデータベースが存在する場合、処理部12は、データベース13より前に、当該第3のデータベースをデータ再配置処理の対象とするようにしてもよい。その場合、データベース13が引き続き運用系データベースとして機能する。
【0029】
第1の実施の形態の情報処理装置10によれば、冗長化された複数のデータベースが交代で対象データベースとなって、データ同期の停止、初期化、データコピーおよびデータ同期の再開を含むデータ再配置処理が実行される。これにより、複数のデータベースそれぞれにおいて、記憶領域の断片化が軽減され、空き容量を回復することができる。また、データ再配置処理を行っている間も、クライアントからの要求を運用系データベースによって処理することができ、性能低下を抑制することができる。
【0030】
また、複数のデータベースそれぞれの空き容量が監視され、運用系データベースの方が待機系データベースよりも空き容量が小さくなるように、それら複数のデータベースの役割が制御される。そして、空き容量が大きい方から優先的にデータ再配置処理が行われる。これにより、データ再配置処理のタイミングがデータベースによって異なり、データベース間で空き容量に違いが生じても、運用系データベースの方が空き容量が小さい状態を維持できる。その結果、待機系データベースの容量不足によって、運用系データベースの更新を待機系データベースに反映させるデータ同期が失敗するリスクを低減できる。また、複数のデータベースのうちの一部のデータベースのみデフラグが完了した途中状態においても、データ同期が失敗するリスクを低減することができる。
【0031】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理システムの例を示す図である。
【0032】
第2の実施の形態の情報処理システムは、冗長化された複数のデータベースを利用してデータを管理するオンラインシステムである。この情報処理システムは、ユーザの預金口座取引を扱う銀行システムや、ユーザの証券口座取引を扱う証券会社システムなど、長時間無停止で稼働するオンラインシステムに好適である。第2の実施の形態の情報処理システムは、ネットワーク30、クライアント31、Webサーバ32、アプリケーションサーバ33、管理端末34およびデータベースサーバ100,100a,100bを含む。データベースサーバ100aは、第1の実施の形態の情報処理装置10に対応する。
【0033】
ネットワーク30は、データ通信ネットワークである。ネットワーク30は、インターネットなどの広域ネットワークを含んでもよく、LAN(Local Area Network)などの構内ネットワークを含んでもよい。クライアント31は、サービス利用者が操作するクライアントコンピュータである。クライアント31は、Webブラウザを実行する。クライアント31は、サービス利用者の操作に応じてWebサーバ32にアクセスし、Webサーバ32から画面データを受信してディスプレイに表示する。
【0034】
Webサーバ32は、サービス利用者に対して視覚的ユーザインタフェースを提供するサーバコンピュータである。Webサーバ32は、クライアント31からアクセスを受け付け、アプリケーションサーバ33にデータ処理を要求する。Webサーバ32は、アプリケーションサーバ33から処理結果データを受信し、処理結果データを用いて画面データを生成し、生成した画面データをクライアント31に送信する。
【0035】
アプリケーションサーバ33は、業務ロジックを実装したアプリケーションプログラムを実行するサーバコンピュータである。アプリケーションサーバ33は、Webサーバ32からデータ処理の要求を受け付ける。データ処理の中で、アプリケーションサーバ33は、データベースを操作するクエリを生成することがある。アプリケーションサーバ33は、データベースサーバ100,100a,100bのうち、現用系であるアクティブ状態のデータベースサーバに対してクエリを送信し、クエリの実行結果を受信する。クエリの種類には、データの検索、挿入、更新および削除がある。アプリケーションサーバ33は、処理結果データをWebサーバ32に返信する。
【0036】
管理端末34は、オンラインシステムの管理者が操作するクライアントコンピュータである。管理端末34は、管理者の操作に応じて、データベースを保守するための各種コマンドをデータベースサーバ100,100a,100bに対して送信する。管理端末34から送信されるコマンドについては後述する。
【0037】
データベースサーバ100,100a,100bは、データベースを管理するサーバコンピュータである。このデータベースは、原則として全てのデータを揮発性メモリに保持するインメモリデータベースである。また、データベースは、例えば、複数のレコードをテーブル形式で管理する関係データベースである。データベースサーバ100,100a,100bは、1つのクラスタを形成する。クラスタに含まれる各データベースサーバを、ノードと言うことがある。データベースサーバ100,100a,100bに、同じデータをもつデータベースを配置することで、データが冗長化されて耐故障性が向上する。データ同期の利便性の観点から、データ用記憶領域の総容量は等しいことが好ましい。
【0038】
データベースサーバ100,100a,100bのうち、1つが現用系であるアクティブ状態のデータベースサーバであり、残りの2つが待機系であるスタンバイ状態のデータベースサーバである。アクティブ状態のデータベースサーバは、アプリケーションサーバ33からクエリを受け付け、クエリに応じたデータ処理を実行する。スタンバイ状態のデータベースサーバは、アクティブ状態のデータベースサーバに対するバックアップとして動作する。データ同期により、アクティブ状態のデータベースサーバで生じたデータベースの更新が、スタンバイ状態のデータベースサーバに反映される。
【0039】
図3は、データベースサーバのハードウェア例を示すブロック図である。
データベースサーバ100は、CPU101、RAM102、HDD103、画像インタフェース104、入力インタフェース105、媒体リーダ106および通信インタフェース107を有する。データベースサーバ100が有するこれらのユニットは、バスに接続されている。クライアント31、Webサーバ32、アプリケーションサーバ33、管理端末34およびデータベースサーバ100a,100bも、データベースサーバ100と同様のハードウェアを用いて実現することができる。
【0040】
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。CPU101は複数のプロセッサコアを備えてもよく、データベースサーバ100は複数のプロセッサを備えてもよい。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【0041】
RAM102は、CPU101が実行するプログラムやCPU101が演算に使用するデータを一時的に記憶する揮発性半導体メモリである。データベースサーバ100は、RAM以外の種類のメモリを備えてもよく、複数のメモリを備えてもよい。
【0042】
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性ストレージである。データベースサーバ100は、フラッシュメモリやSSD(Solid State Drive)など他の種類のストレージを備えてもよく、複数のストレージを備えてもよい。
【0043】
画像インタフェース104は、CPU101からの命令に従って、データベースサーバ100に接続された表示装置111に画像を出力する。表示装置111として、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、有機EL(OEL:Organic Electro-Luminescence)ディスプレイ、プロジェクタなど、任意の種類の表示装置を使用することができる。データベースサーバ100に、プリンタなど表示装置111以外の出力デバイスが接続されてもよい。
【0044】
入力インタフェース105は、データベースサーバ100に接続された入力デバイス112から入力信号を受け付ける。入力デバイス112として、マウス、タッチパネル、タッチパッド、キーボードなど、任意の種類の入力デバイスを使用することができる。データベースサーバ100に複数種類の入力デバイスが接続されてもよい。
【0045】
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、半導体メモリなど、任意の種類の記録媒体を使用することができる。媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体113は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
【0046】
通信インタフェース107は、ネットワーク30に接続され、ネットワーク30を介して、アプリケーションサーバ33、管理端末34、データベースサーバ100a,100bなどの他の情報処理装置と通信する。通信インタフェース107は、例えば、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースである。
【0047】
ここで、図2に示した第2の実施の形態の情報処理システムは、証券取引システムに適用することが可能である。そこで、情報処理システムの適用例を説明する。
図4は、情報処理システムの適用例を示す図である。
【0048】
証券取引システムは、株式などの有価証券の売買を仲介する。証券取引システムは、クライアント44,45などのクライアント、および、オンラインシステム46,47,48を含む。オンラインシステム46,47,48は、図2のような複数のデータベースサーバを含む情報処理システムを用いて実現することができる。
【0049】
クライアント44,45は、投資家が使用するクライアントコンピュータである。投資家は、証券会社41,42などの証券会社に依頼して有価証券を売買する。クライアント44を使用する投資家は、証券会社41の会員である。クライアント44は、売注文または買注文を示す注文メッセージをオンラインシステム46に送信する。クライアント45を使用する投資家は、証券会社42の会員である。クライアント45は、売注文または買注文を示す注文メッセージをオンラインシステム47に送信する。
【0050】
オンラインシステム46は、証券会社41が有する情報処理システムである。オンラインシステム47は、証券会社42が有する情報処理システムである。証券会社41,42は、投資家を代理して、証券取引所43で有価証券の売買を実行する。オンラインシステム46,47は、証券取引所43が有するオンラインシステム48に対してはクライアントとして動作し、クライアント44,45に対してはサーバとして動作する。
【0051】
オンラインシステム46は、クライアント44から注文メッセージを受け付けるアプリケーションインタフェースを有する。オンラインシステム46は、クライアント44から受信した注文メッセージに応じて、オンラインシステム48に注文メッセージを送信し、成立した売買契約を示す約定通知メッセージをオンラインシステム48から受信する。オンラインシステム46は、クライアント44に約定通知メッセージを送信する。同様に、オンラインシステム47は、オンラインシステム48に注文メッセージを送信し、成立した売買契約を示す約定通知メッセージをオンラインシステム48から受信する。
【0052】
オンラインシステム48は、証券取引所43が有する情報処理システムである。オンラインシステム48は、オンラインシステム46,47から、売注文または買注文を示す注文メッセージを受信する。オンラインシステム48は、売注文と買注文との間のマッチングを行い、希望条件を満たす売注文と買注文のペアを検出して売買契約を成立させる。オンラインシステム48は、売買契約が成立した売注文および買注文について、約定通知メッセージをオンラインシステム46,47に送信する。
【0053】
図5は、オンラインシステムの機能例を示すブロック図である。
オンラインシステム48は、注文受信部51、注文キュー52、マッチング部53、約定キュー54、約定送信部55、データベース管理システム56、注文データベース57および約定データベース58を有する。注文キュー52、約定キュー54、注文データベース57および約定データベース58は、例えば、RAMの記憶領域を用いて実現される。注文受信部51、マッチング部53、約定送信部55およびデータベース管理システム56は、例えば、CPUが実行するプログラムを用いて実現される。
【0054】
注文受信部51は、オンラインシステム46,47から注文メッセージを受信する。注文受信部51は、受信した注文メッセージを注文キュー52に挿入する。注文キュー52は、未処理の注文メッセージを受信順に記憶するFIFO(First In First Out)型のバッファメモリである。注文受信部51により、最新の注文メッセージが注文キュー52の末尾に挿入される。マッチング部53により、未処理の注文メッセージのうち最も古い注文メッセージが注文キュー52の先頭から取り出される。
【0055】
マッチング部53は、売注文と買注文の間のマッチングを行う。具体的には、マッチング部53は、注文キュー52の先頭から注文メッセージを1つずつ取り出す。取り出した注文メッセージが売注文を示す場合、マッチング部53は、今回の売注文と未約定の買注文とを対比する。取り出した注文メッセージが買注文を示す場合、マッチング部53は、今回の買注文と未約定の売注文とを対比する。希望条件が合う相手注文が存在する場合、マッチング部53は、売買契約を成立させ、約定した売注文と買注文のペアを示す約定通知メッセージを約定キュー54に挿入する。希望条件が合う相手注文が存在しない場合、マッチング部53は、今回の注文を未約定の注文として保存する。
【0056】
売注文および買注文を管理するため、マッチング部53はデータベースを利用する。マッチング部53は、データベースのクエリをデータベース管理システム(DBMS:Database Management System)56に対して発行し、クエリの実行結果をデータベース管理システム56から取得する。クエリの種類として、特定条件のレコードを検索する検索クエリ、新規レコードを挿入する挿入クエリ、既存レコードの値を書き換える更新クエリ、および、既存レコードを削除する削除クエリがある。
【0057】
約定キュー54は、未送信の約定通知メッセージを生成順に記憶するFIFO型のバッファメモリである。マッチング部53により、最新の約定通知メッセージが約定キュー54の末尾に挿入される。約定送信部55により、未送信の約定通知メッセージのうち最も古い約定通知メッセージが約定キュー54の先頭から取り出される。約定送信部55は、約定キュー54の先頭から約定通知メッセージを1つずつ取り出し、約定通知メッセージを適切な証券会社のオンラインシステムに対して送信する。
【0058】
データベース管理システム56は、注文データベース57および約定データベース58を管理する。データベース管理システム56は、マッチング部53からクエリを受け付け、受け付けたクエリに従って注文データベース57や約定データベース58のレコードを操作する。データベース管理システム56は、クエリの実行結果をマッチング部53に出力する。注文データベース57には、未約定の売注文を示すレコードおよび未約定の買注文を示すレコードが格納される。約定データベース58には、約定済み売注文を示すレコードおよび約定済みの買注文を示すレコードが格納される。
【0059】
次に、データベースの記憶領域の断片化について説明する。
図6は、記憶領域の断片化の例を示す図である。
データベースサーバ100,100a,100bが備えるRAMのデータ用記憶領域には、複数のレコードが記憶される。1つのレコードは、関係テーブルの1つの行に対応する。記憶領域を効率的に利用するため、これら複数のレコードは、レコード間に隙間が生じないように詰めて記憶されることが好ましい。しかし、データベースサーバ100,100a,100bを長時間連続的に運用すると、レコードの挿入、更新および削除の繰り返しを通じて、レコード間に断片的空き領域が生じる。断片的空き領域は、新たなレコードを挿入できるほどのサイズをもたないデッドスペースである。
【0060】
例えば、最初はレコード#1~#8の8個のレコードが、順番に詰めて記憶されているとする。初期状態から、レコード#3が削除される。すると、レコード#2とレコード#4との間に空き領域141が生じる。ただし、空き領域141は、別のレコードを記憶し得るため、断片的空き領域ではない。次に、レコード#9が挿入される。レコード#9は、空き領域141に挿入される。ただし、レコード#9はレコード#3より短いとする。よって、レコード#9とその後続のレコード#4との間に空き領域142が生じる。空き領域142は、サイズが小さく断片的空き領域である。
【0061】
次に、レコード#7が更新される。この更新によりレコード#7が短くなる。例えば、レコード#7に含まれる可変長文字列の文字数が減る。すると、レコード#7とその後続のレコード#8との間に空き領域143が生じる。空き領域143は、サイズが小さく断片的空き領域である。次に、レコード#5が更新される。この更新によりレコード#5が長くなる。例えば、レコード#5に含まれる可変長文字列の文字数が増える。ただし、レコード#5とその後続のレコード#6との間には隙間がなく、そのままレコード#5を延ばすことはできない。そこで、レコード#5の管理情報を含むヘッダを元の位置に残し、データ本体を含むボディをレコード#8の後方に移動させる。レコード#5が分割されることになる。これにより、レコード#5のヘッダとレコード#6との間に空き領域144が生じる。空き領域144は、サイズが小さく断片的空き領域である。
【0062】
このように、新たなレコードが挿入されることがない断片的空き領域は、長さの異なるレコードの挿入および削除を繰り返すことで生じ得る。また、断片的空き領域は、レコード長が変わるようにレコードを更新することによって生じ得る。レコード間に存在する断片的空き領域の個数が増えることで、記憶領域の断片化が進行する。
【0063】
データベースに対しては「空き容量」が算出される。空き容量は、新たなレコードを挿入可能な空き領域の合計サイズとして規定することが可能である。その場合、1以上のレコードを挿入可能な連続的空き領域のサイズが空き容量に算入される一方、レコードが挿入されることのない断片的空き領域のサイズは空き容量に算入されない。よって、断片化の進行によって、データベースの空き容量が減少する。総容量が等しくかつ同一データをもつ複数のデータベースであっても、断片化の状況が異なることで異なる空き容量が算出され得る。ここで、データベースの空き容量の算出方法について説明する。
【0064】
図7は、空き容量の算出例を示す図である。
データベースサーバ100,100a,100bでは、RAMのデータ用記憶領域が、単位記憶領域である「ブロック」に細分化されている。ブロックをページやセグメントなどと言うこともある。1つのブロックのサイズは固定であり、例えば、4096バイトである。データベース全体の空き容量は、以下の方法で算出されるブロック毎の空き容量の合計である。状態151~156は、1つのブロックの状態を示す。
【0065】
状態151は、ブロックに1つのレコードも格納されていない初期状態である。初期状態の空き容量は、ブロックサイズに等しい。よって、状態151の空き容量は、4096バイトである。状態152は、状態151から、128バイト×10個のレコードがまとめて書き込まれた状態である。レコードが詰めて書き込まれた場合、書き込まれたレコードのデータ量だけ空き容量が減少する。よって、状態152の空き容量は、4096バイトから128×10バイトを差し引いて、2816バイトと算出される。
【0066】
状態153は、状態152から更に、128バイト×22個のレコードがまとめて書き込まれた状態である。これにより、32個のレコードが隙間なく格納され、ブロックに空き領域が全く存在しないことになる。状態153の空き容量は、2816バイトから128×22バイトを差し引いて、0バイトと算出される。
【0067】
状態154は、状態152から更に、128バイト×21個のレコードと96バイト×1個のレコードとがまとめて書き込まれた状態である。32個のレコードが隙間なく格納されているものの、ブロックの末尾に32バイトの空き領域が残っている。ここで、ブロックの中に空き領域が残っていても、次のレコードが挿入不可となった場合、そのブロックの空き容量が0とみなされる。よって、状態154の空き容量は、次のレコードをブロックに挿入できないため、0とみなされる。
【0068】
状態155は、状態153から、128バイト×10個のレコードが削除された状態である。レコードが削除された場合、削除されたレコードのデータ量だけ空き容量が増加する。よって、状態155の空き容量は、0バイトに128×10バイトを加えて、1280バイトと算出される。状態156は、状態153から、1つのレコードが更新された状態である。更新されたレコードの長さが、128バイトから64バイトに減少している。レコードの更新によって断片的空き領域が生じても、ブロックの空き容量は増加しない。よって、状態156の空き容量は、0のまま変わらないとみなされる。レコードの分割によって断片的空き領域が生じた場合も同様である。
【0069】
断片化を放置した場合、データベースの空き容量が小さくなる。この空き容量は、データ用記憶領域の総容量と記憶されているレコードの総データ量との間の差よりも顕著に小さくなることがある。よって、情報処理システムの設計時に想定した個数のレコードがデータベースに格納できなくなり、容量不足が発生する可能性がある。そこで、レコードを再配置して断片的空き領域を削減するデフラグを実行することが好ましい。デフラグによって、計算上の空き容量が増加することが期待される。
【0070】
ただし、長時間連続的に稼働することが求められるオンラインシステムは、ユーザにサービスを提供しつつデフラグを実行することになるため、デフラグ方法が問題となる。この点、アクティブ状態のデータベースサーバがデフラグを行うと、サービスの遅延が問題となる。データ用記憶領域に排他ロックをかけて、サービス実行のアクセスとデフラグのアクセスとが衝突しないように排他制御を行うと、サービスが遅延してしまう。また、複数のデータベースサーバが一斉にデフラグを行うのではなく交代でデフラグを行うと、データベースサーバ間で空き容量が大きく異なってしまうことがある。その場合、以下に説明するようなデータ同期失敗のリスクが生じる。
【0071】
図8は、データベースサーバ間のデータ同期の失敗例を示す図である。
ここでは、データベースサーバ100がアクティブ状態であり、データベースサーバ100aがスタンバイ状態であるとする。また、データベースサーバ100の断片化が小さく、データベースサーバ100aの断片化が大きいとする。よって、データベースサーバ100の方が空き容量が大きく、データベースサーバ100aの方が空き容量が小さい。
【0072】
データベースサーバ100は、データベースに3個のレコードを挿入するトランザクションAをコミットする。すると、データベースサーバ100は、データベースサーバ100のデータ用記憶領域にこれら3個のレコードを書き込む。また、データベースサーバ100は、冗長性確保のため、トランザクションAの3個のレコードをデータベースサーバ100aに転送する。データベースサーバ100aは、データベースサーバ100aのデータ用記憶領域にこれら3個のレコードを書き込む。
【0073】
なお、データベースサーバ100,100aの間のデータ同期は、コミット完了後にバックグラウンドで行ってよい。また、アクティブ状態のデータベースサーバは1台であるため、データベースサーバ100bもスタンバイ状態として動作している。よって、データベースサーバ100のコミットがデータベースサーバ100bにも反映される。データベースサーバ100bには、データベースサーバ100からレコードが転送されてもよいし、データベースサーバ100aからレコードが転送されてもよい。
【0074】
次に、データベースサーバ100は、データベースに2個のレコードを挿入するトランザクションBをコミットする。すると、データベースサーバ100は、データベースサーバ100のデータ用記憶領域にこれら2個のレコードを書き込む。データベースサーバ100の空き容量は足りているため、この書き込みは成功する。一方、データベースサーバ100は、トランザクションBの2個のレコードをデータベースサーバ100aに転送する。データベースサーバ100aは、データベースサーバ100aのデータ用記憶領域にこれら2個のレコードを書き込む。データベースサーバ100aの空き容量は不足しているため、この書き込みは失敗する。よって、データ同期が失敗してしまう。
【0075】
このように、複数のデータベースサーバが交代でデフラグを行うと、データベースサーバ間で空き容量に大きな差が生じる可能性がある。このとき、アクティブ状態のデータベースサーバの方がスタンバイ状態のデータベースサーバより空き容量が大きくなると、コミット自体は成功しているにもかかわらず、データ同期が失敗してしまう。その結果、スタンバイ状態のデータベースサーバが故障とみなされてクラスタから切り離される可能性がある。また、データの冗長性が低下する。
【0076】
そこで、第2の実施の形態のデータベースサーバ100,100a,100bは、以下に説明する方法で、レコードを再配置して断片的空き領域を削減する。
第2の実施の形態では、データベースサーバ100,100a,100bの優先順位が空き容量に基づいて決定される。空き容量が最も小さいデータベースサーバが第1位になり、空き容量が最も大きいデータベースサーバが第3位になる。第1位のデータベースサーバがアクティブ状態として動作し、第2位および第3位のデータベースサーバがスタンバイ状態として動作する。そして、優先順位が下位のデータベースサーバから先に、1台ずつ順にクラスタから切り離される。クラスタから切り離されたデータベースサーバは、レコードを全て削除する初期化が行われた上で、クラスタに再び組み込まれる。クラスタに組み込まれたデータベースサーバは、データベースが空であるため、他のデータベースサーバから全てのレコードのコピーを受信する。このとき、レコードが再配置される。
【0077】
図9は、レプリケーションにおけるデータ再配置の例を示す図である。
ここでは、データベースサーバ100aは、空き容量が最も小さく、優先順位が第1位のデータベースサーバである。よって、データベースサーバ100aはアクティブ状態である。データベースサーバ100は、空き容量が最も大きく、優先順位が第3位のデータベースサーバである。よって、データベースサーバ100は、クラスタから切り離され、データベースが初期化され、クラスタに再び組み込まれる。
【0078】
データベースサーバ100がクラスタに組み込まれる際、レプリケーションが行われる。レプリケーションでは、データベースサーバ100aに記憶されたレコードがデータベースサーバ100にコピーされる。ここでは、レコード#1,#2,#4~#9が、データベースサーバ100aからデータベースサーバ100にコピーされる。レプリケーションの際、データベースサーバ100では実質的にデフラグが実現されるようにする。
【0079】
データベースサーバ100aは、送信する複数のレコードを、それらレコードに割り当てられた論理番号の昇順にソートする。よって、記憶領域上ではレコード#9がレコード#2とレコード#4の間に配置されているところ、レコード#9がレコード#8より後に送信される。また、データベースサーバ100aは、ヘッダとボディとが分割されたレコードが存在する場合、ヘッダとボディを連結する。よって、記憶領域上ではレコード#5が分割されて配置されているところ、一続きのレコードとして組み立てられる。データベースサーバ100aは、このようにしてソートし連結した複数のレコードを、論理番号の小さい順にデータベースサーバ100に送信する。
【0080】
データベースサーバ100は、データベースサーバ100aから受信するレコードを、論理番号の昇順に、できる限り隙間なく詰めて記憶領域に格納する。よって、データベースサーバ100は、レコード#1,#2,#4~#9を受信順に、できる限りレコード間に断片的空き領域が生じないように詰めて書き込む。これにより、データベースサーバ100の断片的空き領域がデータベースサーバ100aよりも減少する。よって、データベースサーバ100はデフラグが行われた状態となり、空き容量が増加する。また、複数のレコードが論理番号順に並んでいると共に、レコードの分割が解消されている。よって、データベースサーバ100におけるレコード検索の効率が向上する。
【0081】
次に、複数台のデータベースサーバのクラスタ制御について説明する。まず、説明を簡単にするため、データベースサーバ100,100aの2台のクラスタを考える。
図10は、2台のサーバのクラスタ制御の例を示す図である。
【0082】
管理者のシステム設定によって、データベースサーバ100の優先順位が第1位に指定され、データベースサーバ100aの優先順位が第2位に指定されているとする。すると、データベースサーバ100がアクティブ状態で動作し、データベースサーバ100aがスタンバイ状態で動作する。データベースサーバ100でコミットが実行され、データベースサーバ100からデータベースサーバ100aへデータ同期が行われる。
【0083】
次に、データベースサーバ100がデータベースサーバ100aにハートビートメッセージを送信し、データベースサーバ100aがデータベースサーバ100にハートビートメッセージを送信する。ハートビートメッセージは、生存確認のための制御メッセージであり、複数のデータベースサーバの間で定期的に(例えば、3秒毎に)送信される。データベースサーバ100が送信するハートビートメッセージには、データベースサーバ100の空き容量の情報が含まれている。データベースサーバ100aが送信するハートビートメッセージには、データベースサーバ100aの空き容量の情報が含まれている。
【0084】
ここでは、データベースサーバ100の空き容量が3ギガバイトであり、データベースサーバ100aの空き容量が2ギガバイトであるとする。データベースサーバ100,100aは、ハートビートメッセージを通じて、相手の空き容量を相互に知ることになる。
【0085】
すると、データベースサーバ100,100aはそれぞれ、クラスタに含まれる各データベースサーバの優先順位を、空き容量の小さい順になるように決定する。ここで決定する優先順位は、管理者のシステム設定とは異なる可能性がある。これにより、データベースサーバ100aが第1位となり、データベースサーバ100が第2位となる。優先順位が第1位のデータベースサーバ100aは、自身がアクティブ状態になることをデータベースサーバ100に対して宣言する。これにより、データベースサーバ100aがアクティブ状態に遷移し、データベースサーバ100がスタンバイ状態に遷移する。すると、データベースサーバ100aでコミットが実行され、データベースサーバ100aからデータベースサーバ100へデータ同期が行われるようになる。
【0086】
次に、アクティブ状態のデータベースサーバ100aが、管理端末34から切り離しコマンドを受信する。切り離しコマンドには、クラスタから切り離すデータベースサーバ100を示す識別情報が含まれる。データベースサーバ100aは、切り離しコマンドに従って、データベースサーバ100をクラスタから切り離す。切り離しでは、データベースサーバ100aは、データベースサーバ100へのデータ同期を停止し、データベースサーバ100とのハートビートメッセージの送受信を停止して生存確認を取りやめる。
【0087】
次に、クラスタ外のデータベースサーバ100が、管理端末34から初期化コマンドを受信する。データベースサーバ100は、初期化コマンドに従ってデータベースを初期化する。初期化では、データベースサーバ100は、RAMのデータ用記憶領域に記憶された全てのレコードを削除する。ただし、データベースの管理情報を書き換えることで、レコードを削除する代わりにレコードを認識不可にすることもできる。
【0088】
図11は、2台のサーバのクラスタ制御の例を示す図(続き1)である。
次に、アクティブ状態のデータベースサーバ100aが、管理端末34から組み込みコマンドを受信する。組み込みコマンドには、クラスタに組み込むデータベースサーバ100を示す識別情報が含まれる。データベースサーバ100aは、組み込みコマンドに従って、データベースサーバ100をクラスタに組み込む。なお、データベースサーバ100aがアクティブ状態で稼働し続けていることにより、ここでは、データベースサーバ100aの空き容量が1.5ギガバイトに低下している。
【0089】
データベースサーバ100の組み込みにあたり、データベースサーバ100aは、レプリケーションを実行する。前述のようにレプリケーションでは、データベースサーバ100aは、RAMのデータ用記憶領域に記憶された全てのレコードをデータベースサーバ100にコピーする。データベースサーバ100は、RAMのデータ用記憶領域に、できる限り断片的空き領域が生じないように詰めてレコードを書き込む。ここでは、デフラグの効果により、データベースサーバ100の空き容量が5ギガバイトに回復している。
【0090】
レプリケーションが完了すると、データベースサーバ100aは、データベースサーバ100のクラスタへの組み込みを完結させる。組み込みでは、データベースサーバ100aは、データベースサーバ100とのハートビートメッセージの送受信を再開して生存確認を再開し、データベースサーバ100へのデータ同期を再開する。組み込まれたデータベースサーバ100は、スタンバイ状態で動作する。
【0091】
次に、データベースサーバ100,100aの一方または両方が、管理端末34からフェイルオーバコマンドを受信する。フェイルオーバコマンドは、アクティブ状態とスタンバイ状態との強制的な切り替えを意味する。フェイルオーバコマンドには、アクティブ状態になるデータベースサーバの識別情報が含まれてもよく、スタンバイ状態になるデータベースサーバの識別情報が含まれてもよい。フェイルオーバコマンドに従って、データベースサーバ100がアクティブ状態に遷移し、データベースサーバ100aがスタンバイ状態に遷移する。すると、データベースサーバ100でコミットが実行され、データベースサーバ100からデータベースサーバ100aへデータ同期が行われるようになる。
【0092】
次に、アクティブ状態のデータベースサーバ100が、管理端末34から切り離しコマンドを受信する。データベースサーバ100は、切り離しコマンドに従って、データベースサーバ100aをクラスタから切り離す。切り離しでは、データベースサーバ100は、データベースサーバ100aへのデータ同期を停止し、データベースサーバ100aとのハートビートメッセージの送受信を停止して生存確認を取りやめる。
【0093】
図12は、2台のサーバのクラスタ制御の例を示す図(続き2)である。
次に、クラスタ外のデータベースサーバ100aが、管理端末34から初期化コマンドを受信する。データベースサーバ100aは、初期化コマンドに従ってデータベースを初期化する。初期化では、データベースサーバ100aは、RAMのデータ用記憶領域に記憶された全てのレコードを削除する。次に、アクティブ状態のデータベースサーバ100が、管理端末34から組み込みコマンドを受信する。データベースサーバ100は、組み込みコマンドに従って、データベースサーバ100aをクラスタに組み込む。なお、データベースサーバ100がアクティブ状態で稼働し続けていることにより、ここでは、データベースサーバ100の空き容量が4.5ギガバイトに低下している。
【0094】
データベースサーバ100aの組み込みにあたり、データベースサーバ100は、レプリケーションを実行する。レプリケーションでは、データベースサーバ100は、RAMのデータ用記憶領域に記憶された全てのレコードをデータベースサーバ100aにコピーする。データベースサーバ100aは、RAMのデータ用記憶領域に、できる限り断片的空き領域が生じないように詰めてレコードを書き込む。ここでは、デフラグの効果により、データベースサーバ100aの空き容量が5ギガバイトに回復している。
【0095】
レプリケーションが完了すると、データベースサーバ100は、データベースサーバ100aのクラスタへの組み込みを完結させる。組み込みでは、データベースサーバ100は、データベースサーバ100aとのハートビートメッセージの送受信を再開して生存確認を再開し、データベースサーバ100aへのデータ同期を再開する。組み込まれたデータベースサーバ100aは、スタンバイ状態で動作する。
【0096】
次に、データベースサーバ100,100a,100bの3台のクラスタを考える。
図13は、3台のサーバのクラスタ制御の例を示す図である。
ここでは、データベースサーバ100aの空き容量が2ギガバイト、データベースサーバ100bの空き容量が2.5ギガバイト、データベースサーバ100の空き容量が3ギガバイトであるとする。よって、データベースサーバ100aの優先順位が第1位、データベースサーバ100bの優先順位が第2位、データベースサーバ100の優先順位が第3位と決定される。データベースサーバ100aがアクティブ状態で動作し、データベースサーバ100,100bがスタンバイ状態で動作する。
【0097】
最初に、優先順位が最も低いデータベースサーバ100がデフラグ対象に選択される。切り離し、初期化、レプリケーションおよび組み込みを通じて、データベースサーバ100の断片的空き領域が削減され、その空き容量が5ギガバイトに回復する。その間、データベースサーバ100aの空き容量が1.5ギガバイトに低下し、データベースサーバ100bの空き容量が2ギガバイトに低下する。なお、組み込み直後のデータベースサーバの空き容量が最も大きいため、通常、この時点で優先順位は変化しない。
【0098】
次に、デフラグ未実行のデータベースの中で優先順位が最も低いデータベースサーバ100bがデフラグ対象に選択される。データベースサーバ100bがクラスタから一時的に切り離されるため、データベースサーバ100の優先順位が第2位に繰り上がる。切り離し、初期化、レプリケーションおよび組み込みを通じて、データベースサーバ100bの断片的空き領域が削減され、その空き容量が5ギガバイトに回復する。その間、データベースサーバ100aの空き容量が1ギガバイトに低下し、データベースサーバ100の空き容量が4.5ギガバイトに低下する。組み込まれたデータベースサーバ100bの優先順位は第3位となる。結果として、データベースサーバ100,100a,100bの優先順位が、空き容量の昇順に維持される。
【0099】
最後に、データベースサーバ100aがデフラグ対象に選択される。データベースサーバ100aはアクティブ状態であるため、強制的なフェイルオーバによってスタンバイ状態に遷移する。データベースサーバ100の優先順位が第1位に繰り上がり、データベースサーバ100bの優先順位が第2位に繰り上がる。切り離し、初期化、レプリケーションおよび組み込みを通じて、データベースサーバ100aの断片的空き領域が削減され、その空き容量が5ギガバイトに回復する。その間、データベースサーバ100の空き容量が4ギガバイトに低下し、データベースサーバ100bの空き容量が4.5ギガバイトに低下する。組み込まれたデータベースサーバ100aの優先順位は第3位となる。結果として、データベースサーバ100,100a,100bの優先順位が、空き容量の昇順に維持される。よって、優先順位は変化しない。
【0100】
このように、クラスタに含まれるデータベースサーバ100,100a,100bに、空き容量の小さい順の優先順位が付与される。そして、優先順位の低い方、すなわち、空き容量の大きい方から先に1台ずつデフラグが行われる。これにより、上位のデータベースサーバの方が下位のデータベースサーバより空き容量が大きくなる時間を短縮でき、空き容量不足でデータ同期が失敗するリスクを低減することができる。
【0101】
なお、上記の説明では、管理端末34が、切り離しコマンドと初期化コマンドと組み込みコマンドを送信している。これら複数のコマンドは、管理者からの個々の入力に応じて1つずつ送信されてもよいし、プログラムに従って連続的に送信されてもよい。また、管理端末34が所定の契機を判断して、自動的にこれらコマンドを送信し始めるようにしてもよいし、データベースサーバ100,100a,100bが所定の契機を検出して自動的にデフラグを開始するようにしてもよい。
【0102】
例えば、クラスタに含まれる複数のデータベースそれぞれについて、データ用記憶領域の総容量に対する空き容量の割合である空き割合を算出し、最小の空き割合が閾値未満(例えば、10%未満)となったことをデフラグ開始の契機と定義してもよい。また、クラスタに含まれる複数のデータベースそれぞれについて、データ用記憶領域の総容量に対する使用量の割合である使用割合を算出し、最大の使用割合が閾値を超えた(例えば、90%を超えた)ことをデフラグ開始の契機と定義してもよい。
【0103】
また、上記の説明では、クラスタに含まれる全てのデータベースサーバのデフラグを連続的に行っている。デフラグ対象を切り替えるためのフェイルオーバコマンドは、管理者からの入力に応じて送信されてもよいし、直前のデフラグ対象のデフラグ完了後にプログラムに従って自動的に送信されてもよい。また、2番目以降のデータベースサーバのデフラグを行うか否かを、管理者が判断するようにしてもよい。
【0104】
また、管理端末34が所定の継続条件を判断して、自動的にフェイルオーバコマンドを送信するようにしてもよいし、データベースサーバ100,100a,100bが所定の継続条件を検出して自動的にデフラグを継続するようにしてもよい。例えば、空き割合が閾値未満のデータベースサーバが残っていることや、使用割合が閾値を超えるデータベースサーバが残っていることを、デフラグ継続の条件と定義してもよい。
【0105】
次に、データベースサーバ100,100a,100bの機能について説明する。ここでは代表して、データベースサーバ100について説明する。データベースサーバ100a,100bも、データベースサーバ100と同様の機能を有する。
【0106】
図14は、データベースサーバの機能例を示すブロック図である。
データベースサーバ100は、レコード記憶部121、制御情報記憶部122、クエリ実行部123、レプリケーション制御部124、クラスタ制御部125および通信部126を有する。レコード記憶部121および制御情報記憶部122は、RAM102の記憶領域を用いて実現される。クエリ実行部123、レプリケーション制御部124、クラスタ制御部125および通信部126は、プログラムを用いて実現される。
【0107】
レコード記憶部121は、データベースのレコードを記憶する。レコード記憶部121の総容量は予め決まっており、データベースサーバ100,100a,100bの間で同一であることが好ましい。1つのレコードは、例えば、関係データベースにおけるテーブルの1つの行(タプル)に対応し、複数の列(カラム)の値を含む。レコードの構造については後述する。制御情報記憶部122は、クラスタの制御やレコードの管理に用いられる制御情報を記憶する。制御情報の詳細については後述する。
【0108】
クエリ実行部123は、データベースサーバ100がアクティブ状態のとき、アプリケーションサーバ33からSQLなどのクエリを受信し、クエリに応じたレコード操作をレコード記憶部121に対して実行して実行結果を返信する。検索クエリに対しては、クエリ実行部123は、検索条件に該当するレコードをレコード記憶部121から読み出す。挿入クエリに対しては、クエリ実行部123は、新たなレコードをレコード記憶部121に挿入する。更新クエリに対しては、クエリ実行部123は、レコード記憶部121の中の特定のレコードを書き換える。削除クエリに対しては、クエリ実行部123は、レコード記憶部121から特定のレコードを削除する。
【0109】
レプリケーション制御部124は、データベースサーバ間のデータ同期を実現する。データベースサーバ100がアクティブ状態のとき、レプリケーション制御部124は、クエリ実行後にレコード記憶部121の差分を他のデータベースサーバに送信する。データベースサーバ100がスタンバイ状態のとき、レプリケーション制御部124は、他のデータベースサーバから差分を受信してレコード記憶部121を更新する。
【0110】
また、データベースサーバ100がアクティブ状態であり、あるデータベースサーバをクラスタに組み込むとき、レプリケーション制御部124は、レコード記憶部121のレコードを論理番号順にソートして、組み込まれるデータベースサーバにコピーする。また、データベースサーバ100がクラスタに組み込まれるとき、レプリケーション制御部124は、他のデータベースサーバから全てのレコードを受信し、受信したレコードを、断片的空き領域が少なくなるようにレコード記憶部121に詰め込む。
【0111】
クラスタ制御部125は、クラスタ内でのデータベースサーバ100の役割を判定し、データベースサーバ100の挙動を制御する。クラスタ制御部125は、他のデータベースサーバとの間で定期的にハートビートメッセージを送受信し、ハートビートメッセージに含まれる空き容量の情報を制御情報記憶部122に記録する。クラスタ制御部125は、空き容量に基づいてデータベースサーバ100の優先順位を決定する。
【0112】
また、クラスタ制御部125は、ハートビートメッセージを送信していないデータベースサーバを故障と判定し、データベースサーバ100の優先順位を変更する。また、クラスタ制御部125は、フェイルオーバコマンドに応じて、データベースサーバ100の優先順位を変更する。クラスタ制御部125は、優先順位に応じて、データベースサーバ100をアクティブ状態とスタンバイ状態の間で切り替える。また、クラスタ制御部125は、クラスタからの切り離しやクラスタへの組み込みを制御する。
【0113】
通信部126は、クラスタの運用管理のため、管理端末34やデータベースサーバ100a,100bと通信する。通信部126は、管理端末34から各種のコマンドを受信する。また、通信部126は、データベースサーバ100a,100bからハートビートメッセージを受信し、データベースサーバ100a,100bにハートビートメッセージを送信する。また、通信部126は、データベースサーバ100a,100bからレコードを受信し、データベースサーバ100a,100bにレコードを送信する。
【0114】
図15は、レコードの構造例を示す図である。
レコード131は、レコード記憶部121に記憶される。レコード131は、ヘッダおよびボディを含む。ヘッダは、レコード長、分割フラグおよびアドレスを含む。レコード長は、レコード131のサイズである。分割フラグは、記憶領域上でヘッダとボディとが分離しているか否かを示すフラグである。分割フラグ=OFFは、ヘッダとボディが連続して記憶されていることを示し、分割フラグ=ONは、ヘッダとボディが分割されて記憶されていることを示す。アドレスは、記憶領域上でのボディの先頭位置を示す物理アドレスである。分割フラグ=OFFの場合、ヘッダがアドレスを含まなくてもよい。ボディは、データ本体を含む。データ本体には、複数の列の値が列挙される。
【0115】
図16は、ハートビートメッセージの構造例を示す図である。
ハートビートメッセージ132は、データベースサーバ100,100a,100bの間で送信される。ハートビートメッセージ132は、種別、メッセージ長、送信元サーバおよび空き容量を含む。種別は、メッセージ種別がハートビートであることを示す。メッセージ長は、ハートビートメッセージ132のサイズである。送信元サーバは、ハートビートメッセージ132を送信したデータベースサーバの識別情報である。空き容量は、送信元サーバにおいて算出されたデータベースの空き容量である。
【0116】
図17は、制御情報の構造例を示す図である。
システム定義ファイル133は、制御情報記憶部122に記憶される。システム定義ファイル133は、管理者によって作成される。システム定義ファイル133は、データベースサーバ100,100a,100bの初期の優先順位を示す。例えば、データベースサーバ100,100a,100bの識別情報が、優先順位の高い順に列挙される。ただし、第2の実施の形態では、空き容量に応じて自動的に優先順位が変更される。
【0117】
空き容量テーブル134は、制御情報記憶部122に記憶される。空き容量テーブル134は、サーバ名と空き容量とを対応付ける。空き容量テーブル134には、データベースサーバ100,100a,100bの識別情報が登録され、識別情報と対応付けて、データベースの空き容量が登録される。データベースサーバ100,100a,100bの空き容量は、ハートビートメッセージによって相互に通知されている。例えば、データベースサーバ100の空き容量が3ギガバイト、データベースサーバ100aの空き容量が2ギガバイト、データベースサーバ100bの空き容量が2.5ギガバイトという情報が、空き容量テーブル134に登録される。
【0118】
論理番号テーブル135は、制御情報記憶部122に記憶される。論理番号テーブル135は、レコードの論理番号と物理アドレスとを対応付ける。論理番号テーブル135には、レコード記憶部121に記憶されたレコードの論理番号が登録され、論理番号と対応付けて、記憶領域上でのレコードの先頭位置を示す物理アドレスが登録される。ヘッダとボディが分離している場合、物理アドレスはヘッダの先頭位置を示す。論理番号は、例えば、複数のレコードに対して重複なしに割り当てられる非負整数の識別子である。
【0119】
レプリケーションテーブル136は、制御情報記憶部122に記憶される。レプリケーションテーブル136は、全てのレコードを論理番号順に送信するレプリケーションの際に生成され、レプリケーションの制御に用いられる。レプリケーションテーブル136は、レコードの論理番号と状態とを対応付ける。レプリケーションテーブル136には、レコードの論理番号が登録され、論理番号と対応付けて、レコードの送信状態が登録される。レコードの送信状態は、「未送信」、「送信中」または「送信済」である。送信状態の初期値は「未送信」である。論理番号が小さいレコードから順に、「未送信」から「送信中」に遷移し、更に「送信中」から「送信済」に遷移する。全てのレコードの送信状態が「送信済」になると、レプリケーションが終了する。
【0120】
次に、データベースサーバ100,100a,100bの処理手順について説明する。ここでは代表して、データベースサーバ100について説明する。データベースサーバ100a,100bも、データベースサーバ100と同様の処理手順を実行する。
【0121】
図18は、フェイルオーバ制御の手順例を示すフローチャートである。
フェイルオーバ制御は、所定周期(例えば、3秒周期)で実行される。
(S10)クラスタ制御部125は、現時点でクラスタに含まれている他のデータベースサーバ(例えば、データベースサーバ100a,100b)を確認する。
【0122】
(S11)クラスタ制御部125は、データベースサーバ100のデータベースの空き容量を算出する。空き容量には、断片的空き領域のサイズは算入されない。データベース全体の空き容量は、ブロック毎の空き容量の合計である。
【0123】
(S12)クラスタ制御部125は、ステップS11で算出された空き容量の情報と、データベースサーバ100の識別情報とを含むハートビートメッセージを生成する。
(S13)通信部126は、ステップS12で生成されたハートビートメッセージを、ステップS10で確認した他のデータベースサーバに送信する。
【0124】
(S14)通信部126は、他のデータベースサーバからハートビートメッセージを受信することがある。受信されたハートビートメッセージがある場合、クラスタ制御部125は、送信元サーバの識別情報と空き容量の情報を抽出する。
【0125】
(S15)クラスタ制御部125は、空き容量テーブル134から、ステップS14で抽出された識別情報に対応する空き容量を検索し、ステップS14で抽出された空き容量の情報と比較して、空き容量が変化したか判断する。空き容量が変化している場合はステップS16に進み、変化していない場合はステップS17に進む。
【0126】
(S16)クラスタ制御部125は、空き容量テーブル134の空き容量を、ハートビートメッセージが示す空き容量に置換して、空き容量テーブル134を更新する。
(S17)クラスタ制御部125は、ステップS10で確認した他のデータベースサーバの全てからハートビートメッセージが受信されたか判断する。受信された場合はステップS21に進み、受信されていない場合はステップS18に進む。
【0127】
(S18)クラスタ制御部125は、ハートビートメッセージを送信していない他のデータベースサーバを故障と判定する。クラスタ制御部125は、故障したデータベースサーバ以外の正常なデータベースサーバの優先順位を繰り上げる。ここでは、正常なデータベースサーバに、データベースサーバ100自身も含まれる。
【0128】
(S19)クラスタ制御部125は、優先順位の変更によって、データベースサーバ100の優先順位が第2位以下から第1位に繰り上がったか判断する。第1位になった場合はステップS20に進み、それ以外の場合はステップS21に進む。
【0129】
(S20)クラスタ制御部125は、データベースサーバ100の状態を、スタンバイ状態からアクティブ状態に遷移させる。アクティブ状態になると、データベースサーバ100は、アプリケーションサーバ33からクエリを受け付けるようになる。
【0130】
図19は、フェイルオーバ制御の手順例を示すフローチャート(続き)である。
(S21)クラスタ制御部125は、空き容量テーブル134を参照して、正常なデータベースサーバを空き容量の小さい順にソートする。
【0131】
(S22)クラスタ制御部125は、空き容量が同じデータベースサーバが存在するか判断する。空き容量が同じデータベースサーバが存在する場合はステップS23に進み、存在しない場合はステップS24に進む。なお、クラスタ制御部125は、同じ空き容量をもつ他のデータベースサーバが存在しないデータベースサーバについては、空き容量が小さいほど優先順位が高くなるように、優先順位を決定する。
【0132】
(S23)クラスタ制御部125は、空き容量が同じデータベースサーバの間の上位下位の関係が、システム定義ファイル133に記載された上位下位の関係と同じになるように、空き容量が同じデータベースサーバの優先順位を確定する。
【0133】
(S24)クラスタ制御部125は、データベースサーバ100の優先順位が、第2位以下から第1位に繰り上がったか判断する。第1位になった場合はステップS25に進み、それ以外の場合はステップS26に進む。
【0134】
(S25)クラスタ制御部125は、データベースサーバ100の状態を、スタンバイ状態からアクティブ状態に遷移させる。そして、フェイルオーバ制御が終了する。
(S26)クラスタ制御部125は、データベースサーバ100の優先順位が、第1位から第2位以下に繰り下がったか判断する。第2位以下になった場合はステップS27に進み、それ以外の場合はフェイルオーバ制御が終了する。
【0135】
(S27)クラスタ制御部125は、データベースサーバ100の状態を、アクティブ状態からスタンバイ状態に遷移させる。
図20は、データ再配置の手順例を示すフローチャートである。
【0136】
ここでは、データベースサーバ100aがアクティブ状態であり、データベースサーバ100がスタンバイ状態かつデータ再配置対象であると仮定する。
(S30)データベースサーバ100aは、切り離しコマンドを受信する。
【0137】
(S31)データベースサーバ100aは、切り離しコマンドで指定されたデータベースサーバ100をクラスタから除外する。ここでは、データベースサーバ100aは、データベースサーバ100へのデータ同期を停止し、ハートビートメッセージによるデータベースサーバ100の生存確認を停止する。
【0138】
(S32)データベースサーバ100は、初期化コマンドを受信する。
(S33)データベースサーバ100は、データベースを初期化して、データベースサーバ100のRAM102に記憶されているレコードを全て削除する。
【0139】
(S34)データベースサーバ100aは、組み込みコマンドを受信する。
(S35)データベースサーバ100aは、組み込みコマンドで指定されたデータベースサーバ100に対して、全てのレコードをコピーするレプリケーションを実行する。レプリケーション制御の詳細は後述する。
【0140】
(S36)データベースサーバ100aは、組み込みコマンドで指定されたデータベースサーバ100をクラスタに登録する。ここでは、データベースサーバ100aは、ハートビートメッセージによるデータベースサーバ100の生存確認を再開し、データベースサーバ100へのデータ同期を再開する。
【0141】
(S37)データベースサーバ100は、スタンバイ状態に遷移する。データベースサーバ100aがデータベースサーバ100に状態遷移を指示してもよい。
(S38)データベースサーバ100以外のデータベースサーバをデータ再配置対象として、上記のステップS30~S37が実行される。例えば、フェイルオーバコマンドによって、アクティブ状態のデータベースサーバが入れ替わる。
【0142】
図21は、レプリケーション制御の手順例を示すフローチャートである。
レプリケーション制御は、上記のステップS35に相当する。
(S40)レプリケーション制御部124は、論理番号テーブル135を参照して、存在するレコードの論理番号を確認する。レプリケーション制御部124は、論理番号を列挙したレプリケーションテーブル136を生成し、状態を「未送信」に初期化する。
【0143】
(S41)レプリケーション制御部124は、レプリケーションテーブル136から、状態が「未送信」の論理番号を小さいほうから1つ選択する。
(S42)レプリケーション制御部124は、レプリケーションテーブル136において、ステップS41で選択した論理番号の状態を「送信中」に変更する。
【0144】
(S43)レプリケーション制御部124は、論理番号テーブル135から、ステップS41で選択した論理番号に対応する物理アドレスを辿ってレコードにアクセスし、レコードのヘッダに含まれる分割フラグを確認する。
【0145】
(S44)レプリケーション制御部124は、ステップS43で確認した分割フラグがONであるか判断する。分割フラグがONの場合はステップS45に進み、分割フラグがOFFの場合はステップS46に進む。
【0146】
(S45)レプリケーション制御部124は、論理番号テーブル135の物理アドレスを辿ってヘッダを読み出す。更に、レプリケーション制御部124は、ヘッダに含まれる物理アドレスを辿ってボディを読み出す。レプリケーション制御部124は、ヘッダとボディを連結して一続きのレコードを再現する。そして、ステップS47に進む。
【0147】
(S46)レプリケーション制御部124は、論理番号テーブル135の物理アドレスを辿って、一続きのレコード全体を読み出す。
(S47)通信部126は、ステップS45またはステップS46のレコードを、クラスタに組み込まれるデータベースサーバに送信する。
【0148】
(S48)レプリケーション制御部124は、レプリケーションテーブル136において、ステップS41で選択した論理番号の状態を「送信済」に変更する。
(S49)レプリケーション制御部124は、レプリケーションテーブル136の全ての論理番号の状態が「送信済」になっているか判断する。全ての論理番号の状態が「送信済」である場合、レプリケーション制御が終了する。状態が「未送信」の論理番号が存在する場合、ステップS41に戻る。
【0149】
第2の実施の形態の情報処理システムによれば、複数のデータベースサーバを用いてデータベースが冗長化される。よって、データベースの耐故障性が向上する。また、レコードの再配置によって断片的空き領域が削減されて空き容量が回復する。よって、長時間無停止で稼働するオンラインシステムでも、断片化による容量不足を解消できる。また、複数のデータベースサーバに対して交代で、切り離し、初期化、レプリケーションおよび組み込みを行うことで、断片化の解消が実現される。よって、アクティブ状態のデータベースサーバによるクエリ実行の速度低下を抑制することができる。
【0150】
また、複数のデータベースサーバの空き容量が監視され、アクティブ状態のデータベースサーバの空き容量が小さく、スタンバイ状態のデータベースサーバの空き容量が大きくなるよう、アクティブ状態とスタンバイ状態とが切り替えられる。よって、アクティブ状態のデータベースサーバでコミットが成功した後、スタンバイ状態のデータベースサーバの容量不足によってデータ同期が失敗するリスクを低減できる。その結果、データの冗長性を維持することができる。また、レプリケーションでは、複数のレコードが論理番号の順にソートされると共に、分割されたレコードが連結される。よって、再配置が完了したデータベースサーバではレコード検索が高速化される。
【0151】
第1および第2の実施の形態を含む実施の形態に関し、更に以下の付記を開示する。
(付記1) 同一データを含む複数のデータベースそれぞれに対応付けて、前記同一データを記憶する記憶領域の断片化の状況に依存する空き容量を示す空き容量情報を記憶する記憶部と、
前記空き容量情報に基づいて、前記複数のデータベースの中から、第1のデータベースを運用系のデータベースに決定し、前記第1のデータベースよりも前記空き容量が大きい第2のデータベースを待機系のデータベースに決定し、
前記運用系のデータベースの更新を前記待機系のデータベースに反映させるデータ同期を停止させ、前記待機系のデータベースが初期化された後、前記運用系のデータベースのデータを前記待機系のデータベースにコピーさせ、前記データ同期を再開させる、ことを含むデータ再配置処理を、前記第2のデータベースに対して実行し、
前記複数のデータベースの中で、前記運用系のデータベースおよび前記待機系のデータベースを変更することで、前記第2のデータベース以外のデータベースに対して前記データ再配置処理が実行されるよう制御する処理部と、
を有する情報処理装置。
【0152】
(付記2) 前記複数のデータベースに対応する複数のノードの間で、正常に動作していることを示すハートビートメッセージが継続的に送信されており、前記ハートビートメッセージに前記空き容量情報を挿入することで、前記空き容量が監視される、
付記1記載の情報処理装置。
【0153】
(付記3) 前記第1のデータベースは、前記複数のデータベースのうち前記空き容量が最も小さいデータベースであり、前記第2のデータベースは、前記複数のデータベースのうち前記空き容量が最も大きいデータベースである、
付記1記載の情報処理装置。
【0154】
(付記4) 前記複数のデータベースは、前記空き容量が前記第1のデータベースよりも大きく前記第2のデータベースよりも小さい第3のデータベースを更に含み、
前記処理部は、前記第3のデータベースを前記待機系のデータベースと決定することで、前記第1のデータベースよりも優先的に、前記第3のデータベースに対して前記データ再配置処理が実行されるよう制御する、
付記3記載の情報処理装置。
【0155】
(付記5) 前記運用系のデータベースのデータは、複数のレコードを含み、
前記データ再配置処理では、前記運用系のデータベースにおいて不連続な記憶領域に分散して記憶された前記複数のレコードが、前記待機系のデータベースにおいて連続した記憶領域に記憶されるように、前記複数のレコードがコピーされる、
付記1記載の情報処理装置。
【0156】
(付記6) 前記処理部は、前記第1のデータベースの前記空き容量が閾値未満になった場合に、前記第2のデータベースに対する前記データ再配置処理を開始する、
付記1記載の情報処理装置。
【0157】
(付記7) 同一データを含む複数のデータベースのうちの第1のデータベースが配置されており、前記複数のデータベースそれぞれに対して、前記同一データを記憶する記憶領域の断片化の状況に依存する空き容量を監視する第1の情報処理装置と、
前記複数のデータベースのうちの第2のデータベースが配置された第2の情報処理装置とを有し、
前記第2のデータベースの前記空き容量が前記第1のデータベースよりも大きい場合、前記第1の情報処理装置は、前記第1のデータベースを運用系のデータベースに決定し、前記第2のデータベースを待機系のデータベースに決定し、
前記第1の情報処理装置は、前記運用系のデータベースの更新を前記待機系のデータベースに反映させるデータ同期を停止し、前記待機系のデータベースが初期化された後、前記運用系のデータベースのデータを前記待機系のデータベースにコピーし、前記データ同期を再開する、ことを含むデータ再配置処理を前記第2のデータベースに対して実行し、
前記複数のデータベースの中で、前記運用系のデータベースおよび前記待機系のデータベースを変更することで、前記第2の情報処理装置は、前記第1のデータベースに対して前記データ再配置処理を実行する、
情報処理システム。
【0158】
(付記8) 前記第1の情報処理装置と前記第2の情報処理装置との間で、正常に動作していることを示すハートビートメッセージが継続的に送信されており、前記ハートビートメッセージに前記空き容量の情報を挿入することで、前記空き容量が監視される、
付記7記載の情報処理システム。
【0159】
(付記9) 前記第1のデータベースが、前記複数のデータベースのうち前記空き容量が最も小さいデータベースであり、前記第2のデータベースが、前記複数のデータベースのうち前記空き容量が最も大きいデータベースである場合に、前記第1の情報処理装置は、前記第2のデータベースに対して前記データ再配置処理を実行する、
付記7記載の情報処理システム。
【0160】
(付記10) 前記空き容量が前記第1のデータベースよりも大きく前記第2のデータベースよりも小さい第3のデータベースが配置された第3の情報処理装置を更に有し、
前記第1の情報処理装置は、前記第2のデータベースに対する前記データ再配置処理の後、前記第1のデータベースに対する前記データ再配置処理よりも前に、前記第3のデータベースに対して前記データ再配置処理を実行する、
付記9記載の情報処理システム。
【0161】
(付記11) コンピュータに、
同一データを含む複数のデータベースそれぞれに対して、前記同一データを記憶する記憶領域の断片化の状況に依存する空き容量を監視し、
前記空き容量に基づいて、前記複数のデータベースの中から、第1のデータベースを運用系のデータベースに決定し、前記第1のデータベースよりも前記空き容量が大きい第2のデータベースを待機系のデータベースに決定し、
前記運用系のデータベースの更新を前記待機系のデータベースに反映させるデータ同期を停止させ、前記待機系のデータベースが初期化された後、前記運用系のデータベースのデータを前記待機系のデータベースにコピーさせ、前記データ同期を再開させる、ことを含むデータ再配置処理を、前記第2のデータベースに対して実行し、
前記複数のデータベースの中で、前記運用系のデータベースおよび前記待機系のデータベースを変更することで、前記第2のデータベース以外のデータベースに対して前記データ再配置処理が実行されるよう制御する、
処理を実行させるデータ再配置プログラム。
【0162】
(付記12) 前記複数のデータベースに対応する複数のノードの間で、正常に動作していることを示すハートビートメッセージが継続的に送信されており、前記ハートビートメッセージに前記空き容量の情報を挿入することで、前記空き容量が監視される、
付記11記載のデータ再配置プログラム。
【0163】
(付記13) 前記第1のデータベースは、前記複数のデータベースのうち前記空き容量が最も小さいデータベースであり、前記第2のデータベースは、前記複数のデータベースのうち前記空き容量が最も大きいデータベースである、
付記11記載のデータ再配置プログラム。
【0164】
(付記14) 前記複数のデータベースは、前記空き容量が前記第1のデータベースよりも大きく前記第2のデータベースよりも小さい第3のデータベースを更に含み、
前記データ再配置処理の制御では、前記第3のデータベースを前記待機系のデータベースと決定することで、前記第1のデータベースよりも優先的に、前記第3のデータベースに対して前記データ再配置処理が実行されるよう制御する、
付記13記載のデータ再配置プログラム。
【符号の説明】
【0165】
10 情報処理装置
11 記憶部
12 処理部
13,14 データベース
13a,14a 空き容量情報
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21