(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-28
(45)【発行日】2024-07-08
(54)【発明の名称】管理装置、データベースシステム、管理方法およびプログラム
(51)【国際特許分類】
G06F 16/23 20190101AFI20240701BHJP
【FI】
G06F16/23
(21)【出願番号】P 2023516012
(86)(22)【出願日】2021-04-23
(86)【国際出願番号】 JP2021016480
(87)【国際公開番号】W WO2022224451
(87)【国際公開日】2022-10-27
【審査請求日】2023-05-30
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(73)【特許権者】
【識別番号】301063496
【氏名又は名称】東芝デジタルソリューションズ株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】服部 雅一
【審査官】原 秀人
(56)【参考文献】
【文献】特開2006-106868(JP,A)
【文献】特開平06-214848(JP,A)
【文献】特開2018-085042(JP,A)
【文献】米国特許出願公開第2020/0364042(US,A1)
【文献】米国特許出願公開第2020/0175008(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
データ記憶装置に記憶されたデータ群を複数のページに分割して管理する管理装置であって、
前記データ群の世代を、時間経過に従って増加させる世代管理部と、
前記データ群に対してページ単位の変更処理であるページ操作を実行するページ処理部と、
前記複数のページのそれぞれについて、論理アドレスと、対応するページに対して確保された前記データ記憶装置における領域を示す物理アドレスと、対応するページに対して最後に前記ページ操作が実行された前記世代を示す最終実行世代とを対応付けるページテーブルを管理するテーブル管理部と、
前記世代毎に、前記論理アドレスと前記物理アドレスとの対応関係を示すデータログを含むデータログファイルを管理するデータログ管理部と、
前記世代毎に、対応する世代において実行された前記ページ操作の内容および実行順を示す操作ログを含む操作ログファイルを管理する操作ログ管理部と、
を備え、
前記テーブル管理部は、前記複数のページの何れかのページに対して前記ページ操作をした場合、前記ページテーブルにおける前記ページ操作をしたページに関するエントリを更新し、
前記ページ処理部は、
前記複数のページのうちの何れかの更新対象ページに対して、現世代において最初に、前記ページ操作のうちの一つである更新処理を実行する場合、前記データ記憶装置における空領域を前記更新対象ページのデータを記憶するために確保し、確保した空領域で前記更新対象ページを更新し、
前記更新対象ページにおける、前記論理アドレスと、前記現世代の開始時におけるデータの位置を示す前記物理アドレスとの対応関係を示す前記データログであるCPUNDOログを、前記現世代の前記データログファイルに追加し、
前記データログ管理部は、
前記複数のページのうちの直前世代において前記ページ操作が実行された直前操作ページについて、前記現世代の開始時におけるデータを、前記データ記憶装置における前記ページテーブルの前記物理アドレスに示された位置に書き出し、
前記直前操作ページにおける、前記論理アドレスと、前記現世代の開始時におけるデータを書き出した前記物理アドレスとの対応関係を示す前記データログであるCPREDOログを、前記現世代の前記データログファイルに追加する
管理装置。
【請求項2】
リカバリ処理部を備え、
前記リカバリ処理部は、
前記データ群に障害が発生した場合、前記データ群に障害が発生するより前の1または複数の世代の前記データログファイルを用いて、障害が発生する前における第1時点の前記ページテーブルを復元し、
前記第1時点におけるページテーブルと、前記第1時点における世代以後の1または複数の世代の前記操作ログファイルとを用いて、前記データ群を復元する
請求項1に記載の管理装置。
【請求項3】
前記ページ処理部は、
前記ページ操作のうちの一つである、前記複数のページに新規ページを挿入する挿入処理を実行する場合、前記データ記憶装置における空領域を前記新規ページのデータを記憶するために確保し、
前記新規ページにおける、前記論理アドレスと、データが存在しなかったことを表す前記物理アドレスとの対応関係を示す前記CPUNDOログを、前記現世代の前記データログファイルに追加する
請求項1または2に記載の管理装置。
【請求項4】
前記ページ処理部は、前記ページ操作のうちの一つである、前記複数のページのうちの何れかの削除対象ページを削除する削除処理を実行する場合、前記削除対象ページにおける、前記論理アドレスと前記物理アドレスとの対応関係を示す前記CPUNDOログを、前記現世代の前記データログファイルに追加する
請求項3に記載の管理装置。
【請求項5】
前記テーブル管理部は、前記複数のページの何れかのページに対して前記ページ操作を実行した場合、前記CPUNDOログを前記現世代の前記データログファイルに追加した後に、前記ページテーブルにおける前記ページ操作を実行したページに関するエントリを更新する
請求項4に記載の管理装置。
【請求項6】
前記データ記憶装置における空領域の前記物理アドレスのリストである空領域リストを管理する空領域管理部をさらに備え、
前記ページ処理部は、前記空領域リストから前記物理アドレスを取得して空領域を確保し、取得した前記物理アドレスを前記空領域リストから削除する
請求項5に記載の管理装置。
【請求項7】
前記データログ管理部は、前記複数のページのうちの、前記現世代を含む直近N個の世代(Nは、1以上の整数)において、前記更新処理または前記挿入処理が実行されていない未更新ページについて、前記現世代の開始時におけるデータを、前記データ記憶装置における前記ページテーブルの前記物理アドレスに示された位置に書き出し、
前記未更新ページにおける、前記論理アドレスと、前記現世代の開始時におけるデータを書き出した前記物理アドレスと対応関係を示す前記CPREDOログを、前記現世代の前記データログファイルに追加する
請求項6に記載の管理装置。
【請求項8】
前記データログ管理部は、前記直前世代の前記データログファイルに含まれる前記CPUNDOログに示される前記物理アドレスを、前記空領域リストに追加する
請求項7に記載の管理装置。
【請求項9】
前記データログ管理部は、前記複数のページに含まれる全ての前記直前操作ページおよび全ての前記未更新ページについて、前記現世代の前記データログファイルに前記CPREDOログを追加した後、前記データログの追加が正常に完了したことを示す前記データログである終了情報を前記直前世代の前記データログファイルに追加する
請求項8に記載の管理装置。
【請求項10】
前記データログ管理部は、前記終了情報を前記直前世代の前記データログファイルに追加した後、前記直近N個の世代より前の世代の前記データログファイルを削除する
請求項9に記載の管理装置。
【請求項11】
前記データ記憶装置に記憶されたデータ群のうちの全部または一部をバッファメモリに記憶させるバッファ管理部をさらに備え、
前記ページ処理部は、前記バッファメモリに記憶されたデータに対して前記ページ操作を実行する
請求項1から10の何れか1項に記載の管理装置。
【請求項12】
前記データログファイルを記憶する不揮発記憶装置であるデータログ記憶部と、
前記操作ログファイルを記憶する不揮発記憶装置である操作ログ記憶部と、
をさらに備える請求項1から11の何れか1項に記載の管理装置。
【請求項13】
データ群を記憶するデータ記憶装置と、
前記データ群を複数のページに分割して管理する管理装置と
を備え、
前記管理装置は、
前記データ群の世代を、時間経過に従って増加させる世代管理部と、
前記データ群に対してページ単位の変更処理であるページ操作を実行するページ処理部と、
前記複数のページのそれぞれについて、論理アドレスと、対応するページに対して確保された前記データ記憶装置における領域を示す物理アドレスと、対応するページに対して最後に前記ページ操作が実行された前記世代を示す最終実行世代とを対応付けるページテーブルを管理するテーブル管理部と、
前記世代毎に、前記論理アドレスと前記物理アドレスとの対応関係を示すデータログを含むデータログファイルを管理するデータログ管理部と、
前記世代毎に、対応する世代において実行された前記ページ操作の内容および実行順を示す操作ログを含む操作ログファイルを管理する操作ログ管理部と、
を備え、
前記テーブル管理部は、前記複数のページの何れかのページに対して前記ページ操作をした場合、前記ページテーブルにおける前記ページ操作をしたページに関するエントリを更新し、
前記ページ処理部は、
前記複数のページのうちの何れかの更新対象ページに対して、現世代において最初に、前記ページ操作のうちの一つである更新処理を実行する場合、前記データ記憶装置における空領域を前記更新対象ページのデータを記憶するために確保し、確保した空領域で前記更新対象ページを更新し、
前記更新対象ページにおける、前記論理アドレスと、前記現世代の開始時におけるデータの位置を示す前記物理アドレスとの対応関係を示す前記データログであるCPUNDOログを、前記現世代の前記データログファイルに追加し、
前記データログ管理部は、
前記複数のページのうちの直前世代において前記ページ操作が実行された直前操作ページについて、前記現世代の開始時におけるデータを、前記データ記憶装置における前記ページテーブルの前記物理アドレスに示された位置に書き出し、
前記直前操作ページにおける、前記論理アドレスと、前記現世代の開始時におけるデータを書き出した前記物理アドレスとの対応関係を示す前記データログであるCPREDOログを、前記現世代の前記データログファイルに追加する
データベースシステム。
【請求項14】
情報処理装置により、データ記憶装置に記憶されたデータ群を複数のページに分割して管理する管理方法であって、
前記データ群の世代を、時間経過に従って増加させる世代管理ステップと、
前記データ群に対してページ単位の変更処理であるページ操作を実行するページ処理ステップと、
前記複数のページのそれぞれについて、論理アドレスと、対応するページに対して確保された前記データ記憶装置における領域を示す物理アドレスと、対応するページに対して最後に前記ページ操作が実行された前記世代を示す最終実行世代とを対応付けるページテーブルを管理するテーブル管理ステップと、
前記世代毎に、前記論理アドレスと前記物理アドレスとの対応関係を示すデータログを含むデータログファイルを管理するデータログ管理ステップと、
前記世代毎に、対応する世代において実行された前記ページ操作の内容および実行順を示す操作ログを含む操作ログファイルを管理する操作ログ管理ステップと、
を含み、
前記テーブル管理ステップにおいて、前記情報処理装置は、前記複数のページの何れかのページに対して前記ページ操作をした場合、前記ページテーブルにおける前記ページ操作をしたページに関するエントリを更新し、
前記ページ処理ステップにおいて、前記情報処理装置は、
前記複数のページのうちの何れかの更新対象ページに対して、現世代において最初に、前記ページ操作のうちの一つである更新処理を実行する場合、前記データ記憶装置における空領域を前記更新対象ページのデータを記憶するために確保し、確保した空領域で前記更新対象ページを更新し、
前記更新対象ページにおける、前記論理アドレスと、前記現世代の開始時におけるデータの位置を示す前記物理アドレスとの対応関係を示す前記データログであるCPUNDOログを、前記現世代の前記データログファイルに追加し、
前記データログ管理ステップにおいて、前記情報処理装置は、
前記複数のページのうちの直前世代において前記ページ操作が実行された直前操作ページについて、前記現世代の開始時におけるデータを、前記データ記憶装置における前記ページテーブルの前記物理アドレスに示された位置に書き出し、
前記直前操作ページにおける、前記論理アドレスと、前記現世代の開始時におけるデータを書き出した前記物理アドレスとの対応関係を示す前記データログであるCPREDOログを、前記現世代の前記データログファイルに追加する
管理方法。
【請求項15】
情報処理装置を、データ記憶装置に記憶されたデータ群を複数のページに分割して管理する管理装置として機能させるためのプログラムであって、
前記情報処理装置を、
前記データ群の世代を、時間経過に従って増加させる世代管理部と、
前記データ群に対してページ単位の変更処理であるページ操作を実行するページ処理部と、
前記複数のページのそれぞれについて、論理アドレスと、対応するページに対して確保された前記データ記憶装置における領域を示す物理アドレスと、対応するページに対して最後に前記ページ操作が実行された前記世代を示す最終実行世代とを対応付けるページテーブルを管理するテーブル管理部と、
前記世代毎に、前記論理アドレスと前記物理アドレスとの対応関係を示すデータログを含むデータログファイルを管理するデータログ管理部と、
前記世代毎に、対応する世代において実行された前記ページ操作の内容および実行順を示す操作ログを含む操作ログファイルを管理する操作ログ管理部と、
して機能させ、
前記テーブル管理部は、前記複数のページの何れかのページに対して前記ページ操作をした場合、前記ページテーブルにおける前記ページ操作をしたページに関するエントリを更新し、
前記ページ処理部は、
前記複数のページのうちの何れかの更新対象ページに対して、現世代において最初に、前記ページ操作のうちの一つである更新処理を実行する場合、前記データ記憶装置における空領域を前記更新対象ページのデータを記憶するために確保し、確保した空領域で前記更新対象ページを更新し、
前記更新対象ページにおける、前記論理アドレスと、前記現世代の開始時におけるデータの位置を示す前記物理アドレスとの対応関係を示す前記データログであるCPUNDOログを、前記現世代の前記データログファイルに追加し、
前記データログ管理部は、
前記複数のページのうちの直前世代において前記ページ操作が実行された直前操作ページについて、前記現世代の開始時におけるデータを、前記データ記憶装置における前記ページテーブルの前記物理アドレスに示された位置に書き出し、
前記直前操作ページにおける、前記論理アドレスと、前記現世代の開始時におけるデータを書き出した前記物理アドレスとの対応関係を示す前記データログであるCPREDOログを、前記現世代の前記データログファイルに追加する
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、管理装置、データベースシステム、管理方法およびプログラムに関する。
【背景技術】
【0002】
様々なアプリケーション、サービス、機器から生み出されるデータの重要性は、日に日に高まっている。このため、これらから生み出される膨大なデータを管理するデータベースシステムの重要性も高まっている。
【0003】
データベースシステムは、ユーザ要求への応答性だけでなく、大規模データへの耐性および信頼性が重要である。このため、データベースシステムは、ハードウェアおよびネットワークによるシステム障害またはトランザクション障害等の障害が発生しても、データベースの論理的一貫性を保たなければならない。
【0004】
一般に、データベースシステムは、原子性、一貫性、分離性および持続性という4つの要件、すなわち、ACID(Atomicity, Isolation, Consistency, Durability)が要求される。データベースシステムは、トランザクション管理におけるコミット/ロールバックと、リカバリとを実行することによって、原子性、一貫性および持続性を保つ。
【0005】
データベースシステムは、例えば、In-Placeな更新を行うログ方式、または、In-Placeな更新を行わないシャドウページ方式により、リカバリを実現する。
【0006】
ログ方式を採用するデータベースシステムは、データを更新する場合に、更新前の状態をUNDOログとして、コミットで確定した状態をREDOログとしてログファイルに書き込む。そして、データベースシステムは、障害発生後に、コミット前の更新済みデータに対してUNDOログを使うことで更新前の状態に戻し、コミット後の未更新データに対してREDOログを使うことで確定状態にする。
【0007】
シャドウページ方式を採用するデータベースシステムは、ページを更新する前に、まずそのページのコピーを確保する。コピーされたページ、すなわち、シャドウページは、どのトランザクションからも参照されない。従って、データベースシステムは、シャドウページに対して更新をすることにより、一貫性の破壊などを考慮せずにデータの変更をすることができる。そして、データベースシステムは、データの変更が終わり、コミットされた状態になった時点で、アトミックに、変更前のページを参照している箇所の全てを新しいページを参照するように変更する。これにより、シャドウページ方式を採用するデータベースシステムは、一貫性の破壊を起こさずに、ページを更新することができる。例えば、データベースシステムは、論理ページと物理ページとの対応関係を示すページテーブルを2つ用いて、コミット時にテーブルをアトミックに切り替えることにより、変更前のページを参照している箇所の全てを新しいページを参照するようにアトミックに変更する。
【0008】
なお、ログ方式とシャドウページ方式とを比較した場合、実装の簡易さおよび障害復旧の高速性の点では、シャドウページ方式が優れているが、性能的にはログ方式が優れているといわれている。
【0009】
ところで、従来のシャドウページ方式の課題として、以下の3点を挙げることができる。
【0010】
(1)大きなサイズのページテーブルを必要とする。
例えば、特許文献1には、ページサイズを2KB、ページテーブルの1要素を4Bとした場合、1TBのデータベースでは、ページテーブルのために4GBのメモリが必要となることが記載されている。
【0011】
(2)ページ更新を繰り返すことからフラグメントを起こしやすい。
新たなページの確保が繰り返された場合、ページ同士の連続性が失われて記憶装置上においてフラグメントが起きる。従って、シャドウページ方式を採用したデータベースシステムは、ランダムなページの書き込みおよび読み出しが増える。従って、例えば、記憶装置がハードディスクドライブである場合、データベースシステムは、データアクセス速度が低下する。
【0012】
(3)コミットのコストが高く、同時実行との相性も悪い。
シャドウページ方式を採用したデータベースシステムは、コミット時に、ページバッファ上のデータを記憶装置に書き出すフラッシュ処理を実行するとともに、ページテーブルへの書き込みが必要となる。例えば、ページサイズを2KBおよびページテーブルの1要素を4Bとした1TBのデータベースを管理するデータベースシステムは、数GBオーダのページテーブルの書き込みが発生する。
【0013】
以上のような課題から、大規模なデータベースを管理するデータベースシステムは、シャドウページ方式を採用することは実用的ではないとされている。
【0014】
ところで、特許文献1には、シャドウページ方式におけるページテーブルに相当するマップテーブルのサイズを小さくすることができ、且つ、ファイルデータの断片化を防止できるファイルシステムが記載されている。
【0015】
特許文献1に記載されたファイルシステムは、ページテーブルを一時書き込み領域内のページへの書き込みにのみ適用することで、ページテーブルのサイズを削減している。また、特許文献1に記載されたファイルシステムは、一時書き込み領域内のページをファイル領域の元のページ位置に書き戻す処理により、ファイルデータのフラグメント防止している。また、特許文献1に記載されたファイルシステムは、一時書き込み領域内の有効ページのリストをページテーブルに書き込む。このように特許文献1に記載されたファイルシステムは、ページテーブルのサイズを小さくし、コミット時のコストを小さくしている。
【0016】
特許文献1に記載されたファイルシステムは、シャドウページ方式の課題を解決している。ただし、特許文献1に記載されたファイルシステムは、以下の3点の新たな課題も発生する。
【0017】
(4)付帯的な処理コストが増大する。
特許文献1に記載されたファイルシステムは、実更新処理と呼ばれる、一時書き込み領域内のページをファイル領域の元のページ位置に書き戻す処理が新たに加わっている。
【0018】
(5)ページアクセスでのオーバヘッドが生じる。
特許文献1に記載されたファイルシステムは、ページ更新のリストを保持するマップテーブルを参照するときのコストが大きい。特許文献1に記載されたファイルシステムは、マップというインデックスからページ更新の情報を引き出す必要がある。この情報の引き出し処理は、固定長の配列データを参照するよりもコストが大きい。
【0019】
(6)実装が複雑化する。
特許文献1に記載されたファイルシステムは、実更新処理など複雑な仕掛けを用意する必要がある。従って、特許文献1に記載されたファイルシステムは、シャドウページ方式と比較して実装が複雑となる。
【先行技術文献】
【特許文献】
【0020】
【非特許文献】
【0021】
【文献】ジム・グレイ、アンドレアス・ロイター著、喜連川 優 監訳、「トランザクション処理(概念と技法)」、下巻、13.5.1節 サイドファイル、日経BP社、2001 年10月20日、p.860-870
【発明の概要】
【発明が解決しようとする課題】
【0022】
一方、近年、ソフトウェア、ハードウェアおよびネットワーク等の技術進化により、従来は、速度または容量等の問題により扱うことができずに眠っていたデータが活用されるようになった。このため、それらの膨大なデータを蓄積して分析加工するビッグデータ活用の動きが高まっている。
【0023】
このような近年の技術進化を前提に、シャドウページ方式の課題を改めて評価する。
【0024】
まず、(2)の「ページ更新を繰り返すことからフラグメントを起こしやすい。」という課題を再評価する。
【0025】
情報処理装置は、主記憶メモリの大容量化が進み、数十GBから数TBまでのメモリを搭載することが当たり前となっている。このため、データベースシステムは、主記憶メモリの大容量化にともない、大きめのページサイズが設定されることが増えてきた。例えば、ビッグデータでのバッチ処理に特化したデータベースエンジンであるHadoopは、64MBまたは128MBといったページサイズ(ブロックサイズ)を設定することがデフォルトになっている。
【0026】
ページサイズが大きい場合、ランダムなページの書き込みおよび読み出しであっても、1回のページの書き込みまたは読み出しのデータ量が多くなる。この結果、データ転送時間が増大して、平均アクセス時間における平均待ち時間の割合が減少するので、相対的に記憶装置上のフラグメントによるデメリットは小さくなると考えられる。なお、記憶装置がハードディスクドライブである場合、平均アクセス時間は、下記のように表される。
【0027】
平均アクセス時間=平均待ち時間+データ転送時間
データ転送時間=平均シーク時間+平均回転待ち時間+データ転送時間
【0028】
次に、(1)の「大きなサイズのページテーブルを必要とする。」という課題を再評価する。
【0029】
ビッグデータ時代を迎えて、データベースシステムは、数PB級の巨大データベースを扱う必要が出てきた。シャドウページ方式で数PB級のデータベースを扱う場合、ページテーブルのサイズは数TB規模となる。従って、シャドウページ方式を採用したデータベースシステムは、ページテーブルのサイズを小さくする必要がある。
【0030】
最後に、(3)の「コミットのコストが高く、同時実行との相性も悪い。」という課題を再評価する。
【0031】
ページテーブルのサイズが肥大化した場合、コミット処理において、ページテーブルの全部を書き出す処理コストが大きくなる。また、コミット処理では、ページバッファ上のデータを記憶装置に書き出すフラッシュ処理を実行する。しかし、ページサイズが大きい場合、スループット性能の高い記憶装置であっても、コミット処理において処理時間が長くなってしまう。
【0032】
以上の再評価を踏まえた場合、大規模化されたデータベースを取り扱うためには、シャドウページ方式の良さである実装の簡易さを活かしつつ、シャドウページ方式の課題、特に(1)および(3)の課題を解決したデータベースシステムが必要である。
【0033】
本発明が解決しようとする課題は、更新をする場合に空領域に更新後のデータを書き込む方式を採用しつつ、ページテーブルのサイズを小さくすることができる管理装置、データベースシステム、管理方法およびプログラムを提供することにある。
【課題を解決するための手段】
【0034】
実施形態に係る管理装置は、データ記憶装置に記憶されたデータ群を複数のページに分割して管理する。前記管理装置は、世代管理部と、ページ処理部と、テーブル管理部と、データログ管理部と、操作ログ管理部と、を備える。前記世代管理部は、前記データ群の世代を、時間経過に従って増加させる。前記ページ処理部は、前記データ群に対してページ単位の変更処理であるページ操作を実行する。前記テーブル管理部は、前記複数のページのそれぞれについて、論理アドレスと、対応するページに対して確保された前記データ記憶装置における領域を示す物理アドレスと、対応するページに対して最後に前記ページ操作が実行された前記世代を示す最終実行世代とを対応付けるページテーブルを管理する。前記データログ管理部は、前記世代毎に、前記論理アドレスと前記物理アドレスとの対応関係を示すデータログを含むデータログファイルを管理する。前記操作ログ管理部は、前記世代毎に、対応する世代において実行された前記ページ操作の内容および実行順を示す操作ログを含む操作ログファイルを管理する。前記テーブル管理部は、前記複数のページの何れかのページに対して前記ページ操作をした場合、前記ページテーブルにおける前記ページ操作をしたページに関するエントリを更新する。前記ページ処理部は、前記複数のページのうちの何れかの更新対象ページに対して、現世代において最初に、前記ページ操作のうちの一つである更新処理を実行する場合、前記データ記憶装置における空領域を前記更新対象ページのデータを記憶するために確保し、確保した空領域で前記更新対象ページを更新する。前記ページ処理部は、前記更新対象ページにおける、前記論理アドレスと、前記現世代の開始時におけるデータの位置を示す前記物理アドレスとの対応関係を示す前記データログであるCPUNDOログを、前記現世代の前記データログファイルに追加する。前記データログ管理部は、前記複数のページのうちの直前世代において前記ページ操作が実行された直前操作ページについて、前記現世代の開始時におけるデータを、前記データ記憶装置における前記ページテーブルの前記物理アドレスに示された位置に書き出す。前記データログ管理部は、前記直前操作ページにおける、前記論理アドレスと、前記現世代の開始時におけるデータを書き出した前記物理アドレスとの対応関係を示す前記データログであるCPREDOログを、前記現世代の前記データログファイルに追加する。
【図面の簡単な説明】
【0035】
【
図1】
図1は、実施形態に係るデータベースシステムの構成を示す図である。
【
図2】
図2は、ページ処理部の機能構成を示す図である。
【
図3】
図3は、ページテーブル、空領域リストおよびデータ群の一例を示す図である。
【
図4】
図4は、データログファイルおよび操作ログファイルの一例を示す図である。
【
図5】
図5は、更新処理の流れを示すフローチャートである。
【
図6】
図6は、挿入処理の流れを示すフローチャートである。
【
図7】
図7は、削除処理の流れを示すフローチャートである。
【
図8】
図8は、管理装置の世代毎の処理の流れを示すフローチャートである。
【
図9】
図9は、チェックポイント開始処理の流れを示すフローチャートである。
【
図10】
図10は、部分チェックポイント処理の流れを示すフローチャートである。
【
図11】
図11は、チェックポイント終了処理の流れを示すフローチャートである。
【
図12】
図12は、リカバリ処理部によるリカバリ処理の流れを示すフローチャートである。
【
図13】
図13は、第1フェーズの処理の流れを示すフローチャートである。
【
図14】
図14は、第2フェーズの処理の流れを示すフローチャートである。
【
図15】
図15は、第3フェーズの処理の流れを示すフローチャートである。
【
図22】
図22は、障害が発生した場合のリカバリ処理の途中の状態の一例を示す図である。
【
図23】
図23は、障害が発生した場合のリカバリ処理の後の状態の一例を示す図である。
【
図24】
図24は、リカバリ処理に用いたファイルを示す図である。
【
図25】
図25は、実施形態に係る情報処理装置のハードウェア構成を示す図である。
【発明を実施するための形態】
【0036】
以下、図面を参照しながら実施形態に係るデータベースシステム10について説明する。
【0037】
図1は、実施形態に係るデータベースシステム10の構成を示す図である。
【0038】
データベースシステム10は、データ記憶装置20と、管理装置30とを備える。
【0039】
データ記憶装置20は、データベースを構成するデータ群を記憶する。データ記憶装置20は、不揮発記憶装置である。データ記憶装置20は、例えばハードディスクドライブであってもよいし、複数のハードディスクドライブを含む記憶システムであってもよい。また、データ記憶装置20は、複数の装置がインターフェースまたはネットワークを介して連携して動作する記憶システムであってもよい。
【0040】
管理装置30は、データ記憶装置20に記憶されたデータ群を、複数のページに分割して管理する。複数のページのそれぞれは、データ群を管理するための論理的なデータ単位であり、予め定められた固定長のデータである。管理装置30は、コンピュータ等の情報処理装置である。
【0041】
管理装置30は、クライアント装置からネットワークを介して要求を受け取る。管理装置30は、クライアント装置から受け取った要求に応じて、データ記憶装置20に記憶されたデータ群を読み出したり、データ群を変更したりする。管理装置30は、要求に応じた実行結果をクライアント装置にネットワークを介して返信する。
【0042】
管理装置30は、世代管理部32と、通信処理部34と、データ処理部36と、ページ処理部38と、バッファ管理部40と、テーブル管理部42と、空領域管理部44と、データログ記憶部46と、データログ管理部48と、操作ログ記憶部50と、操作ログ管理部52と、リカバリ処理部54とを備える。
【0043】
世代管理部32は、データ記憶装置20に記憶されたデータ群の世代を管理する。世代管理部32は、データ群の世代を時間経過に従って増加させる。例えば、世代管理部32は、一定時間毎、例えば1分毎、5分毎または10分毎等に、世代を増加させる。
【0044】
本実施形態において、世代管理部32は、データ群の世代を整数値で表される世代番号により管理する。本実施形態において、世代管理部32は、世代番号を予め設定された初期値(例えば1)から1ずつ増加させることにより、世代を更新する。
【0045】
通信処理部34は、クライアント装置からネットワークを介して要求を受け取る。通信処理部34は、受け取った要求をデータ処理部36に与える。通信処理部34は、データ処理部36から、要求に応じた処理を実行した実行結果を受け取る。そして、通信処理部34は、実行結果をクライアント装置にネットワークを介して返信する。
【0046】
データ処理部36は、クライアント装置からの要求を処理する。データ群がリレーショナルデータベースである場合、要求は、レコードの検索、レコードの更新、レコードの作成およびレコードの削除等である。レコードの実体データは、データ群における1または複数のページに格納される。データ処理部36は、要求に対する処理を実行するために、ページ処理部38を呼び出して、レコードの実体データが格納されている1または複数のページに対する参照処理またはページ操作をページ処理部38に実行させる。
【0047】
ページ処理部38は、データ処理部36からの要求に応じて、データ群に対して参照処理およびページ単位の変更処理であるページ操作を実行する。なお、ページ処理部38の処理については、
図2、
図5、
図6および
図7を参照してさらなる詳細を後述する。
【0048】
バッファ管理部40は、データ記憶装置20に記憶されているデータ群の全部またはデータ群の一部を読み出して、バッファメモリに記憶させる。ページ処理部38は、バッファメモリに記憶されたデータに対して参照処理およびページ操作を実行する。これにより、ページ処理部38は、データ記憶装置20に直接アクセスするよりも高速にデータにアクセスすることができる。バッファ管理部40は、LRU(Least Recently Used)等のリプレースメントアルゴリズムにより、バッファメモリに記憶させられないデータの退避処理、および、ページ処理部38の処理対象となるデータの読出処理を行う。
【0049】
テーブル管理部42は、ページテーブルを管理する。ページテーブルは、複数のページのそれぞれについて、論理アドレスと、対応するページに対して確保されたデータ記憶装置20における領域を示す物理アドレスと、対応するページに対して最後にページ操作が実行された世代を示す最終実行世代とを対応付ける。ページテーブルについては、
図3を参照してさらなる詳細を後述する。
【0050】
空領域管理部44は、空領域リストを管理する。空領域リストは、データ記憶装置20における空領域の物理アドレスのリストである。空領域リストについては、
図3を参照してさらなる詳細を後述する。
【0051】
データログ記憶部46は、データログファイルを世代毎に記憶する。データログ記憶部46は、不揮発記憶装置である。データログ管理部48は、データログ記憶部46に記憶されたデータログファイルを世代毎に管理する。データログファイルは、論理アドレスと物理アドレスとの対応関係を示すデータログを含む。データログファイルについては、
図4等を参照してさらなる詳細を後述する。
【0052】
操作ログ記憶部50は、操作ログファイルを世代毎に記憶する。操作ログ記憶部50は、不揮発記憶装置である。操作ログ管理部52は、操作ログ記憶部50に記憶された操作ログファイルを世代毎に管理する。操作ログファイルは、ページ操作の内容および実行順を示す操作ログを含む。操作ログファイルについては、
図4等を参照してさらなる詳細を後述する。
【0053】
リカバリ処理部54は、データ群に障害が発生した場合、ページテーブル、空領域リスト、および、現世代のデータログファイルを復元する。そして、リカバリ処理部54は、障害発生時において、障害発生時に近い時点のデータ群に含まれる複数のページのイメージを復元する。リカバリ処理部54の処理については、
図12~
図15を参照してさらなる詳細を後述する。
【0054】
図2は、ページ処理部38の機能構成を示す図である。
【0055】
ページ処理部38は、参照処理部62と、ページ操作部64とを有する。参照処理部62は、データ処理部36からの呼び出しに応じて、データ群に対して参照処理を実行する。例えば、参照処理部62は、データ処理部36により指定された論理アドレスのページのデータをバッファ管理部40により管理されるバッファメモリから読み出して、データ処理部36に返す。
【0056】
ページ操作部64は、データ群に対してページ単位の変更処理であるページ操作を実行する。ページ操作部64は、更新処理部66と、挿入処理部68と、削除処理部70とを含む。
【0057】
更新処理部66は、データ処理部36からの呼び出しに応じて、ページ操作のうちの一つである更新処理を実行する。更新処理部66は、更新処理において、複数のページのうちの何れかの更新対象ページのデータを更新する。より詳しくは、更新処理部66は、更新対象ページに対して、バッファ管理部40により管理されるバッファメモリ上においてデータを更新する。また、更新処理において、更新処理部66は、更新対象ページについて現世代において最初に更新処理を実行する場合には、データ記憶装置20における空領域を更新対象ページのデータを記憶させるために確保し、確保した空領域に更新前のデータをコピーし、確保した空領域上においてコピーしたデータに対して更新処理を実行する。さらに、更新処理部66は、更新対象ページについて現世代において最初に更新処理を実行する場合には、現世代のデータログファイルにデータログを追加し、ページテーブルにおける更新対象ページのエントリを変更する。なお、更新処理については、
図5のフローチャートを参照してさらに説明する。
【0058】
挿入処理部68は、データ処理部36からの呼び出しに応じて、ページ操作のうちの一つである挿入処理を実行する。挿入処理部68は、挿入処理において、複数のページに新規ページを挿入する。より詳しくは、挿入処理部68は、データ記憶装置20における空領域を新規ページのデータを記憶させるために確保し、現世代のデータログファイルにデータログを追加し、ページテーブルにおける新規ページのエントリを変更する。挿入処理については、
図6のフローチャートを参照してさらに説明する。
【0059】
削除処理部70は、データ処理部36からの呼び出しに応じて、ページ操作のうちの一つである削除処理を実行する。削除処理部70は、削除処理において、複数のページのうちの何れかの削除対象ページを削除する。より詳しくは、削除処理部70は、現世代のデータログファイルにデータログを追加し、ページテーブルにおける削除対象ページのエントリを変更する。削除処理については、
図7のフローチャートを参照してさらに説明する。
【0060】
図3は、ページテーブル、空領域リストおよびデータ群の一例を示す図である。
【0061】
テーブル管理部42は、ページテーブルを管理する。データ群は、複数のページに分割して管理される。ページは、予め定められたデータ長のデータである。ページは、例えば1MBまたは4MB等のデータ長である。
【0062】
複数のページのそれぞれは、ユニークな論理アドレスが割り当てられる。複数のページのそれぞれのデータは、データ記憶装置20における、対応するページに対して確保された領域に記録される。
【0063】
ページテーブルは、複数のページのそれぞれについて、論理アドレスと、物理アドレスと、最終実行世代とを対応付ける。物理アドレスは、対応するページに対して確保された、データ記憶装置20における領域の位置を示す。本実施形態においては、物理アドレスは、基準位置からのオフセット量により表される。ページのデータが予め定められたデータ長であるので、オフセットは、整数により表されてもよい。この場合、管理装置30は、物理アドレス(オフセット)に対して、予め定められたデータ長を乗じたバイト数分、基準位置からシークすることにより、データ記憶装置20における対応する領域にアクセスすることができる。
【0064】
ページは、挿入処理により生成され、更新処理によりデータが変更され、削除処理により削除される。最終実行世代は、対応するページに対して最後にページ操作が実行された世代を示す。最終実行世代は、対応するページが最後にページ操作された時点の世代を表す。
【0065】
なお、ページテーブルは、未使用ページについても管理する。ページテーブルは、未使用ページの物理アドレスとして、対応するページが使用されていないことを示す値(例えば、-1)を格納する。
【0066】
テーブル管理部42は、1つのページテーブルのみしか管理しない。従って、テーブル管理部42は、ページテーブルを2個管理しなければならないシャドウページ方式と比較して、ページテーブルのサイズを小さくすることができる。
【0067】
空領域管理部44は、空領域リストを管理する。空領域リストは、データ記憶装置20における空領域の物理アドレスのリストである。空領域は、データ記憶装置20における、複数のページの何れに対しても確保されていない領域である。
【0068】
例えば、空領域管理部44は、空領域の物理アドレスをキューに格納して管理する。空領域管理部44は、データログ管理部48から空領域の物理アドレスを受け取ってキューに格納する。また、空領域管理部44は、ページ処理部38からの要求に応じて、空領域の物理アドレスをキューから取り出してページ処理部38に渡すとともに、取り出した物理アドレスをキューから削除する。
【0069】
図4は、データログファイルおよび操作ログファイルの一例を示す図である。
【0070】
操作ログ管理部52は、ページ処理部38がページ操作を実行する毎に、操作ログ記憶部50に記憶されている現世代の操作ログファイルに、ページ操作の内容および実行順を示す操作ログを追加する。
【0071】
例えば、ページ処理部38が更新処理、挿入処理または削除処理を実行した場合、操作ログ管理部52は、現世代の操作ログファイルに、実行した処理の内容、実行したページの論理アドレス、物理アドレスおよび実行順序を示す操作ログを追加する。これにより、管理装置30は、所定世代の開始時のデータ群のデータイメージに対して、所定世代の操作ログファイルに含まれる操作ログに示された1又は複数のページ操作を、実行順に従って再実行することにより、所定世代の終了時のデータ群のデータイメージを復元することができる。なお、世代は、世代管理部32により管理される。操作ログ管理部52は、世代管理部32により世代が増加された場合、新たな世代の操作ログファイルを生成し、操作ログを追加する対象の操作ログファイルを変更する。
【0072】
データログ管理部48は、データログ記憶部46に記憶されている、論理アドレスと物理アドレスとの対応関係を示すデータログを含むデータログファイルを、世代毎に管理する。
【0073】
データログは、CPUNDOログと、CPREDOログと、終了情報(EOL:End Of Log)とが存在する。CPUNDOログおよびCPREDOログは、タイプを識別するためのログタイプ情報と、論理アドレスと、物理アドレスとを含む。
【0074】
CPUNDOログは、ページ処理部38によりデータログファイルに追加される。CPUNDOログは、データログファイルの世代においてページ操作が実行されたページについての、論理アドレスと物理アドレスとの対応関係を示す。更新処理がされた場合、CPUNDOログに含まれる物理アドレスは、対応するページの、データログファイルの世代の開始時におけるデータの位置を示す。また、挿入処理がされた場合、CPUNDOログに含まれる物理アドレスは、データが存在しなかったことを表す値とされる。また、削除処理がされた場合、CPUNDOログに含まれる物理アドレスは、削除対象ページにおける位置を示す。
【0075】
CPREDOログは、データログ管理部48によりデータログファイルに追加される。CPREDOログは、データログファイルの世代の直前世代においてページ操作(更新処理または挿入処理)が実行された直前操作ページについて、論理アドレスと、データログファイルの世代の開始時におけるデータの位置を示す物理アドレスとの対応関係を示す。または、CPREDOログは、データログファイルの世代を含む直近N個の世代(Nは1以上の整数)より前の世代から更新処理または挿入処理がされていない未更新ページについて、論理アドレスと、データログファイルの世代の開始時におけるデータの位置を示す物理アドレスとの対応関係を示す。なお、直前世代において削除操作されたページについてのCPREDOログは、データログファイルの世代の開始時において既にデータが存在しないので、生成されない。
【0076】
終了情報(EOL)は、データログ管理部48によりデータログファイルに追加される。終了情報は、データログファイルの世代の複数のページに含まれる全ての直前操作ページおよび全ての未更新ページについて、データログが正常に追加されたことを示す。
【0077】
図5は、更新処理の流れを示すフローチャートである。ページ処理部38は、更新処理を実行する場合、
図5に示す流れで処理を実行する。なお、現世代の世代番号をn(nは、1以上の整数)とする。
【0078】
まず、S11において、ページ処理部38は、ページテーブルの更新対象ページ(論理アドレス=p)のエントリを参照して、更新対象ページの物理アドレス(r)および最終実行世代(m)を取得する。
【0079】
続いて、S12において、ページ処理部38は、更新対象ページに対して現世代で最初に更新処理を実行するか否かを判断する。例えば、ページ処理部38は、m<nを満たすか否かを判断する。更新対象ページに対して現世代において既に更新処理が実行されている場合、つまり、今回の更新処理が現世代において2回目以降の更新処理の場合、最終実行世代(m)は、現世代(n)となっている。しかし、更新対象ページに対して現世代で最初に更新処理を実行する場合、最終実行世代(m)は、現世代(n)より小さくなっている。
【0080】
更新対象ページに対して現世代において最初に更新処理を実行すると判断した場合、例えばmがnより小さい場合(S12のYes)、ページ処理部38は、処理をS13に進める。
【0081】
S13において、ページ処理部38は、空領域リストから空領域の物理アドレス(r´)を取得する。そして、ページ処理部38は、取得した空領域(物理アドレス(r´))を、更新対象ページのデータを記憶するための領域として確保する。さらに、ページ処理部38は、取得した空領域の物理アドレス(r´)を空領域リストから削除する。
【0082】
続いて、S14において、ページ処理部38は、更新対象ページの物理アドレス(r)のデータを、空領域の物理アドレス(r´)にコピーする。続いて、S15において、ページ処理部38は、空領域の物理アドレス(r´)にコピーされたデータに対して更新処理を実行する。これにより、ページ処理部38は、更新対象ページにおける更新前のデータを元の物理アドレス(r)に残しながら、新たな物理アドレス(r´)上で更新処理を実行することができる。なお、バッファ管理部40は、ページ操作の対象となるページのデータをデータ記憶装置20から読み出してバッファメモリ上に記憶させる。そして、ページ処理部38は、ページ操作をバッファメモリ上において更新する。従って、ページ処理部38は、S14およびS15の処理をバッファメモリ上において実行する。
【0083】
続いて、S16において、ページ処理部38は、現世代のデータログファイル(第n世代のデータログファイル)に、更新対象ページの論理アドレス(p)と、更新対象ページにおける現世代の開始時におけるデータの位置を示す物理アドレス(r)との対応関係を示すCPUNDOログ(p,r)を追加する。
【0084】
続いて、S17において、ページ処理部38は、テーブル管理部42に対して、ページテーブルの更新対象ページのエントリを更新する指示を与える。具体的には、ページ処理部38は、論理アドレス(p)に対応するエントリの物理アドレスをr´に変更させ、論理アドレス(p)に対応するエントリの最終実行世代をnに変更させる。そして、ページ処理部38は、S17の処理を完了すると、本フローを終了する。
【0085】
一方、S12において、更新対象ページに対して現世代において2回目以降の更新処理を実行すると判断した場合、例えばmがnより小さくない場合(S12のNo)、ページ処理部38は、処理をS18に進める。
【0086】
S18において、ページ処理部38は、更新対象ページの現在の物理アドレス(r)上においてデータを更新する。この場合、ページ処理部38は、更新対象ページのデータの更新処理をバッファメモリ上において実行する。そして、ページ処理部38は、S18を完了すると本フローを終了する。
【0087】
なお、S18で更新処理を実行した場合、ページ処理部38は、更新対象ページの物理アドレス(r)および最終実行世代(m)を変更しない。これにより、ページ処理部38は、現世代において2回目以降の更新処理を実行する場合、更新対象ページに対する処理を高速に実行することができる。
【0088】
以上のように、ページ処理部38は、複数のページのうちの何れかの更新対象ページに対して現世代において最初に更新処理を実行する場合、データ記憶装置20における空領域を更新対象ページのデータを記憶するための領域として確保し、確保した空領域で更新対象ページを更新する。これにより、ページ処理部38は、更新対象ページにおける更新前のデータを元の位置に残しつつ、別の空領域においてデータを更新することができる。従って、ページ処理部38は、どのトランザクションからも参照されない空領域上でデータを更新することができる。この結果、ページ処理部38は、一貫性の破壊などを考慮せずに、更新対象ページのデータを変更することができる。
【0089】
また、ページ処理部38は、更新対象ページに対して現世代において最初に更新処理を実行する場合、更新後のデータを空領域に記憶させるので、更新前のデータ(すなわち、現世代の開始時における更新対象ページのデータ)を、元の位置(更新前の物理アドレス(r))上に残すことができる。そして、ページ処理部38は、更新対象ページにおける、論理アドレスと、現世代の開始時におけるデータの位置を示す物理アドレスとの対応関係を示すデータログであるCPUNDOログを、現世代のデータログファイルに追加する。これにより、ページ処理部38は、現世代よりも後において障害が発生した場合、現世代における更新対象ページの更新前のデータを、すなわち、現世代の開始時における更新対象ページのデータを、現世代のデータログファイルおよびデータ記憶装置20に残されたデータに基づき、復元させることができる。
【0090】
さらに、テーブル管理部42は、更新対象ページに対して現世代において最初に更新処理を実行する場合、CPUNDOログを現世代のデータログファイルに追加した後に、ページテーブルにおける更新処理を実行したページに関するエントリを更新する。これにより、テーブル管理部42は、更新対象ページの変更が完了し、データが確定した状態においてページテーブルを変更することができる。従って、テーブル管理部42は、一貫性を保ったテーブル管理を1つのページテーブルのみで実現することができる。
【0091】
また、さらに、更新対象ページに対して現世代において2回目以降の更新処理を実行する場合、ページ処理部38は、物理アドレスを変更せずに同一の位置で、空領域を確保せずにデータを更新する。これにより、ページ処理部38は、複数のページのそれぞれについて、空領域の確保処理を世代毎に最大で1回とすることができるので、データを復元させるために費やす記憶容量および処理コストを少なくすることができる。
【0092】
さらに、ページ処理部38は、更新対象ページに対して現世代において最初に更新処理を実行する場合、空領域リストから物理アドレスを取得して空領域を確保し、取得した物理アドレスを空領域リストから削除する。ページ処理部38は、キュー等により実現される空領域リストに対するアクセスにより空領域の検出をすることができるので、更新処理を実行するための空領域の確保の処理コストを小さくすることができる。
【0093】
図6は、挿入処理の流れを示すフローチャートである。ページ処理部38は、挿入処理を実行する場合、
図6に示す流れで処理を実行する。
【0094】
まず、S21において、ページ処理部38は、ページテーブルを参照して、未使用のページ(論理アドレス=p)の論理アドレスを検出し、検出した未使用ページを新規ページとして確保する。
【0095】
S22において、ページ処理部38は、空領域リストから空領域の物理アドレス(r´)を取得する。そして、ページ処理部38は、取得した空領域(物理アドレス(r´))を、新規ページのデータを記憶するための領域として確保する。さらに、ページ処理部38は、取得した空領域の物理アドレス(r´)を空領域リストから削除する。
【0096】
続いて、S23において、ページ処理部38は、現世代のデータログファイル(第n世代のデータログファイル)に、新規ページの論理アドレス(p)と、データが存在しなかったことを表す物理アドレス(-1)との対応関係を示すCPUNDOログ(p,-1)を追加する。データが存在しなかったことを表す物理アドレスは、例えば、データ記憶装置20に実際には存在しない位置等を表す値である。本実施形態において、ページ処理部38は、データが存在しなかったことを表す物理アドレスとして、-1をCPUNDOログに含める。
【0097】
続いて、S24において、ページ処理部38は、テーブル管理部42に対して、ページテーブルの新規ページのエントリを更新する指示を与える。具体的には、ページ処理部38は、論理アドレス(p)に対応するエントリの物理アドレスをr´に変更させ、論理アドレス(p)に対応するエントリの最終実行世代をnに変更させる。そして、ページ処理部38は、S24の処理を完了すると、本フローを終了する。
【0098】
以上のように、ページ処理部38は、複数のページに新規ページを挿入する挿入処理を実行する場合、データ記憶装置20における空領域を新規ページのデータを記憶するために確保する。これにより、ページ処理部38は、空領域に新規ページのデータを記憶させることができる。従って、ページ処理部38は、一貫性の破壊などを考慮せずに、複数のページに新規ページを追加することができる。
【0099】
また、ページ処理部38は、新規ページにおける、論理アドレスと、データ記憶装置20にデータが記憶されていなかったことを表す物理アドレスとの対応関係を示すデータログであるCPUNDOログを、現世代のデータログファイルに追加する。これにより、ページ処理部38は、現世代よりも後において障害が発生した場合であっても、現世代のデータログファイルに基づき、新規ページを復元させることができる。
【0100】
また、テーブル管理部42は、挿入処理を実行する場合、CPUNDOログを現世代のデータログファイルに追加した後に、ページテーブルにおける挿入処理を実行したページに関するエントリを更新する。これにより、テーブル管理部42は、新規ページの挿入が完了した状態においてページテーブルを変更することができる。従って、テーブル管理部42は、一貫性を保ったテーブル管理を1つのページテーブルのみで実現することができる。
【0101】
また、ページ処理部38は、挿入処理を実行する場合、空領域リストから物理アドレスを取得して空領域を確保し、取得した物理アドレスを空領域リストから削除する。ページ処理部38は、キュー等により実現される空領域リストに対するアクセスにより空領域の検出をすることができるので、更新処理を実行するための空領域の確保の処理コストを小さくすることができる。
【0102】
図7は、削除処理の流れを示すフローチャートである。ページ処理部38は、削除処理を実行する場合、
図7に示す流れで処理を実行する。
【0103】
まず、S31において、ページ処理部38は、ページテーブルの削除対象ページ(論理アドレス=p)のエントリを参照して、削除対象ページの物理アドレスを取得する。
【0104】
続いて、S32において、ページ処理部38は、現世代のデータログファイル(第n世代のデータログファイル)に、削除対象ページの論理アドレス(p)と、削除対象ページが記憶されていたデータ記憶装置20における位置を示す物理アドレス(r)との対応関係を示すCPUNDOログ(p,r)を追加する。
【0105】
続いて、S33において、ページ処理部38は、テーブル管理部42に対して、ページテーブルの削除対象ページのエントリを更新する指示を与える。具体的には、ページ処理部38は、論理アドレス(p)に対応するエントリの物理アドレスを、未使用ページであることを示す値(例えば-1)に変更させ、論理アドレス(p)に対応するエントリの世代番号をnに変更させる。そして、ページ処理部38は、S33の処理を完了すると、本フローを終了する。
【0106】
以上のように、ページ処理部38は、複数のページのうちの何れか1つの削除対象ページを削除する削除処理を実行する場合、削除対象ページにおける、論理アドレスと、削除対象ページのデータが記憶されていた位置を示す物理アドレスとの対応関係を示すデータログであるCPUNDOログを、現世代のデータログファイルに追加する。
【0107】
また、テーブル管理部42は、複数のページに削除対象ページを削除する削除処理を実行した場合、CPUNDOログを現世代のデータログファイルに追加した後に、ページテーブルにおける削除処理を実行したページに関するエントリを更新する。これにより、テーブル管理部42は、削除対象ページの削除が完了した状態においてページテーブルを変更することができる。従って、テーブル管理部42は、一貫性を保ったテーブル管理を1つのページテーブルのみで実現することができる。
【0108】
図8は、管理装置30による世代毎の処理の流れを示すフローチャートである。管理装置30は、世代毎に、S42のチェックポイント開始処理、S43の部分チェックポイント処理およびS43のチェックポイント終了処理を繰り返す(S41とS45との間のループ処理)。各世代の処理において、管理装置30は、S42→S43→S44の順で処理を実行する。
【0109】
図9は、チェックポイント開始処理(S42)の流れを示すフローチャートである。チェックポイント開始処理(S42)において、世代管理部32は、S51の処理を実行する。S51において、世代管理部32は、現世代を表す世代番号(n)を1増加させる。なお、世代管理部32は、動作開始時において、現世代を表す世代番号(n)を、所定の値、例えば1に設定する。
【0110】
図10は、部分チェックポイント処理(S43)の流れを示すフローチャートである。部分チェックポイント処理(S43)において、データログ管理部48は、S61~S68の処理を実行する。
【0111】
まず、S61において、データログ管理部48は、ページテーブルを参照して、複数のページの全てを走査したか否かを判断する。全てのページを走査した場合(S61のYes)、データログ管理部48は、本フローを終了する。未だ全てのページを走査していない場合(S61のNo)、データログ管理部48は、処理をS62に進める。
【0112】
S62において、データログ管理部48は、ページテーブルを参照して、複数のページの中の未走査の1つのページを特定する。なお、複数のページは、未使用ページを含まない。すなわち、データログ管理部48は、未使用ページを選択しない。
【0113】
続いて、S63において、データログ管理部48は、ページテーブルにおける特定したページ(論理アドレス=p)のエントリを参照して、物理アドレス(r)および最終実行世代(m)を取得する。
【0114】
続いて、S64において、データログ管理部48は、特定したページが直前世代にページ操作が実行されたか否かを判断する。例えば、データログ管理部48は、m=n-1であるか否かを判断する。なお、削除処理がされたページは、ページテーブルにおいて未使用ページとなる。従って、特定したページがページ操作されている場合には、ページ操作の内容は、更新処理または挿入処理となる。
【0115】
特定したページが直前世代にページ操作が実行された場合(S64のYes)、データログ管理部48は、処理をS65に進める。特定したページが直前世代にページ操作が実行されていない場合(S64のNo)、データログ管理部48は、処理をS67に進める。
【0116】
S65において、データログ管理部48は、バッファメモリ上における特定したページ(論理アドレス(p))のデータを、データ記憶装置20における特定したページの物理アドレス(r)に書き出す。すなわち、データログ管理部48は、バッファ管理部40に、物理アドレス(r)のデータをデータ記憶装置20へと書き出すフラッシュ処理を実行させる。これにより、データログ管理部48は、前世代においてページ操作(更新処理または挿入処理)がされたページのデータを不揮発記憶装置へと記憶させ、障害発生時においてもデータを復元可能とすることができる。
【0117】
続いて、S66において、データログ管理部48は、現世代のデータログファイル(第n世代のデータログファイル)に、特定したページの論理アドレス(p)と、特定したページにおける現世代の開始時におけるデータの位置を示す物理アドレス(r)との対応関係を示すCPUNDOログ(p,r)を追加する。そして、S66の処理を終えると、データログ管理部48は、処理をS61に戻し、S61から処理を繰り返す。
【0118】
S67において、データログ管理部48は、最終実行世代が、現世代より前か否かを判断する。例えば、データログ管理部48は、m<n-1を満たすか否かを判断する。特定したページの最終実行世代が現世代より前である場合(S67のYes)、データログ管理部48は、処理をS68に進める。特定したページの最終実行世代が現世代より前ではない場合、すなわち、特定したページが現世代において既にページ操作が実行されている場合(S67のNo)、データログ管理部48は、処理をS61に戻し、S61から処理を繰り返す。
【0119】
S68において、データログ管理部48は、現世代が、特定したページを強制的にフラッシュ処理する世代であるかを判断する。データログ管理部48は、複数のページのそれぞれのデータを、N個の世代毎に、強制的にデータ記憶装置20に書き出すフラッシュ処理を実行する。フラッシュ処理をする世代は、複数のページのそれぞれ毎に設定されている。例えば、複数のページのそれぞれは、論理アドレス(p)をNで除算した場合の剰余(p%N)と、現世代を表す世代番号(n)をNで除算した場合の剰余(n%N)とが一致する世代において、フラッシュ処理がされる。
【0120】
現世代が、特定したページを強制的にフラッシュ処理する世代である場合(S68のYes)、データログ管理部48は、処理をS65に進める。これにより、データログ管理部48は、特定したページのデータをデータ記憶装置20へと書き出すフラッシュ処理を実行するとともに、特定したページにおける現世代の開始時におけるデータの位置を示す物理アドレス(r)との対応関係を示すCPUNDOログ(p,r)を現世代のデータログファイル(第n世代のデータログファイル)に追加することができる。
【0121】
現世代が、特定したページを強制的にフラッシュ処理する世代ではない場合(S68のNo)、データログ管理部48は、処理をS61に戻し、S61から処理を繰り返す。
【0122】
なお、S68において、データログ管理部48は、複数のページの全てのデータが、現世代を含む直近N個の世代のうちの少なくとも1つの世代においてデータ記憶装置20に書き出されるように、フラッシュ処理するページを選択すればよい。従って、例えば、S68において、データログ管理部48は、特定したページが、直近N個の世代において更新処理または挿入処理がされていない未更新ページであるか否かを判断してもよい。そして、データログ管理部48は、特定したページが未更新ページである場合、処理をS65に進める。そして、特定したページが未更新ページである場合、データログ管理部48は、未更新ページにおける現世代の開始時におけるデータを、データ記憶装置20におけるページテーブルの物理アドレスに示された位置に書き出すフラッシュ処理を実行する。さらに、データログ管理部48は、特定したページが未更新ページである場合、未更新ページにおける、論理アドレスと、現世代の開始時におけるデータを書き出した物理アドレスと対応関係を示すCPREDOログを、現世代のデータログファイルに追加する。
【0123】
以上のように、データログ管理部48は、複数のページのうちの直前世代においてページ操作(更新処理または挿入処理)が実行された直前操作ページについて、現世代の開始時におけるデータを、データ記憶装置20におけるページテーブルの物理アドレスに示された位置に書き出す。そして、データログ管理部48は、直前操作ページにおける、論理アドレスと、現世代の開始時におけるデータを書き出した物理アドレスとの対応関係を示すデータログであるCPREDOログを、現世代のデータログファイルに追加する。
【0124】
これにより、現世代よりも後において障害が発生した場合であっても、データログ管理部48は、現世代における直前操作ページのデータを、現世代のデータログファイルおよびデータ記憶装置20に残されたデータに基づき、復元させることができる。
【0125】
なお、直前世代よりも前においてページ操作がされ、および、直前世代においてページ操作がされていないページは、現世代のデータログファイルにはCPREDOログが含まれない。しかし、このようなページは、少なくともページ操作がされた次の世代のデータログファイルにCPREDOログファイルが含まれる。すなわち、データログ管理部48は、ページ操作がされたページについて、ページ操作がされた次の世代のデータログファイルにCPREDOログを含める。これにより、現世代よりも後において障害が発生した場合、データログ管理部48は、ページ操作がされたページにおける現世代のデータを、現世代を含む過去の複数の世代のデータログファイルおよびデータ記憶装置20に残されたデータに基づき、復元させることができる。
【0126】
また、データログ管理部48は、直前世代においてページ操作がされたページについて、CPREDOログを現世代のデータログファイルに追加し、直前世代においてページ操作がされなかったページについてはCPREDOログを現世代のデータログファイルに追加しない。これにより、データログ管理部48は、現世代のデータログファイルに追加するCPREDOログを少なくすることができるので、データログファイルのデータ容量を少なくすることができるとともに、データログファイルへデータを追加するための処理コストを小さくすることができる。
【0127】
また、本実施形態においては、データログ管理部48は、現世代を含む直近N個の世代において、更新処理または挿入処理が実行されていない未更新ページについて、現世代の開始時におけるデータを、データ記憶装置20におけるページテーブルの物理アドレスに示された位置に書き出す。そして、データログ管理部48は、未更新ページにおける、論理アドレスと、現世代の開始時におけるデータを書き出した物理アドレスと対応関係を示すCPREDOログを、現世代のデータログファイルに追加する。
【0128】
これにより、現世代よりも後において障害が発生した場合であっても、データログ管理部48は、直近N個の世代のデータログファイルおよびデータ記憶装置20に残されたデータに基づき、複数のページの全てについて現世代におけるデータを復元させることができる。また、複数のページの全てについて、現世代の開始時におけるデータの物理アドレスが直近N個の世代のデータログファイルの何れかに示されているので、データログ管理部48は、直近N個の世代よりも前の世代のデータログファイルを削除することができる。
【0129】
なお、Nは、1以上の任意の整数であり、管理者等により設定される。Nを大きくした場合、データログファイルの個数が多くなる。しかし、Nを大きくした場合、それぞれのデータログファイルに含まれるデータログの個数を平均的に少なくすることができる。
【0130】
図11は、チェックポイント終了処理(S44)の流れを示すフローチャートである。チェックポイント終了処理(S44)において、データログ管理部48は、S71~S77の処理を実行する。
【0131】
まず、S71において、データログ管理部48は、直前世代(n-1)のデータログファイルを選択する。
【0132】
続いて、S72において、データログ管理部48は、直前世代のデータログファイルに含まれる全てのデータログを走査したか否かを判断する。直前世代のデータログファイルに含まれる全てのデータログを走査した場合(S72のYes)、データログ管理部48は、処理をS76に進める。未だ全てのデータログを走査していない場合(S72のNo)、データログ管理部48は、処理をS73に進める。
【0133】
S73において、データログ管理部48は、直前世代(n-1)のデータログファイルを参照して、未走査の1つのデータログを特定する。S74において、データログ管理部48は、特定したデータログがCPUNDOログであるか否かを判断する。CPUNDOログではない場合(S74のNo)、データログ管理部48は、処理をS72に戻す。CPUNDOログである場合(S74のYes)、データログ管理部48は、処理をS75に進める。
【0134】
S75において、データログ管理部48は、特定したデータログ(CPUNDOログ)に示された物理アドレスを、空領域リストに追加する。データログ管理部48は、S75を終えると、処理をS72に戻す。
【0135】
S76において、データログ管理部48は、直前世代(n-1)のデータログファイルに終了情報(EOL)を追加する。これにより、データログ管理部48は、直前世代(n-1)のデータログファイルに対するデータログの追加を正常に完了させることができる。
【0136】
続いて、S77において、データログ管理部48は、現世代を含む直近N個の世代よりも前のデータログファイルを削除する。データログ管理部48は、S77の処理が完了すると、本フローを終了する。
【0137】
以上のように、データログ管理部48は、直前世代のデータログファイルに含まれるCPUNDOログに示される物理アドレスを、空領域リストに追加する。直前世代においてページ操作がされたページは、部分チェックポイント処理(S43)のS65で更新後のデータがデータ記憶装置20に書き出されており、且つ、S66で現世代のデータログファイルにCPREDOログが追加されている。従って、直前世代においてページ操作が実行されたページにおける更新前のデータは、障害発生時の復元には不要となる。従って、データログ管理部48は、直前世代においてページ操作が実行されたページにおける更新前のデータが記録された領域を、空領域とすることができる。そこで、データログ管理部48は、直前世代のデータログファイルに含まれるCPUNDOログを検出することにより、データ記憶装置20における空領域を見つけ出す。これにより、データログ管理部48は、ページテーブルを走査する等の処理を実行せずに簡易な処理で空領域を検出することができ、空領域を検出するための処理コストを小さくすることができる。また、データログ管理部48は、空領域に対して直ぐに新たなページに割り当てることが可能となるので、フラグメント化を抑制することができる。
【0138】
さらに、データログ管理部48は、複数のページに含まれる全ての直前操作ページおよび全ての未更新ページについて、現世代のデータログファイルにCPREDOログを追加した後、データログの追加が正常に完了したことを示すデータログである終了情報を直前世代のデータログファイルに追加する。これにより、データログ管理部48は、障害が発生した場合に、正常に完了したデータログファイルを、すなわち復元使用可能なデータログファイルを、容易に決定させることができる。また、終了情報を含まないデータログファイルは未完成であるので、データログ管理部48は、障害が発生した場合に、不完全なデータログファイルを誤って用いてデータを復元してしまうことを、無くすことができる。
【0139】
また、本実施形態において、データログ管理部48は、終了情報を直前世代のデータログファイルに追加した後、直近N個の世代より前の世代のデータログファイルを削除する。これにより、データログ管理部48は、管理装置30が記憶するデータログファイルの数を少なくし、記憶容量および管理コストを小さくすることができる。
【0140】
図12は、障害発生時のリカバリ処理部54の処理の流れを示すフローチャートである。
【0141】
データ群に障害発生した場合、まず、S81において、リカバリ処理部54は、第1フェーズの処理を実行する。第1フェーズにおいて、リカバリ処理部54は、データ群に障害が発生するより前の1または複数の世代のデータログファイルを用いて、障害が発生する前における第1時点のページテーブルを復元する。
【0142】
続いて、S82において、リカバリ処理部54は、第2フェーズの処理を実行する。第2フェーズにおいて、リカバリ処理部54は、復元した第1時点におけるページテーブルに基づき、第1時点の空領域リスト、および、第1時点における世代のデータログファイルを復元する。
【0143】
続いて、S83において、リカバリ処理部54は、第3フェーズの処理を実行する。第3フェーズにおいて、リカバリ処理部54は、第1時点における世代のデータログファイルと、第1時点における世代以後の1または複数の世代の操作ログファイルとを用いて、現時点のページテーブル、現時点の空領域リスト、および、現世代のデータログファイルを復元する。
【0144】
リカバリ処理部54は、以上の処理を実行することにより、障害が発生した場合に、障害発生時に近い時点におけるデータ群に含まれる複数のページのイメージを復元する。以下、
図13~
図15を参照して各フェーズの処理をさらに説明する。
【0145】
図13は、第1フェーズの処理の流れを示すフローチャートである。リカバリ処理部54は、第1フェーズの処理をS91から開始する。
【0146】
まず、S91において、リカバリ処理部54は、世代番号に1を加算して、世代を更新する。さらに、リカバリ処理部54は、ページテーブルおよび空領域リストを初期化する。
【0147】
続いて、S92において、リカバリ処理部54は、復元に用いるデータログファイル群を決定する。復元に用いるデータログファイル群は、障害が発生するより前における、連続した世代における1または複数の世代のデータログファイルを含む。
【0148】
例えば、データログファイルは、障害の発生により終了情報(EOL)が追加されない。そこで、リカバリ処理部54は、記憶している複数のデータログファイルを、最も古い世代のデータログファイルから順次に選択して、選択したデータログファイルに終了情報(EOL)が含まれているか否かを確認する。終了情報(EOL)が含まれていないデータログファイルが確認された場合、リカバリ処理部54は、終了情報(EOL)が含まれていないデータログファイルよりも1世代分古い1または複数の世代のデータログファイルを、復元に用いるデータログファイル群として決定する。これにより、リカバリ処理部54は、障害が発生するより前の1または複数の世代のデータログファイルをデータログファイル群として決定することができる。
【0149】
本実施形態においては、リカバリ処理部54は、N個の世代のデータログファイルを、復元に用いるデータログファイル群として決定する。例えば、障害が発生した時点の1つ前の世代を第k世代(kは、n以下)であるとした場合、リカバリ処理部54は、第1(k-N-1)世代から、第k世代までのN個のデータログファイルをデータログファイル群として決定する。
【0150】
続いて、S93において、リカバリ処理部54は、データログファイル群の中に含まれる全てのデータログを走査したか否かを判断する。データログファイル群に含まれる全てのデータログを走査した場合(S93のYes)、リカバリ処理部54は、処理を第2フェーズに進める。未だ全てのデータログを走査していない場合(S93のNo)、リカバリ処理部54は、処理をS94に進める。
【0151】
S94において、リカバリ処理部54は、データログファイル群に含まれる未走査のデータログのうち、最も古い1つのデータログを特定する。続いて、S95において、リカバリ処理部54は、特定したデータログが、CPUNDOログまたはCPREDOログであるか否かを判断する。特定したデータログがCPUNDOログおよびCPREDOログの何れでもない場合、すなわち、特定したデータログが終了情報(EOL)である場合(S94のNo)、リカバリ処理部54は、処理をS93に戻す。
【0152】
特定したデータログがCPUNDOログまたはCPREDOログである場合(S94のYes)、リカバリ処理部54は、処理をS96に進める。
【0153】
S96において、リカバリ処理部54は、特定したデータログに基づき、ページテーブルのエントリを更新する。すなわち、リカバリ処理部54は、特定したデータログに示されている物理アドレスを、ページテーブルにおける特定したデータログに示されている論理アドレスのエントリに書き込む。なお、この場合において、リカバリ処理部54は、特定したデータログに示されている論理アドレスのエントリの世代番号には、最新世代(n+1)を書き込む。
【0154】
そして、リカバリ処理部54は、S96の処理を完了すると、処理をS93に戻す。
【0155】
以上の第1フェーズの処理をデータログファイル群に含まれる全てのデータログについて実行した場合、リカバリ処理部54は、障害が発生していない第1時点におけるページテーブルを復元することができる。本実施形態においては、リカバリ処理部54は、第k世代における開始時点におけるページテーブルを復元することができる。
【0156】
図14は、第2フェーズの処理の流れを示すフローチャートである。リカバリ処理部54は、第2フェーズの処理をS97から開始する。
【0157】
まず、S97において、リカバリ処理部54は、第1時点のページテーブルを走査して、ページテーブルに書き込まれていない物理アドレスを取得する。そして、リカバリ処理部54は、取得した物理アドレスを空領域リストに書き込む。これにより、リカバリ処理部54は、第1時点における空領域リストを復元することができる。
【0158】
続いて、S98において、リカバリ処理部54は、ページテーブルを参照して、複数のページの全てを走査したか否かを判断する。未走複数のページの全てを走査した場合(S98のYes)、リカバリ処理部54は、処理を第3フェーズに進める。未だ全てのページを走査していない場合(S98のNo)、リカバリ処理部54は、処理をS99に進める。
【0159】
S99において、リカバリ処理部54は、ページテーブルを参照して、複数のページの中の未走査の1つのページを特定する。なお、この場合において、リカバリ処理部54は、未使用ページについては特定しない。
【0160】
続いて、S100において、リカバリ処理部54は、最新世代のデータログファイル(第(n+1)世代のデータログファイル)に、特定したページの論理アドレス(p)と、特定したページにおける物理アドレス(r)との対応関係を示すCPREDOログを追加する。そして、S100の処理を終えると、リカバリ処理部54は、処理をS98に戻し、S98から処理を繰り返す。
【0161】
これにより、リカバリ処理部54は、第1時点における世代のデータログファイルを復元することができる。本実施形態においては、リカバリ処理部54は、第k世代のデータログファイルを復元することができる。
【0162】
図15は、第3フェーズの処理の流れを示すフローチャートである。リカバリ処理部54は、第3フェーズの処理をS101から開始する。
【0163】
まず、S101において、リカバリ処理部54は、復元に用いる操作ログファイル群を決定する。復元に用いる操作ログファイル群は、第1時点における世代以後、現世代(n)までの1または複数の世代の操作ログファイルを含む。本実施形態においては、リカバリ処理部54は、第k世代~第n世代までの操作ログファイルを、復元に用いる操作ログファイル群として決定する。
【0164】
続いて、S102において、リカバリ処理部54は、操作ログファイル群の中の全ての操作ログを走査したか否かを判断する。操作ログファイル群に含まれる全ての操作ログを走査した場合(S102のYes)、リカバリ処理部54は、処理をS105に進める。未だ全ての操作ログを走査していない場合(S102のNo)、リカバリ処理部54は、処理をS103に進める。
【0165】
S103において、リカバリ処理部54は、操作ログファイル群に含まれる未走査の操作ログのうち、最も古い1つの操作ログを特定する。続いて、S104において、リカバリ処理部54は、特定した操作ログを再実行する。すなわち、リカバリ処理部54は、操作ログに従って、ページ操作を実行するとともに、ページテーブルのエントリを変更する。リカバリ処理部54は、S104の処理を完了すると、処理をS120に戻す。
【0166】
そして、S105において、リカバリ処理部54は、最新世代(n+1)のデータログファイルに終了情報(EOL)を追加する。これにより、リカバリ処理部54は、最新世代(n+1)のデータログファイルに対するデータログの追加を正常に完了させることができる。
【0167】
以上のように、リカバリ処理部54は、データ群に障害が発生した場合であっても、データ群に障害が発生するより前の1または複数の世代のデータログファイルを用いて、障害が発生する前における第1時点のページテーブルを復元する。続いて、リカバリ処理部54は、復元した第1時点におけるページテーブルに基づき、第1時点における世代のデータログファイルを復元する。そして、リカバリ処理部54は、第1時点における世代のデータログファイルと、第1時点における世代以後の1または複数の世代の操作ログファイルとを用いて、最新時点のページテーブルおよび最新時点の世代のデータログファイルを復元する。
【0168】
このように、管理装置30は、データ群に障害が発生した場合であっても、データベースの論理的一貫性を保つことができる。従って、管理装置30は、データ群の障害に対する耐性および信頼性を高くすることができる。
【0169】
(データベースシステム10の変化のシナリオの一例)
つぎに、
図16から
図21を参照して、データベースシステム10の状態の変化のシナリオの一例を説明する。また、本シナリオにおいては、N=3に設定されている。そして、ページ処理部38は、p%N=n%Nを満たす場合に、論理アドレスがpのページに対してフラッシュ処理を実行し、第n世代のデータログファイルにCPREDOログを追加する。
【0170】
図16は、データ群が第3世代の場合における、データベースシステム10の状態の一例を示す図である。データベースシステム10は、第3世代において、
図16に示す状態となっているとする。
【0171】
第3世代において、論理アドレスが0のページのデータは、物理アドレスが0の位置に記録され、最終更新世代が3である。論理アドレスが1のページのデータは、物理アドレスが1の位置に記録され、最終更新世代が3である。論理アドレスが2のページのデータは、物理アドレスが2の位置に記録され、最終更新世代が3である。
【0172】
また、空領域リストは、3、4および5の物理アドレスを含む。論理アドレスが3、4および5のページは、未使用ページである。
【0173】
また、第3世代のデータログファイルは、3個のCPUNDOログデータを含む。1番目のCPREDOログは、論理アドレスが0、物理アドレスが-1を示す。2番目のCPREDOログは、論理アドレスが2、物理アドレスが-1を示す。3番目のCPREDOログは、論理アドレスが3、物理アドレスが-1を示す。
【0174】
図17は、データ群が第4世代の場合における、データベースシステム10の状態の一例を示す図である。データベースシステム10は、第3世代に続く第4世代において、
図17に示す状態となっているとする。
【0175】
第4世代において、ページ処理部38は、論理アドレスが1のページに対して更新処理を1回実行する。
【0176】
論理アドレスが1のページの更新処理において、ページ処理部38は、空領域リストの3を空領域の物理アドレスとして取得し、物理アドレスが1のデータを物理アドレスが3へコピーし、データの変更を行う。さらに、論理アドレスが1のページの更新処理において、ページ処理部38は、論理アドレスが1、物理アドレスが1を示すCPUNDOログを、第4世代のデータログファイルに追加する。そして、論理アドレスが1のページの更新処理において、ページ処理部38は、ページテーブルの論理アドレスが1のエントリの物理アドレスを3に変更し、最終実行世代を4に変更する。
【0177】
操作ログ管理部52は、第4世代の操作ログファイルに1個の操作ログを追加する。
【0178】
第4世代において、論理アドレスが0のページおよび2のページが、最終実行世代が直前世代(第3世代)である。従って、データログ管理部48は、論理アドレスが0のページおよび2のページについて、CPREDOログを追加する。
【0179】
なお、第4世代において、データログ管理部48は、空領域リストに物理アドレスを追加しない。
【0180】
図18は、データ群が第5世代の場合における、データベースシステム10の状態の一例を示す図である。データベースシステム10は、第4世代に続く第5世代において、
図18に示す状態となっているとする。
【0181】
第5世代において、ページ処理部38は、論理アドレスが2のページに対して更新処理を1回実行する。さらに、第5世代において、ページ処理部38は、論理アドレスが1のページに対して更新処理を2回実行する。
【0182】
論理アドレスが2のページの更新処理において、ページ処理部38は、空領域リストの4を空領域の物理アドレスとして取得し、物理アドレスが2のデータを物理アドレスが4へコピーし、データの変更を行う。さらに、論理アドレスが2のページの更新処理において、ページ処理部38は、論理アドレスが2、物理アドレスが2を示すCPUNDOログを、第5世代のデータログファイルに追加する。そして、論理アドレスが2のページの更新処理において、ページ処理部38は、ページテーブルの論理アドレスが2のエントリの物理アドレスを4に変更し、最終実行世代を5に変更する。
【0183】
論理アドレスが1のページの最初の更新処理において、ページ処理部38は、空領域リストの5を空領域の物理アドレスとして取得し、物理アドレスが3のデータを物理アドレスが5へコピーし、データの変更を行う。さらに、論理アドレスが1のページの最初の更新処理において、ページ処理部38は、論理アドレスが1、物理アドレスが3を示すCPUNDOログを、第5世代のデータログファイルに追加する。そして、論理アドレスが1のページの最初の更新処理において、ページ処理部38は、ページテーブルの論理アドレスが1のエントリの物理アドレスを5に変更し、最終実行世代を5に変更する。
【0184】
論理アドレスが1のページの2回目の更新処理において、ページ処理部38は、物理アドレスが5の位置において、データの変更を行う。そして、論理アドレスが1のページの2回目の更新処理では、ページ処理部38は、CPUNDOログを追加せず、且つ、ページテーブルも変更しない。
【0185】
操作ログ管理部52は、第5世代の操作ログファイルに3個の操作ログを追加する。
【0186】
第5世代において、データログ管理部48は、最終実行世代が直前世代(第4世代)であるページが存在せず、p%N=n%Nの条件を満たすページも存在しないので、第5世代のデータログファイルにCPREDOログを追加しない。
【0187】
直前世代(第4世代)のデータログファイルは、物理アドレスが1を示すCPUNDOログが含まれる。従って、データログ管理部48は、1を、空領域リストに追加する。
【0188】
図19は、データ群が第6世代の場合における、データベースシステム10の状態の一例を示す図である。データベースシステム10は、第5世代に続く第6世代において、
図19に示す状態となっているとする。
【0189】
第6世代において、ページ処理部38は、論理アドレスが3のページに対して挿入処理を実行する。さらに、第6世代において、ページ処理部38は、論理アドレスが0のページに対して更新処理を2回実行する。
【0190】
挿入処理において、ページ処理部38は、空領域リストの3を空領域の物理アドレスとして取得する。さらに、挿入処理において、ページ処理部38は、論理アドレスが3、物理アドレスが-1を示すCPUNDOログを、第6世代のデータログファイルに追加する。そして、挿入処理において、ページ処理部38は、ページテーブルの論理アドレスが3のエントリの物理アドレスを3に変更し、最終実行世代を6に変更する。
【0191】
論理アドレスが0のページの最初の更新処理において、ページ処理部38は、空領域リストの2を空領域の物理アドレスとして取得し、物理アドレスが0のデータを物理アドレスが2へコピーし、データの変更を行う。さらに、論理アドレスが0のページの最初の更新処理において、ページ処理部38は、論理アドレスが0、物理アドレスが0を示すCPUNDOログを、第6世代のデータログファイルに追加する。そして、論理アドレスが0のページの最初の更新処理において、ページ処理部38は、ページテーブルの論理アドレスが0のエントリの物理アドレスを2に変更し、最終実行世代を6に変更する。
【0192】
論理アドレスが0のページの2回目の更新処理において、ページ処理部38は、物理アドレスが2の位置において、データの変更を行う。そして、論理アドレスが0のページの2回目の更新処理では、ページ処理部38は、CPUNDOログを追加せず、且つ、ページテーブルも変更しない。
【0193】
操作ログ管理部52は、第6世代の操作ログファイルに3個の操作ログを追加する。
【0194】
第6世代において、論理アドレスが1のページおよび2のページが、最終実行世代が直前世代(第5世代)である。従って、データログ管理部48は、論理アドレスが1のページおよび2のページについて、CPREDOログを追加する。
【0195】
なお、直前世代(第5世代)のデータログファイルは、物理アドレスが2のCPUNDOログおよび物理アドレスが3のCPUNDOログが含まれる。従って、データログ管理部48は、2および3を、空領域リストに追加する。ただし、空領域リストに追加された2および3の物理アドレスは、第6世代における挿入処理および更新処理において直ぐに取り出されている。
【0196】
図20は、データ群が第7世代の場合における、データベースシステム10の状態の一例を示す図である。データベースシステム10は、第6世代に続く第7世代において、
図20に示す状態となっているとする。
【0197】
第7世代において、ページ処理部38は、論理アドレスが0のページに対して更新処理を1回実行する。
【0198】
更新処理において、ページ処理部38は、空領域リストの1を空領域の物理アドレスとして取得し、物理アドレスが2のデータを物理アドレスが1へコピーし、データの変更を行う。さらに、更新処理において、ページ処理部38は、論理アドレスが0、物理アドレスが2を示すCPUNDOログを、第7世代のデータログファイルに追加する。そして、更新処理において、ページ処理部38は、ページテーブルの論理アドレスが0のエントリの物理アドレスを1に変更し、最終実行世代を7に変更する。
【0199】
操作ログ管理部52は、第7世代の操作ログファイルに1個の操作ログを追加する。
【0200】
第7世代において、論理アドレスが1のページが、最終実行世代が直前世代(第6世代)より前であり、且つ、p%N=n%Nの条件を満たす。従って、データログ管理部48は、論理アドレスが1のページについて、CPREDOログを追加する。さらに、第7世代において、論理アドレスが3のページが、最終実行世代が直前世代(第6世代)である。従って、データログ管理部48は、論理アドレスが3のページについて、CPREDOログを追加する。
【0201】
直前世代(第6世代)のデータログファイルは、物理アドレスが-1および0を示す2個のCPUNDOログが含まれる。物理アドレスが-1は、データが記録されていないことを示す。従って、データログ管理部48は、0のみを空領域リストに追加する。
【0202】
図21は、データ群が第8世代の場合における、データベースシステム10の状態の一例を示す図である。データベースシステム10は、第7世代に続く第8世代において、
図21に示す状態となっているとする。
【0203】
第8世代において、ページ処理部38は、ページ操作を実行しない。従って、操作ログ管理部52は、第8世代の操作ログファイルに操作ログを追加しない。
【0204】
第8世代において、論理アドレスが2のページが、最終実行世代が直前世代(第7世代)より前であり、且つ、p%N=n%Nの条件を満たす。従って、データログ管理部48は、論理アドレスが2のページについて、CPREDOログを追加する。さらに、第8世代において、論理アドレスが0のページが、最終実行世代が直前世代(第7世代)である。従って、データログ管理部48は、論理アドレスが0のページについて、CPREDOログを追加する。
【0205】
直前世代(第7世代)のデータログファイルは、物理アドレスが2を示すCPUNDOログが含まれる。従って、データログ管理部48は、2を空領域リストに追加する。
【0206】
従来のシャドウページ方式の場合、データログファイルは、通常、世代毎に、ページテーブルのサイズ分のレコードを含む。しかし、本実施形態に係るデータログファイルは、終了情報(EOL)を除いて、最大でページテーブル分のサイズのログを含めばよく、ページテーブルのサイズより少ないログを含む場合も多い。より大きなサイズのデータベースを管理する場合、管理装置30は、データログファイルのサイズ削減効果を大きくすることができる。例えば、本実施形態と、従来のシャドウページとのデータログファイルのサイズの比率は、以下の式(1)により表される。
本実施形態のサイズ:従来のシャドウページ方式のサイズ=L/N+更新量:L …(1)
【0207】
なお、Lは、ページ数を表す。通常、更新量<<Lの関係がある。従って、式(1)は、式(2)のように近似される。
本実施形態のサイズ:従来のシャドウページ方式のサイズ=1:N …(2)
【0208】
(障害発生時のリカバリ処理)
つぎに、
図22および
図23を参照して、障害発生時におけるデータベースシステム10のリカバリ処理について説明する。以下は、
図16~
図22のシナリオにおける第7世代の途中で障害が発生した場合を例にして説明する。
【0209】
図22は、障害が発生した場合のリカバリ処理の途中の状態の一例を示す図である。
【0210】
まず、リカバリ処理部54は、第1フェーズおよび第2フェーズの処理を実行する。第1フェーズにおいて、リカバリ処理部54は、データログファイル群を決定する。
【0211】
第7世代の途中で障害が発生したため、第7世代のデータログファイルは、終了情報(EOL)を含まない。従って、第6世代のデータログファイルが終了情報(EOL)を含む最終の世代となる。このため、リカバリ処理部54は、第6世代を含む直近N個の世代(直近3個の世代)のデータログファイルを、データログファイル群として選択する。すなわち、リカバリ処理部54は、第4世代、第5世代および第6世代のデータログファイルを、データログファイル群として選択する。また、リカバリ処理部54は、現世代の世代番号を、最新世代である8に変更する。
【0212】
リカバリ処理部54は、第4世代、第5世代および第6世代のデータログファイルを含むデータログファイル群を用いて第1フェーズおよび第2フェーズを実行する。これにより、リカバリ処理部54は、
図22に示すようなページテーブルおよび空領域リストを復元することができる。
【0213】
すなわち、リカバリ処理部54は、論理アドレスが0のページのエントリの物理アドレスを0とし、論理アドレスが1のページのエントリの物理アドレスを5とし、論理アドレスが2のページのエントリの物理アドレスを4とする。また、リカバリ処理部54は、論理アドレスが0、1、2のエントリの最終実行世代を、8とする。さらに、リカバリ処理部54は、空領域リストに、3、2および1を含める。
【0214】
図23は、障害が発生した場合のリカバリ処理の後の状態の一例を示す図である。
【0215】
リカバリ処理部54は、第2フェーズを完了することにより、第8世代のデータログファイルにCPREDOログを追加することができる。すなわち、リカバリ処理部54は、論理アドレスが0および物理アドレスが0を示すCPREDOログ、論理アドレスが1および物理アドレスが5を示すCPREDOログ、および、論理アドレスが2および物理アドレスが4を示すCPREDOログを、第8世代のデータログファイルに追加することができる。
【0216】
さらに、リカバリ処理部54は、第3フェーズを実行する。第3フェーズにおいて、リカバリ処理部54は、障害が発生していない最も新しい世代以降の操作ログファイルを、操作ログファイル群として決定する。本例においては、リカバリ処理部54は、第6世代の操作ログファイルおよび第7世代の操作ログファイルを、操作ログファイル群として決定する。
【0217】
そして、第3フェーズにおいて、リカバリ処理部54は、第6世代の操作ログファイルおよび第7世代の操作ログファイルに含まれる全ての操作ログを、最も古い操作ログから順次に実行する。これにより、リカバリ処理部54は、
図23に示すような、最新時点におけるページテーブル、空領域リスト、および、最新時点の世代(第8世代)のデータログファイルを復元することができる。
【0218】
すなわち、リカバリ処理部54は、論理アドレスが0のページのエントリの物理アドレスを1とし、論理アドレスが1のページのエントリの物理アドレスを5とし、論理アドレスが2のページのエントリの物理アドレスを4とし、論理アドレスが2のページのエントリの物理アドレスを3とすることができる。また、リカバリ処理部54は、論理アドレスが0、1、2、3のエントリの最終実行世代を8とすることができる。さらに、リカバリ処理部54は、空領域リストに、0および2を含めることができる。
【0219】
さらに、リカバリ処理部54は、第3フェーズを完了することにより、第8世代のデータログファイルにCPUNDOログを追加することができる。すなわち、リカバリ処理部54は、論理アドレスが0および物理アドレスが0を示すCPUNDOログ、および、論理アドレスが3および物理アドレスが-1を示すCPUNDOログを、第8世代のデータログファイルに追加することができる。
【0220】
図24は、リカバリ処理に用いたファイルを示す図である。
図22および
図23において説明したように、
図16~
図22のシナリオにおける第7世代の途中で障害が発生した場合、リカバリ処理部54は、第4世代のデータログファイル、第5世代のデータログファイル、第6世代のデータログファイル、第6世代の操作ログファイル、および、第7世代の操作ログファイルを用いて、第8世代のデータログファイルを復元することができる。
【0221】
以上のように、管理装置30は、何れかの世代において障害が発生した場合であっても、データ群を確実に復元することができる。
【0222】
(ハードウェア構成)
図25は、実施形態に係る情報処理装置200のハードウェア構成を示す図である。管理装置30は、例えば
図25に示すようなハードウェア構成の情報処理装置200により実現される。
【0223】
この情報処理装置200は、CPU(Central Processing Unit)201と、RAM(Random Access Memory)202と、ROM(Read Only Memory)203と、操作入力装置204と、表示装置205と、記憶装置206と、通信装置207とを備える。そして、これらの各部は、バスにより接続される。
【0224】
CPU201は、プログラムに従って演算処理および制御処理等を実行するプロセッサである。CPU201は、RAM202の所定領域を作業領域として、ROM203および記憶装置206等に記憶されたプログラムとの協働により各種処理を実行する。
【0225】
RAM202は、SDRAM(Synchronous Dynamic Random Access Memory)等のメモリである。RAM202は、CPU201の作業領域として機能する。ROM203は、プログラムおよび各種情報を書き換え不可能に記憶するメモリである。
【0226】
操作入力装置204は、マウスおよびキーボード等の入力デバイスである。操作入力装置204は、ユーザから操作入力された情報を指示信号として受け付け、指示信号をCPU201に出力する。
【0227】
表示装置205は、LCD(Liquid Crystal Display)等の表示デバイスである。表示装置205は、CPU201からの表示信号に基づいて、各種情報を表示する。
【0228】
記憶装置206は、フラッシュメモリ等の半導体による記憶媒体、または、磁気的若しくは光学的に記録可能な記憶媒体等にデータを書き込みおよび読み出しをする装置である。記憶装置206は、CPU201からの制御に応じて、記憶媒体にデータの書き込みおよび読み出しをする。通信装置207は、CPU201からの制御に応じて外部の機器とネットワークを介して通信する。
【0229】
管理装置30で実行されるプログラムは、世代管理モジュールと、通信処理モジュールと、データ処理モジュールと、ページ処理モジュールと、バッファ管理モジュールと、テーブル管理モジュールと、空領域管理モジュールと、データログ管理モジュールと、操作ログ管理モジュールと、リカバリ処理モジュールと、を含むモジュール構成となっている。このプログラムは、CPU201(プロセッサ)によりRAM202上に展開して実行されることにより、情報処理装置200を、世代管理部32、通信処理部34、データ処理部36、ページ処理部38、バッファ管理部40、テーブル管理部42、空領域管理部44、データログ管理部48、操作ログ管理部52およびリカバリ処理部54として機能させる。なお、管理装置30は、このような構成に限らず、世代管理部32、通信処理部34、データ処理部36、ページ処理部38、バッファ管理部40、テーブル管理部42、空領域管理部44、データログ管理部48、操作ログ管理部52およびリカバリ処理部54の少なくとも一部をハードウェア回路(例えば半導体集積回路)により実現した構成であってもよい。
【0230】
また、管理装置30で実行されるプログラムは、コンピュータにインストール可能な形式または実行可能な形式のファイルで、CD-ROM、フレキシブルディスク、CD-R、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【0231】
また、管理装置30で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、管理装置30で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。また、管理装置30で実行されるプログラムを、ROM等に予め組み込んで提供するように構成してもよい。
【0232】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。