(57)【要約】  データベース管理システムは、複数のトランザクションの実行において、トランザクション毎に、トランザクションのログを生成し、生成したログをログ格納領域に格納する。データベース管理システムは、少なくとも、トランザクション実行順序によって結果が異なるトランザクションの集合に属するトランザクションについて生成されたログには、ログの順番を記録する。
2015111152.tif 000002
【特許請求の範囲】
【請求項１】
データベースを管理するデータベース管理システムであって、
前記データベースへのクエリをクエリ発行元から受け付けるクエリ受付部と、
前記受け付けたクエリに関する情報を基に、複数のトランザクションを実行し、トランザクション毎に、トランザクションのログを生成し、前記生成したログをログ格納領域に書き込むためのログ書込み要求を発行するクエリ実行部と
を有し、
前記クエリ実行部は、トランザクション実行順序によって結果が異なるトランザクションの集合である第１種トランザクション集合に属するトランザクション毎に、トランザクションのログに、ログの順番を記録する、
データベース管理システム。
【請求項２】
分割された前記データベースである複数のデータベース部分、の各々について、ログの順番を管理する順番管理部を有し、
各順番管理部により管理される順番は、その順番管理部に対応したデータベース部分を更新したトランザクションのログの生成の都度に更新され、
前記複数のデータベース部分のうちＮ個のデータベース部分を更新したトランザクションのログとして（Ｎは２以上の整数）、Ｍ個のログが生成され（ＭはＮ以下であり１以上の整数）、
前記Ｍ個のログのうちの少なくとも１つが、前記Ｎ個のデータベース部分にそれぞれ対応したＮ個の順番のうちの２以上の順番を含む、
請求項１記載のデータベース管理システム。
【請求項３】
前記Ｎ個のデータベース部分にそれぞれ対応したＮ個のログ格納領域があり、
１つの順番を含んだログは、その順番に対応したログ格納領域に書き込まれ、
前記２以上の順番を含んだログは、前記２以上の順番にそれぞれ対応した２以上のログ格納領域のうちのいずれかに書き込まれる、
請求項２記載のデータベース管理システム。
【請求項４】
Ｍ＝１である、
請求項２記載のデータベース管理システム。
【請求項５】
前記複数のデータベース部分にそれぞれ対応した複数のＩ／Ｏ（Input/Output）リソースがあり、
１つの順番を含んだログは、その順番に対応したＩ／Ｏリソースを通じて、そのＩ／Ｏリソースに対応したログ格納領域に書き込まれ、
前記２以上の順番を含んだログは、前記２以上の順番にそれぞれ対応した２以上のＩ／Ｏリソースのいずれかを通じて、そのＩ／Ｏリソースに対応したログ格納領域に書き込まれる、
請求項２記載のデータベース管理システム。
【請求項６】
前記クエリ実行部は、トランザクション実行順序が結果に影響を与えないトランザクションの集合である第２種トランザクション集合に属するトランザクションのログには、順番を記録しない、
請求項１記載のデータベース管理システム。
【請求項７】
前記クエリ実行部は、前記クエリに関する情報を基に、実行対象のトランザクションが、前記第１トランザクション集合と前記第２種トランザクション集合とのどちらに属するかを判断する、
請求項６記載のデータベース管理システム。
【請求項８】
前記受け付けたクエリに基づいて前記受け付けたクエリを実行するために必要な１以上のデータベースオペレーションと前記１以上のデータベースオペレーションの実行手順とを表す情報を含んだクエリ実行プランを生成するクエリ実行プラン生成部を更に有し、
前記クエリに関する情報は、前記クエリ実行プランを表す情報である、
請求項７記載のデータベース管理システム。
【請求項９】
前記クエリ実行部は、チェックポイント毎に、全ての順番管理部にそれぞれ対応した全ての順番を含んだ１以上のチェックポイントログを生成する、
請求項１記載のデータベース管理システム。
【請求項１０】
チェックポイント毎に、チェックポイントログの数は、データベース部分の数よりも少ない、
請求項９記載のデータベース管理システム。
【請求項１１】
指定された第１のチェックポイントの時点におけるデータベースをリカバリーするリカバリー実行部を更に有し、
前記クエリ実行部は、複数のチェックポイントのうちの少なくとも１つのチェックポイントにおいてデータベースをバックアップし、
前記リカバリー実行部は、
バックアップされたデータベースのうち、前記第１のチェックポイントと同じ、又は、前記第１のチェックポイントよりも過去のチェックポイントである第２のチェックポイントに対応したデータベースをロードし、
前記第２のチェックポイントに対応したチェックポイントログ中の各順番を、その順番に対応する順番管理部に設定する、
請求項９記載のデータベース管理システム。
【請求項１２】
前記リカバリー実行部は、前記第２のチェックポイントと前記第１のチェックポイントが異なっていれば、ロードされたデータベースのデータベース部分毎に、データベース部分に対応したログ格納領域に格納されている、前記第２のチェックポイントから前記第１のチェックポイントまでの１以上のログを、ログ中の順番の小さい順に用いて、データベース部分をリカバリーし、
前記リカバリー実行部は、データベース部分毎のリカバリーにおいて、そのデータベース部分に対応した順番である該当順番と該当順番以外の１以上の順番である１以上の非該当順番とを含んだログについては、そのログに従う更新を、そのデータベース部分と、前記１以上の非該当順番にそれぞれ対応する１以上のデータベース部分とに対して実行し、
前記リカバリー実行部は、データベース部分毎のリカバリーにおいて、そのデータベース部分に対応したログ中の順番が、直前回に用いたログ中の順番の次の番号でなければ、前記次の番号を含んだログを待つ、
請求項１１記載のデータベース管理システム。
【請求項１３】
前記データベースは、メインメモリ上に存在する、
請求項２記載のデータベース管理システム。
【請求項１４】
データベースを管理する計算機システムであって、
ログ格納領域に接続されたインターフェイスデバイスと、
前記インターフェイスデバイスに接続されたプロセッサと
を有し、
前記プロセッサは、複数のトランザクションを実行し、複数のトランザクションの実行において、トランザクション毎に、トランザクションのログを生成し、生成したログをログ格納領域に格納し、
前記プロセッサは、少なくとも、トランザクション実行順序によって結果が異なるトランザクションの集合に属するトランザクションのログには、ログの順番を記録する、
計算機システム。
【請求項１５】
データベースを管理するデータベース管理方法であって、
複数のトランザクションの実行において、トランザクション毎に、トランザクションのログを生成し、
生成したログをログ格納領域に格納し、
少なくとも、トランザクション実行順序によって結果が異なるトランザクションの集合に属するトランザクションについて生成されたログには、ログの順番が記録される、
データベース管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、データベース管理に関し、例えば、トランザクション処理のログの出力に関する。
【背景技術】
【０００２】
データベース管理システム（以下、ＤＢＭＳ）として、データベース（特に、テーブル及びインデックスといった主要なデータ）を不揮発性のストレージ装置（典型的にはＨＤＤ（Hard  Disk  Drive）のようなディスクストレージ装置）に配置するオンディスクデータベースと、データベースをメインメモリ（一般的に揮発性メモリ）に配置するインメモリデータベースが知られている（オンディスクデータベースとインメモリデータベースを組み合わせたハイブリット型のＤＢＭＳも知られている）。【０００３】
インメモリデータベースも、メインメモリ上のデータベースの状態をリカバリーするためには、不揮発性のストレージ装置に更新履歴を含んだログを出力しておく必要がある。【０００４】
ログは、一般に、トランザクション実行時に単一のログファイルに出力される。複数のコア（又は複数のＣＰＵ（Central  Processing  Unit））で並行してトランザクションが処理されるようになっていても、ログの出力先は、単一のログファイルである。このため、ログ出力がボトルネックとなる。【０００５】
ところで、必ずしも全てのトランザクションの間に順序を定める必要はない。例えば、２つのトランザクションが参照及び更新するデータの集合が共通部分を持たない場合には、その２つのトランザクションの実行順序を入れ替えても、データベースへの操作結果は変わらない。このため、２つのトランザクションには順序を定める必要はない。特許文献１では、分散されたデータベース毎にログファイルが用意され、データベースの更新履歴を含んだログが、複数のログファイルのうちのそのデータベースに対応したログファイルに出力される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】ＵＳ５８７８４１４
【発明の概要】
【発明が解決しようとする課題】
【０００７】
インメモリデータベースは、データベースを複数のパーティションに分割し、各パーティションを管理することができる。特許文献１に開示の技術をインメモリデータベースに適用した場合、インメモリデータベースが管理するパーティション毎にログファイルを用意し、パーションの更新履歴を含んだログをそのパーティションに対応するログファイルに出力することができる。【０００８】
しかし、特許文献１の技術を単純にインメモリデータベースに適用すると、トランザクション数の数倍のＩ／Ｏ要求がストレージ装置に対して発生してことになる。なぜなら、パーティションは予め定義されており、トランザクションの処理において複数のパーティションのデータを参照及び更新することがあることを避けることができず、その場合、処理されたトランザクションが１つであっても、複数のパーティションにそれぞれ対応した複数のログファイルの各々にログを出力しなければならないからである。【０００９】
このような課題は、インメモリデータベースに限らず、分割されたデータベースを管理する他のＤＢＭＳ、或いは、単一のデータベースを管理する他のＤＢＭＳについてもあり得る。
【課題を解決するための手段】
【００１０】
ＤＢＭＳは、複数のトランザクションの実行において、トランザクション毎に、トランザクションのログを生成し、生成したログをログ格納領域に格納する。ＤＢＭＳは、少なくとも、トランザクション実行順序によって結果が異なるトランザクションの集合に属するトランザクションについて生成されたログには、ログの順番を記録する。
【発明の効果】
【００１１】
トランザクション実行順序によって結果が異なるトランザクションの集合に属するトランザクションについて生成されたログにログの順番が記録されるので、トランザクション実行順序によって結果が異なるトランザクションの集合について、トランザクションの実行順序を特定することができる。このため、データベースが分割された複数のデータベース部分のうちの２以上のデータベース部分を更新した１つのトランザクションについて生成されるログが、更新されたデータベース部分の数より少ない数のログであっても、格納されたログを基に、トランザクションの実行順序（例えば半順序）を特定することができる。
【図面の簡単な説明】
【００１２】
【図１】実施例に係る計算機システムの構成を示す。
【図２】トランザクション集合の一例を示す。
【図３】実施例に係る計算機システムの機能ブロック図である。
【図４】ＬＬＳＮ管理部の構成を示す。
【図５】ログのデータ構造を示す。
【図６】チェックポイントログのデータ構造を示す。
【図７】トランザクション集合の一例を示す。
【図８】トランザクション集合の実行前と実行後のテーブルを示す。
【図９】実施例に係るログ出力の一例を示す。
【図１０】比較例１に係るログ出力の一例を示す。
【図１１】比較例２に係るログ出力の一例を示す。
【図１２】トランザクション処理のフローチャートである。
【図１３】ログ出力処理のフローチャートである。
【図１４】チェックポイント生成処理のフローチャートである。
【図１５】データベースのリカバリー処理（親）のフローチャートである。
【図１６】データベースのリカバリー処理（子）のフローチャートである。
【発明を実施するための形態】
【００１３】
以下、図面を参照して、一実施例を説明する。
【００１４】
なお、以下の説明では、同種の要素の参照符号には同一の親番号を含んでいる。同種の要素を区別して説明する場合には、要素の参照符号を使用し（例えばパーティション１１１Ａ、１１１Ｂ、…）、同種の要素を区別しないで説明する場合には、要素の参照符号のうちの親番号のみ使用することがある（例えばパーティション１１１）。
【００１５】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサによって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インターフェイスデバイス等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサ或いはそのプロセッサを有する装置（例えばデータベースサーバ）が行う処理としてもよい。また、プロセッサは、処理の一部又は全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから各コントローラにインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機又は記憶メディアであってもよい。
【００１６】
図１は、実施例に係る計算機システムの構成を示す。
【００１７】
データベースサーバ４０１に外部ストレージ装置４０２が、例えば通信ネットワーク４０３を介して接続されている。
【００１８】
データベースサーバ４０１は、計算機であって、例えば、パーソナルコンピュータ、ワークステーション又はメインフレームであってよく、もしくは、これらの計算機において仮想化プログラムによって構成された仮想的な計算機であってよい。データベースサーバ４０１は、Ｉ／Ｏアダプタ４１３、メインメモリ４１６、記憶デバイス４１５及びそれらに接続されたプロセッサ４１４を有する。プロセッサ４１４は、例えば、マイクロプロセッサ、又は、マイクロプロセッサと専用ハードウェア回路を含んだモジュールでよい。プロセッサ４１４は、コンピュータプログラムを実行する。プロセッサ４１４により実行されるコンピュータプログラムは、例えば、オペレーティングシステム（ＯＳ）１１７及びデータベース管理システム（ＤＢＭＳ）４１２である。メインメモリ４１６は、例えば、揮発性のＤＲＡＭ（Dynamic  Random  Access  Memory）等であり、プロセッサ４１４によって実行されるプログラムと、プログラムが使用するデータを一時的に記憶する。記憶デバイス４１５は、不揮発性であり、例えば、ＨＤＤ（Hard  Disk  Drive）又はＳＳＤ（Solid  State  Drive）である。記憶デバイス４１５は、プログラム及びプログラムが使用するデータを格納してよい。Ｉ／Ｏアダプタ４１３は、通信ネットワーク４０３とデータベースサーバ４０１を接続する。
【００１９】
外部ストレージ装置４０２は、複数の記憶デバイスを含む記憶デバイス群４５１を有する装置であり、例えば、ディスクアレイ装置であるが、それに代えて、単一の記憶デバイスであってもよい。外部ストレージ装置４０２は、ログファイル３０１を記憶する。外部ストレージ装置４０２は、データベースサーバ４０１からログのＩ／Ｏ要求を受け付け、当該Ｉ／Ｏ要求に従いデータ（例えばログ）の読み書きを行い、その結果をデータベースサーバ４０１に返す。なお、記憶デバイス群４５１が有する記憶デバイスは、不揮発性の記憶媒体を有するデバイスであって、例えば、ＨＤＤ又はＳＳＤである。記憶デバイス群４５１は、ＲＡＩＤ（Redundant  Array  of  Independent  Disks）グループでよく、所定のＲＡＩＤレベルでデータを記憶してもよい。記憶デバイス群４５１の記憶空間に基づく論理的な記憶デバイス（例えば、論理ユニット、論理ボリューム、ファイルシステムボリューム）が、データベースサーバ４０１に提供され、当該論理的な記憶デバイス上にログファイル３０１が格納されてもよい。なお、本実施例において、ログファイル３０１は、ログ格納領域の一例である。
【００２０】
外部ストレージ装置４０２は、記憶デバイス群４５１に加えて、Ｉ／Ｏアダプタ４４１及びこれらに接続されたストレージコントローラ４４２を有する。Ｉ／Ｏアダプタ４４１は、外部ストレージ装置４０２を通信ネットワーク４０３に接続し、これを介して、データベースサーバ４０１と接続される。通信ネットワーク４０３を介した通信プロトコルとしては、例えば、ファイバチャネル（ＦＣ）、ＳＣＳＩ（Small  Computer  System  Interface）、又は、ＴＣＰ／ＩＰ（Transmission  Control  Protocol／Internet  Protocol）が採用されてよい。例えば、ファイバチャネルもしくはＳＣＳＩが採用される場合、Ｉ／Ｏアダプタ４４１（及び４１３）は、ホストバスアダプタと呼ばれることがある。ストレージコントローラ４４２は、例えば、メモリ及びプロセッサを含み、データベースサーバ４０１からのＩ／Ｏ要求に応じて、ログファイル３０１を格納した記憶デバイス群４５１との間でデータの読出し、もしくは、書込みを行う。
【００２１】
図２は、トランザクション集合の一例を示す。
【００２２】
この図は、２つのチェックポイント１及び２の間で実行されるトランザクションの例を示す。本実施例において実行される各トランザクションは、第１種トランザクション集合と第２種トランザクション集合のいずれかに分類される。
【００２３】
第１種トランザクション集合は、トランザクション実行順序によって結果が変化するトランザクションの集合である。図示の例では、半順序が定義されている。半順序によれば、例えば、同一のレコードを更新する複数のトランザクションは定義された順序で実行されなければならないが、異なるレコードを更新する複数のトランザクションはどのような順序で実行されてもよい。
【００２４】
第２種トランザクション集合は、トランザクションの実行順序が結果に影響を与えないトランザクション集合である。
【００２５】
実行対象のトランザクションが第１種及び第２種トランザクション集合のどちらに属するかは、例えば、１又は複数のクエリ実行プランから判断することができる。
【００２６】
図３は、実施例に係る計算機システムの機能ブロック図である。
【００２７】
ＤＢＭＳ４１２は、インメモリデータベースである。ＤＢＭＳ４１２は、データベースを複数のパーティション１１１（例えば３つのパーティション１１１Ａ〜１１１Ｃ）に分割してメインメモリ４１６上に配置する。各パーティション１１１は、データベースの一部分、例えば、データベース中のテーブルの一部分であるテーブル１１２と、データベース中のインデックスの一部分であるインデックス１１３とを含む。１つのパーティション１１１（例えば１１１Ａ）において、そのパーティション１１１内のインデックス１１３（例えば１１３Ａ）を用いて、そのパーティション１１１内のテーブル１１２（例えば１１２Ａ）からデータを特定することができる。１つのテーブル１１２が有するデータは、そのテーブル１１２を含むパーティション１１１内のインデックス１１３のみから特定可能でよい。また、各パーティション１１１は、ロック機構１１６を含んでよい。同一のパーティション１１１に対して２以上のスレッド１１０が競合することを避けるためである。ロック機構１１６は、パーティション１１１のロックの取得済か否かを表す情報でよい。例えば、ロック機構１１６は、ロック取得済なら値「１」でよくロック未取得なら値「０」でよい。ロック機構１１６は、パーティション１１１に関連付けられていればよく、パーティション１１１の外にあってもよい。
【００２８】
ＤＢＭＳ４１２は、パーティション１１１毎に、ログバッファ１１４とＬＬＳＮ管理部１１５を有する。ログバッファ１１４は、パーティション１１１の更新履歴を含んだログを一時格納する。ＬＬＳＮ管理部１１５は、ＬＬＳＮを管理する。「ＬＬＳＮ」は、ローカルログシーケンス番号の略である。ＬＬＳＮは、１つのパーティション１１１において重複しない番号である。ＬＬＳＮは、第１種トランザクション集合（トランザクション実行順序によって結果が変化するトランザクション集合）に属するトランザクションのログの出力の際に採番される。ＬＬＳＮは、第１種トランザクション集合に限らず第２種トランザクション集合に属するトランザクションのログの出力の際にも採番されてもよい。
【００２９】
ＤＢＭＳ４１２は、クエリ発行元からクエリを受信し、受信したクエリの実行において、１又は複数のトランザクションを実行する。具体的には、ＤＢＭＳ４１２は、クエリ受付部４２１、クエリ実行プラン生成部４２２及びクエリ実行部４２４を有する。
【００３０】
クエリ受付部４２１は、クエリ発行元が発行するクエリを受け付ける。クエリは、例えば、構造化問合せ言語（ＳＱＬ、Structured  Query  Language）によって記述される。１つのクエリで複数のトランザクションが記述されていてもよいし、複数のクエリで複数のトランザクションが記述されてもよい。また、クエリ発行元は、ＤＢＭＳ４１２の内部のコンピュータプログラムであってよいし、ＤＢＭＳ４１２外部のコンピュータプログラムであってよい。例えば、外部のコンピュータプログラムは、データベースサーバ４０１内で実行されるコンピュータプログラム（例えばアプリケーションプログラム）であってもよいし、データベースサーバ４０１に接続されたクライアント計算機等の装置で実行されるコンピュータプログラム（例えば、アプリケーションプログラム）であってもよい。
【００３１】
クエリ実行プラン生成部４２２は、クエリ受付部４２１が受け付けたクエリから、当該クエリを実行するために必要な１以上のデータベースオペレーションを含むクエリ実行プランを生成する。クエリ実行プランは、例えば、１以上のデータベースオペレーションと、データベースオペレーションの実行順序の関係を含む情報であり、クエリ実行プラン情報４２３として格納される。クエリ実行プランは、データベースオペレーションをノード、データベースオペレーションの実行順序の関係をエッジとする木構造で表されることがある。１つのクエリ実行プラン、又は、複数のクエリ実行プランの組合せから、１又は複数のトランザクション集合と、各トランザクション集合が第１種及び第２種のトランザクション集合のどちらであるかを特定することができる。
【００３２】
クエリ実行部４２４は、クエリ実行プラン生成部４２２が生成したクエリ実行プランに従って、クエリ受付部４２１が受け付けたクエリを実行し、その実行結果をクエリ発行元に返す。この際、クエリ実行部４２４は、データベースオペレーションの実行に必要なデータの読出し要求（参照要求）を発行し、その読出し要求に従いパーティション１１１から読み出されたデータを使用して、そのデータベースオペレーション（例えば、読み出されたデータ（値）を用いて新たなデータを算出し、読出し元レコードにおけるデータを算出後のデータに更新する書込み要求を発行する）を行う。クエリ実行部４２４は、データベースオペレーションを、スレッド１１０を実行することにより行う。なお、ＤＢＭＳ４１２において、複数のスレッド１１０が並行して実行される。このため、プロセッサ４１４は、複数のコアを有する。複数のコアは、１又は複数のＣＰＵに存在する。スレッド１１０は、タスクと呼ばれてもよい。スレッド１１０の実装としては、例えば、ＯＳ１１７が実現するプロセスやカーネルスレッド等のほか、ライブラリ等が実現するユーザスレッドを用いてよい。１つのスレッド１１０により、１以上のデータベースオペレーションに対応した１つのトランザクションが実行されてよい。以下、クエリ実行部４２４がスレッド１１０を実行することにより行われる処理の主語を、スレッド１１０、とすることがある。
【００３３】
クエリ実行部４２４（スレッド１１０）は、トランザクションの実行において、外部ストレージ装置４０２内のログファイル３０１にログを書き込むために、外部ストレージ装置４０２に対するＩ／Ｏ要求をＯＳ１１７に発行する。ＯＳ１１７は、そのＩ／Ｏ要求を受け付け、外部ストレージ装置４０２へＩ／Ｏ要求を発行する。
【００３４】
Ｉ／Ｏアダプタ４１３には、複数のＩ／Ｏキュー２０１（２０１Ａ〜２０１Ｃ）が用意される。トランザクションの処理において、スレッド１１０が、ログの書込みのためのＩ／Ｏ要求を発行するが、Ｉ／Ｏキュー２０１には、そのＩ／Ｏ要求が格納される。具体的には、Ｉ／Ｏ要求は、ＯＳ１１７によりＩ／Ｏキュー２０１に格納される。
【００３５】
外部ストレージ装置４０２が、複数のログファイル３０１（３０１Ａ〜３０１Ｃ）を記憶する。ログファイル３０１に、Ｉ／Ｏ要求の書込み対象のログが記録される。
【００３６】
本実施例では、パーティション１１１と、Ｉ／Ｏキュー２０１と、ログファイル３０１が、１：１：１で対応している。つまり、パーティション１１１毎に、１つのＩ／Ｏキュー２０１と、１つのログファイル３０１がある。具体的には、パーティション１１１ＡにＩ／Ｏキュー２０１Ａ及びログファイル３０１Ａが関連付けられており、パーティション１１１ＢにＩ／Ｏキュー２０１Ｂ及びログファイル３０１Ｂが関連付けられており、パーティション１１１ＣにＩ／Ｏキュー２０１Ｃ及びログファイル３０１Ｃが関連付けられている。スレッド１１０は、１つのログファイル３０１につき１つであっても複数であってもよい。ただし、Ｉ／Ｏ要求の完了を通知するための割り込みをＩ／Ｏキュー２０１毎に特定のスレッド１１０に送信するようにする方がＩ／Ｏ要求の処理が軽減できる場合があり、その場合には例えばスレッド１１０とパーティション１１１とＩ／Ｏキュー２０１を１対１対応させておくとよい場合がある。本実施例では、説明を分かり易くするために、スレッド１１０もログファイル３０１に１：１で対応していてよい。例えば、スレッド１１０Ａが、パーティション１１１Ａにおけるテーブル１１２Ａ中のレコードを更新したことを表すログのＩ／Ｏ要求を、そのパーティション１１１Ａに対応するログファイル３０１Ａに対して発行するようになっている。発行されたＩ／Ｏ要求は、ログバッファ１１４Ａを経由して、ＯＳ１１７に送られる。ＯＳ１１７が、ログファイル３０１Ａに対するＩ／Ｏ要求を受けて、そのＩ／Ｏ要求を、ログファイル３０１Ａに対応するＩ／Ｏキュー２０１Ａに格納する。Ｉ／Ｏキュー２０１Ａに格納されたＩ／Ｏ要求は、ＯＳ１１７によりＩ／Ｏキュー２０１から外部ストレージ装置４０２に送られる。それにより、そのＩ／Ｏ要求の書込み対象データであるログが、ログファイル３０１Ａに書き込まれる。
【００３７】
図３に示すＤＢＭＳ４１２の構成は一例に過ぎない。例えば、或る構成要素は複数の構成要素に分割されていてもよく、複数の構成要素が１つの構成要素に統合されていてもよい。
【００３８】
図４は、ＬＬＳＮ管理部１１５の構成を示す。
【００３９】
ＬＬＳＮ管理部１１５は、ロック機構１２１と、ＬＬＳＮ１２２と、ログファイルアドレス１２３とを有する。
【００４０】
ロック機構１２１も、図３に示したロック機構１１６と同様、ＬＬＳＮ管理部１１５のロックの取得済か否かを表すデータでよい。例えば、ロック機構１２１は、ロック取得済なら値「１」でよくロック未取得なら値「０」でよい。
【００４１】
ＬＬＳＮ１２２は、このＬＬＳＮ管理部１１５を含むパーティション１１１についてのログのシーケンス番号（ＬＬＳＮ）である。例えば、ＬＬＳＮは、このＬＬＳＮ管理部１１５のＩＤと、シリアル番号との組合せである。例えば、ＬＬＳＮ管理部１１５Ａからスレッド１１０ＡによりＬＬＳＮが採番される度に、ＬＬＳＮ１２２が表す値は、１−００１、１−００２、１−００３のように更新される。ＬＬＳＮは、ＬＬＳＮ管理部１１５ＡのＩＤ「１」と、更新後のシリアル番号との組合せである。
【００４２】
ログファイルアドレス１２３は、ＬＬＳＮ管理部１１５を含むパーティション１１１に対応したログファイル３０１におけるログの書込み先アドレスである。ログファイルアドレス１２３が表すアドレス（値）は、ログファイル３０１にログを書き出す度に出力するログのサイズ分だけ加算される。
【００４３】
図５は、ログのデータ構造を示す。
【００４４】
ログは、１つのトラザクションにつき１つでよく、トランザクションのＩＤと、そのトランザクションの実行中に採番された１以上のＬＬＳＮと、そのトランザクションの更新履歴を表す情報とを含む。ログに含まれるＬＬＳＮの数は、トランザクションの実行において更新されたパーティション１１１の数と同じである。
【００４５】
図６は、チェックポイントログのデータ構造を示す。
【００４６】
チェックポイントログは、チェックポイントが生成されたことのログである。チェックポイントログは、チェックポイントを生成するトランザクションのＩＤと、そのチェックポイントの生成において採番された全てのＬＬＳＮと、生成されたチェックポイントのＩＤとを含む。データベースのリカバリーの際には、チェックポイントＩＤを使用して、リカバリーする時点を特定することができる。なお、チェックポイントＩＤは、チェックポイント生成時の時刻を表す値でもよい。
【００４７】
図７は、トランザクション集合の一例を示す。図８は、トランザクション集合の実行前と実行後のテーブル１１２Ａ及び１１２Ｂを示す。なお、図７（及び後述の図９〜図１１）では、トランザクションは「Tr.」と略記されている。また、以下の説明では、レコードは、行ＩＤとＶａｌ（値）を有していて、行ＩＤ：ＸのレコードをレコードＸと言い、行ＩＤ：ＹのレコードをレコードＹと言う。
【００４８】
図７に示すトランザクション集合は、第１種のトランザクション集合、すなわち、トランザクション実行順序によって結果が変化するトランザクションの集合である。トランザクション集合により、レコードＸ及びＹが更新される。
【００４９】
図８に示すように、レコードＸは、パーティション１１１Ａ中のテーブル１１２Ａにあるレコードであり、レコードＹは、別のパーティション１１１Ｂ中のテーブル１１２Ｂにあるレコードである。図７に示したトランザクション集合の実行前、レコードＸにおけるＶａｌ（値）は「１００」であり、レコードＹにおけるＶａｌ（値）も「１００」である。図７に示したトランザクション集合の実行により、レコードＸにおけるＶａｌ（値）は「１１０」に更新され、レコードＹにおけるＶａｌ（値）は「１２２」に更新される。
【００５０】
図７に示すトランザクション集合によれば、トランザクションＡ、Ｂ及びＥは、実行順序によって結果が変化する。それらは同一のレコードＸを更新するトランザクションだからである。同様に、トランザクションＡ、Ｃ及びＤも、実行順序によって結果が変化する。それらは同一のレコードＹを更新するトランザクションだからである。
【００５１】
しかし、トランザクションＢと、トランザクションＣ又はＤのどちらを先に実行しても結果が変化しない。それらは異なるレコードＸ、Ｙを更新するトランザクションだから、言い換えれば、更新されるレコードが共通でないからである。
【００５２】
そこで、ログに基づいてデータベースをリカバリーする際に最低限の必要なトランザクション実行順序を記録する必要がある。この実行したトランザクション集合に半順序を定義する実装方法は１つではなく、例えば必要最小限の順序関係を記録する方法として次の方法が考えられる。例えば図２に示したように、任意のチェックポイント１とチェックポイント１より後に生成されたチェックポイント２の間に実行されたトランザクションであって、第１種のトランザクション集合に属するトランザクション（トランザクションの実行順序によって結果が異なるトランザクション）のログには、コミットされた順序に従う順番（ログの生成順番）が記録される。一方、第２種のトランザクション集合に属するトランザクション（トランザクション間の実行順序によって結果が異ならず、チェックポイント１からチェックポイント２の間に実行されていればよいトランザクション）のログには、順番が記録されない。これにより、第１種のトランザクション集合のログについて、半順序を定義することができる。
【００５３】
本実施例では、１つのトランザクションの実行において、更新されるパーティション１１１別にＬＬＳＮが採番される。１つのパーティション１１１について採番されるＬＬＳＮは、そのパーティション１１１についてのシーケンス番号であり、他のパーティション１１１についてのＬＬＳＮとの関連性は無い。つまり、本実施例では、パーティション１１１別に一連のＬＬＳＮ（シーケンス番号）が採番され、採番されたＬＬＳＮがログに記録されることで、第１種のトランザクション集合について半順序が定義される。
【００５４】
具体的には、次のようにログが出力される。すなわち、前述したように、パーティション１１１とログファイル３０１が１：１で用意されており、パーティション１１１の更新履歴を含んだログは、そのパーティション１１１に対応したログファイル３０１に書き込まれる。また、１つのトランザクションの実行においてＮ個のパーティション１１１（Ｎは２以上の整数）が更新されることもあるが、その場合には、Ｎ個のパーティション１１１にそれぞれ対応したＮ個のログファイルにＮ個のログがそれぞれ書き込まれるのではなく、更新されたパーティション１１１の数（Ｎ）よりも少ない数のログファイル（Ｍ個のログファイル）３０１にそれぞれＭ個のログが書き込まれる。本実施例では、Ｍ＝１である。すなわち、本実施例では、Ｎの値（１つのトランザクションの実行において更新されたパーティション１１１の数）が幾つであっても、更新されたパーティション１１１のうちのいずれかの１つのパーティション１１１に対応した１つのログファイル３０１にログが書き込まれる。但し、そのログには、更新されたＮ個のパーティションにそれぞれ対応したＮ個のＬＬＳＮが書き込まれる。
【００５５】
図９は、実施例に係るログ出力の一例を示す。
【００５６】
図７に示したトランザクション集合の実行前、パーティション１１１ＡのＬＬＳＮは１−２０１、パーティション１１１ＢのＬＬＳＮの値は２−１００であるとする。もちろん、これは一例にすぎず、これ以外の値であることを排除するものではない。
【００５７】
まず、トランザクションＡの実行により、パーティション１１１ＡのレコードＸとパーティション１１１ＢのレコードＹの両方が更新される。このため、ＬＬＳＮ管理部１１５ＡからＬＬＳＮ＝１−２０１が採番され、ＬＬＳＮ管理部１１５ＢからＬＬＳＮ＝２−１００が採番される。この段階で、ＬＬＳＮ管理部１１５Ａ及び１１５ＢのそれぞれのＬＬＳＮが１インクリメントされ、その結果、ＬＬＳＮ管理部１１５ＡのＬＬＳＮが１−２０２となり、ＬＬＳＮ管理部１１５ＢのＬＬＳＮが２−１０１となってよい。また、パーティション１１１Ａ及び１１１Ｂが更新された場合、ログの出力先は、パーティション１１１Ａ及び１１１Ｂにそれぞれ対応したログファイル３０１Ａ及び３０１Ｂのうちのどちらかとなる（例えばラウンドロビンで順次出力先が切り替えられてもよいしどちらかに予め決められてもよい）。ここでは、ログファイルＡにログが出力される。このため、ＬＬＳＮ管理部１１５Ａからログファイルアドレスが取得され、ＬＬＳＮ管理部１１５Ａにおけるログファイルアドレスに、出力するログのサイズ分の値が加算される。トランザクションＡを実行したスレッド１１０Ａが、採番されたＬＬＳＮ＝１−２０１及びＬＬＳＮ＝２−１００、トランザクションＩＤ＝Ａ、及びレコードＸ及びＹの更新履歴をログに記録し、それらが記録されたログ９０１Ａを、ログファイル３０１Ａにおける、取得したログファイルアドレスに従う位置から、書き込む。具体的には、スレッド１１０Ａが、ログ９０１Ａをログバッファ１１４Ａに格納し、そのログ９０１Ａを書込み対象とし上記取得したログファイルアドレスを指定した書込み要求を発行する。ＯＳ１１７が、その書込み要求を受けて、その書込み要求を、ログファイル３０１Ａに対応したＩ／Ｏキュー２０１Ａに書き込み、Ｉ／Ｏキュー２０１Ａからその書込み要求を外部ストレージ装置４０２に送信する。外部ストレージ装置４０２が、その書込み要求を受けて、その書込み要求に従う書込み対象のログ９０１Ａをログファイル３０１Ａに書き込み、書込み要求の完了応答を返す。完了応答は、ＯＳ１１７を通じてＤＢＭＳ４１２に戻る。
【００５８】
次に、トランザクションＢの実行により、パーティション１１１ＡのレコードＸだけが更新される。このため、トランザクションＢを実行したスレッド１１０Ａが、ＬＬＳＮ管理部１１５ＡからＬＬＳＮ＝１−２０２を採番し（ＬＬＳＮ管理部１１５ＡのＬＬＳＮは１−２０３にインクリメントされ）、且つログファイルアドレスを取得し（ＬＬＳＮ管理部１１５Ａのログファイルアドレスに出力対象のログのサイズが加算され）、ＬＬＳＮ＝１−２０２、トランザクションＩＤ＝Ｂ、及びレコードＸの更新履歴を含んだログ９０１Ｂを、トランザクションＢの実行により更新されたパーティション１１１Ａに対応するログファイル３０１Ａ（取得したログファイルアドレス）に出力する。
【００５９】
また、トランザクションＣの実行により、パーティション１１１ＢのレコードＹだけが更新される。このため、トランザクションＣを実行したスレッド１１０Ｂが、ＬＬＳＮ管理部１１５ＢからＬＬＳＮ＝２−１０１を採番し（ＬＬＳＮ管理部１１５ＢのＬＬＳＮは２−１０２にインクリメントされ）、且つログファイルアドレスを取得し（ＬＬＳＮ管理部１１５Ｂのログファイルアドレスに出力対象のログのサイズが加算され）、ＬＬＳＮ＝２−１０１、トランザクションＩＤ＝Ｃ、及びレコードＹの更新履歴を含んだログ９０１Ｃを、トランザクションＣの実行により更新されたパーティション１１１Ｂに対応するログファイル３０１Ｂ（取得したログファイルアドレス）に出力する。
【００６０】
同様に、トランザクションＤが実行された場合には、ＬＬＳＮ管理部１１５ＢからＬＬＳＮ＝２−１０２が採番され、ＬＬＳＮ＝２−１０２を含んだログ９０１Ｄがログファイル３０１Ｂに書き込まれる。
【００６１】
最後に、トランザクションＥが実行された場合には、ＬＬＳＮ管理部１１５Ａ及び１１５ＢからそれぞれＬＬＳＮ＝１−１０３及び２−１０３が採番され、それら採番されたＬＬＳＮを含んだログ９０１Ｅが、ログファイル３０１Ｂに書き込まれる。
【００６２】
このようにログを出力することにより、それぞれのログにおけるＬＬＳＮを参照することで、トランザクションＡ−＞Ｂ−＞Ｅ、トランザクションＡ−＞Ｃ−＞Ｄ−＞Ｅの順序がリカバリー可能である。なお、本実施例では、同一のパーティションについて、第１のＬＬＳＮが第２のＬＬＳＮより大きいことは、第１のＬＬＳＮが第２のＬＬＳＮよりも後に（将来に）採番されたことを意味するが、一変形例では、第１のＬＬＳＮが第２のＬＬＳＮより大きいことは、第１のＬＬＳＮが第２のＬＬＳＮよりも前に（過去に）採番されたことを意味してもよい。つまり、ＬＬＳＮの大小関係から順序関係が特定できればよい。
【００６３】
一般に、いずれか１つのＬＬＳＮ管理部１１５のＬＬＳＮの大小関係でトランザクション間の順序関係（これを便宜上「≧」と表す）を定義すると、トランザクション全体の集合にいくつかの例外を除いて半順序が定まる。例えば、ＬＬＳＮ管理部１１５ＡのＬＬＳＮではトランザクションＡ->Ｂの順に並び（Ａ≧Ｂ）、ＬＬＳＮ管理部１１５ＢのＬＬＳＮではトランザクションＢ->Ａの順に並ぶ（Ｂ≧Ａ）ということが起こる。この場合には、トランザクションＡとＢの間には順序が定義されていないこととして取り扱われる。実際に、トランザクションＡとＢはそれぞれ更新を行ったレコードのロックをトランザクション終了まで解放しないため、このような事象が発生するのは、トランザクションＡ及びＢがそれぞれ更新するレコードが異なるレコードであるからであり、トランザクションＡとＢの実行順序はどちらでもかまわない。
【００６４】
以下、図７に示したトランザクション集合のログ出力の比較例１及び２を説明する。
【００６５】
図１０は、比較例１に係るログ出力の一例を示す。
【００６６】
比較例１は、５個のトランザクションＡ〜Ｅにそれぞれ対応した５個のログを単一ログファイルへ出力する例である。比較例１では、トランザクションの実行順にログがログファイルへ出力される。この場合、２以上のトランザクションが並行して実行されてもログ出力が逐次実行になってしまい、トランザクション間でＩ／Ｏリソース（例えば単一ログファイルに対応した単一Ｉ／Ｏキュー）の競合が発生してしまう。
【００６７】
本実施例では、複数のログファイルが用意され、且つ、複数のログファイルにそれぞれ対応した複数のＩ／Ｏリソース（例えばＩ／Ｏキュー）が用意される。これにより、Ｉ／Ｏリソースの競合を減らすことができる。
【００６８】
図１１は、比較例２に係るログ出力の一例を示す。
【００６９】
比較例２は、分散データベースにおいて行われているログ出力例である。トランザクションＢ、Ｃ及びＤのように、パーティション１１１Ａ及び１１１Ｂの一方のみを更新するトランザクションについては、ログの出力は、実施例と同様である。しかし、トランザクションＡ（及びＥ）のように、パーティション１１１Ａ及び１１１Ｂの両方を更新するトランザクションについては、更新されたパーティションと同数のログが同数のログファイルにそれぞれ出力される。このため、ログＩ／Ｏ数が実施例よりも多くなる。
【００７０】
すなわち、本実施例では、トランザクションが複数のパーティションを更新しても書き込まれるログの数は、更新されたパーティションの数よりも少ない。そのため、ログＩ／Ｏ数を抑えることができる。
【００７１】
本実施例では、上述した通り、トランザクションによって順序が定義されない場合がある。例えば、トランザクションＢとトランザクションＣはどちらが先にトランザクション実行が完了したかログ上は不定である。従って、一般には、最新状態以外の任意のタイミングの状態にデータベースをリカバリーすることはできない。そこで、本実施例では、前述したように、チェックポイントを生成することにより、ある時点のデータベースの状態を記録しリカバリーすることが可能である。
【００７２】
以下、実施例において行われる処理を説明する。
【００７３】
図１２は、トランザクション処理のフローチャートである。なお、以下の説明では、１つのトランザクションＡを例に取り説明する。そのため、そのトランザクションＡを実行するスレッドはスレッド１１０Ａであり、そのトランザクションＡにより更新されるパーティションはパーティション１１１Ａ及び１１１Ｂであり、パーティション１１１Ａ及び１１１Ｂにそれぞれ対応したログファイルはログファイル３０１Ａ及び３０１Ｂである。
【００７４】
スレッド１１０Ａが、トランザクションＡが開始されると、トランザクションＡに対応した指示（クエリ中の指示）に基づいて、パーティション１１１Ａ及び１１１Ｂの各々について、参照／更新セットの生成を行う（Ｓ３０１）。参照／更新セットは、レコードの参照（パーティションに対する読出し要求）とレコードの更新（パーティションに対する書込み要求）とのセットである。参照／更新セットは、パーティションの更新のための要求セットであるが、Ｓ３０１の時点では、パーティション１１１Ａ及び１１１Ｂの変更は行われず、トランザクションＡに対応したローカルメモリ領域（メインメモリ４６１上に確保された領域（図示せず））に参照／更新セットが保持される。
【００７５】
次に、スレッド１１０Ａが、コミット判定を行う（Ｓ３０２）。コミット判定は、例えば、トランザクションＡが参照／更新セットに基づいて行うパーティション１１１Ａ及び１１１Ｂへの変更が他のトランザクションとの整合性を保てているかどうかをデータベースのアイソレーションレベルに応じて行われる。
【００７６】
コミット判定がＮＧの場合（Ｓ３０３：Ｎｏ）、スレッド１１０Ａは、アボート処理を行う（Ｓ３０７）。
【００７７】
コミット判定がＯＫの場合（Ｓ３０３：Ｙｅｓ）、スレッド１１０Ａは、ログ出力処理を実行する（Ｓ３０４）。次に、スレッド１１０Ａは、参照／更新セットに基づいてパーティション１１１Ａ及び１１１Ｂをそれぞれ更新し（Ｓ３０５）、コミット完了通知を出して（Ｓ３０６）、トランザクションを終了する。
【００７８】
図１３は、ログ出力処理（図１２のＳ３０４）のフローチャートである。
【００７９】
トランザクションＡを実行しているスレッド１１０Ａと対応付けられているログファイル３０１ＡのＬＬＳＮ管理部１１５は、ＬＬＳＮ管理部１１５Ａである。スレッド１１０Ａは、ＬＬＳＮ管理部１１５Ａからログファイルアドレスを取得し、ＬＬＳＮ管理部１１５ＡのログファイルアドレスにトランザクションＡのログサイズを加算する（Ｓ４０１）。なお、この一連の動作の前に、スレッド１１０Ａが、ＬＬＳＮ管理部１１５Ａのロックを取得し、動作後にロックを解放する。ＬＬＳＮ管理部１１５及びログファイル３０１がスレッド１１０Ａに対応付けられていない場合には、スレッド１１０Ａは、任意のＬＬＳＮ管理部１１５を選択し、その選択したＬＬＳＮ管理部１１５について同様の処理を行う。ただし、後述するリカバリー処理においてデッドロックを回避するためには、Ｓ４０１で操作されたＬＬＳＮ管理部１１５に対応するログファイル３０１にログが書き込まれる必要がある。
【００８０】
次に、スレッド１１０Ａは、トランザクションＡの実行により更新されたパーティション１１１Ａ又は１１１ＢのＬＬＳＮを採番する（Ｓ４０２）。データベースのアイソレーションレベルやデータ構造によっては、トランザクションＡの実行により参照されたパーティションのＬＬＳＮも採番する必要がある場合がある。
【００８１】
スレッド１１０Ａは、更新されたパーティション１１１Ａ及び１１１ＢのうちＬＬＳＮが採番されていないパーティションがあれば（Ｓ４０３：Ｎｏ）、その採番されていないパーティションについてＳ４０２を行う。一方、更新された全てのパーティション１１１Ａ及び１１１ＢのＬＬＳＮが採番されたのであれば（Ｓ４０３：Ｎｏ）、スレッド１１０Ａは、ログ９０１Ａ（図９参照）を生成しそのログ９０１Ａをログバッファ１１４Ａに書き込み、そのログ９０１Ａの書込み要求（ＬＬＳＮ管理部１１５Ａから取得したログファイルアドレスを指定した書込み要求）を発行する（Ｓ４０４）。スレッド１１０Ａは、外部ストレージ装置４０２からＩ／Ｏアダプタ４１３を介して書込み完了通知を受信した場合に書込み完了とし（Ｓ４０５）、ログ出力フローを終了する。
【００８２】
図１４は、チェックポイント生成処理のフローチャートである。図１４の説明では、チェックポイントを生成するスレッドがスレッド１１０Ａであるとする。
【００８３】
スレッド１１０Ａは、まず、新規コミット開始を禁止する（Ｓ５０１）。具体的には、スレッド１１０Ａは、スレッド共有の領域に新規コミット禁止を表すフラグビットを予め置き、初期値を０とする。スレッド１１０Ａは、新規コミット開始を禁止する際に、該フラグビットを１に変更する。トランザクションを実行するスレッドは、コミット処理実行開始時に、該フラグビットを確認し、該フラグビットが０の時に限りコミット処理を実行し、該フラグビットが１の時には該フラグビットが０に変更されるまで待ち状態となる。スレッド１１０Ａの新規コミット開始禁止処理以降、いずれのスレッド１１０もコミットを開始することできなくなり、コミット中のトランザクションについてのみコミットが進む。
【００８４】
スレッド１１０Ａは、コミット中のトランザクション数が０になるまで待つ（Ｓ５０２：Ｎｏ）。コミット中のトランザクション数が０になると（Ｓ５０２：Ｙｅｓ）、スレッド１１０Ａは、任意に選択したログファイル３０１（例えば３０１Ａ）に対応するＬＬＳＮ管理部１１５（例えば１１５Ａ）から、ＬＬＳＮを採番し且つログファイルアドレスを取得し、チェックポイントログのサイズ分の値を、そのＬＬＳＮ管理部１１５（例えば１１５Ａ）内のログファイルアドレスに加算する（Ｓ５０３）。
【００８５】
さらに、スレッド１１０Ａは、残りのログファイルに対応する全てのＬＬＳＮをそれぞれ採番する（Ｓ５０４）。スレッド１１０Ａは、Ｓ５０３で採番したＬＬＳＮと、Ｓ５０４で採番したＬＬＳＮと、チェックポイントＩＤとを含んだチェックポイントログを完成させる。スレッド１１０Ａは、Ｓ５０３で取得したログファイルアドレスを指定したログ書込み要求（書込み対象は上記完成したチェックポイントログ）を、上記任意に選択したログファイル３０１（例えば３０１Ａ）に対応したログバッファ１１４（例えば１１４Ａ）に書き込み、ログバッファ１１４（例えば１１４Ａ）からログ書込み要求を発行する（Ｓ５０５）。
【００８６】
次に、スレッド１１０Ａは、データベースのバックアップをする条件が満たされているか否かを判断する（Ｓ５０６）。その条件は、チェックポイント生成が行われた回数がＮ回（Ｎは自然数）に達したことでもよいし、直前回のバックアップ時刻から一定時間経過したことでもよい。
【００８７】
Ｓ５０６の判断結果が真の場合（Ｓ５０６：Ｙｅｓ）、スレッド１１０Ａは、データベースのバックアップ、すなわち、メインメモリ４１６上のデータベース（各パーティション１１１のテーブル１１２及びインデックス１１３）を、上記チェックポイントログに含められたチェックポイントＩＤに関連付け、そのチェックポイントＩＤが関連付けられたデータベース（イメージ）を、外部ストレージ装置４０２に格納する（Ｓ５０７）。この動作は、すべてのチェックポイントで必ずしも必要ではない。しかし、チェックポイントログの書込みの際にデータベースのバックアップが行われることで、チェックポイント生成時点のデータベース（或いは、チェックポイント時点近傍の時点のデータベース）を高速にリカバリーすることができる。なお、バックアップされたデータベース（イメージ）と、チェックポイントＩＤと、そのチェックポイントＩＤを含んだチェックポイントログの書込み先アドレスとの対応関係を含んだ情報（以下、チェックポイント管理情報）は、スレッドにより、データベースサーバ４０１の中又は外の記憶領域（例えばメインメモリ４１６）に格納されてよい。
【００８８】
バックアップ完了後、又は、Ｓ５０６の判断結果が偽の場合（Ｓ５０６：Ｎｏ）、スレッド１１０Ａは、新規コミット開始の禁止を解除し（Ｓ５０８）、チェックポイント生成処理が終了する。具体的には、スレッド１１０Ａは、新規コミット禁止を表すフラグビットを１から０に変更する。
【００８９】
図１５は、データベースのリカバリー処理（親）のフローチャートである。図１５（及び図１６）の説明では、データベースをリカバリーするスレッドがスレッド１１０Ａであるとする。
【００９０】
スレッド１１０Ａが、チェックポイント管理情報を基に、指定されたチェックポイントのチェックポイントＩＤに関連付けられたデータベース（バックアップイメージ）、又は、指定されたチェックポイントのチェックポイントＩＤよりも過去に生成されたチェックポイントＩＤに関連付けられたデータベース（バックアップイメージ）を、外部ストレージ装置４０２からメインメモリ４１６上にロードする（Ｓ６０１）。チェックポイントＩＤは、クエリ発行元から受けたクエリで指定されていてもよいし、データベースサーバ４０１に接続された図示しない計算機（例えば管理計算機）より指定されてもよい。
【００９１】
スレッド１１０Ａは、チェックポイント管理情報を基に、そのデータベースに関連付けられているチェックポイントＩＤを含んだチェックポイントログを、そのログのアドレス（ログファイル）から取得して、そのログ中の各ＬＬＳＮを、そのＬＬＳＮに対応したパーティション１１１中のＬＬＳＮ管理部１１５のＬＬＳＮに設定する（Ｓ６０２）。例えば、先頭番号が１であるＬＬＳＮは、ＬＬＳＮ管理部１１５ＡのＬＬＳＮに設定され、先頭番号が２であるＬＬＳＮは、ＬＬＳＮ管理部１１５ＢのＬＬＳＮに設定される。
【００９２】
スレッド１１０Ａは、ロードされたデータベースに関連付けられているチェックポイントＩＤと指定されたチェックポイントＩＤが違っていれば（Ｓ６０３：Ｎｏ）、各パーティション１１１に対応したスレッド１１０に、リカバリー処理（子）を実行させる（Ｓ６０４）。パーティション１１１Ａについては、スレッド１１０Ａが、リカバリー処理（子）も実行する。スレッド１１０Ａは、全てのリカバリー処理（子）が終了となるのを待って（Ｓ６０５：Ｙｅｓ）、リカバリー処理（親）を終了する。
【００９３】
一方、スレッド１１０Ａは、ロードされたデータベースに関連付けられているチェックポイントＩＤと指定されたチェックポイントＩＤが同じであれば（Ｓ６０３：Ｙｅｓ）、Ｓ６０４及び６０５を行うこと無しに、リカバリー処理（親）を終了する。なぜなら、Ｓ６０１でロードされたデータベースが、リカバリーされるべきデータベースだからである。
【００９４】
図１６は、データベースのリカバリー処理（子）のフローチャートである。
【００９５】
リカバリー処理（子）は、各パーティション１１１について実行される。以下、１つのパーティション１１１Ｂを例に取り、リカバリー処理（子）を説明する。
【００９６】
スレッド１１０Ｂは、リカバリー処理（親）において設定されたＬＬＳＮ（ＬＬＳＮ管理部１１５Ｂ内のＬＬＳＮ）を、バックアップ時点のＬＬＳＮとして取得する（Ｓ７００）。以下、パーティション１１１Ｂに対応したログファイル３０１Ｂにおいて、Ｓ７０５で取得したＬＬＳＮよりも大きなＬＬＳＮであって、指定されたチェックポイントＩＤより古いＬＬＳＮ（指定されたチェックポイントＩＤの生成時点よりも過去に採番されたＬＬＳＮ）を含んだログを、「バックアップ後ログ」と言うことにする。バックアップ後ログのうち最も大きいＬＬＳＮを含むバックアップ後ログは、ログファイル３０１Ｂの終端のログであることもある。また、バックアップ後ログのうち、パーティション１１１ＢのＬＬＳＮの他に、パーティション１１１ＢのＬＬＳＮ以外のＬＬＳＮを含んでいるバックアップ後ログもあり得る。以下、パーティション１１１ＢのＬＬＳＮを「該当ＬＬＳＮ」と言い、パーティション１１１ＢのＬＬＳＮ以外のＬＬＳＮを「非該当ＬＬＳＮ」と言う。
【００９７】
スレッド１１０Ｂは、パーティション１１１Ｂに対応したログファイル３０１Ｂにおける未処理のバックアップ後ログのうち最小の該当ＬＬＳＮを含んだバックアップ後ログを特定する（Ｓ７０１）。以下、Ｓ７０１で特定されたバックアップ後ログを「対象ログ」と言う。
【００９８】
スレッド１１０Ｂは、対象ログ中の該当ＬＬＳＮが、直前回のＳ７０５又はＳ７０６で処理されたバックアップ後ログ中の該当ＬＬＳＮの次の該当ＬＬＳＮ（例えば、直前回のＳ７０５又はＳ７０６で処理されたバックアップ後ログ中の該当ＬＬＳＮに１が加算された該当ＬＬＳＮ）か否かを判断する（Ｓ７０２）。
【００９９】
Ｓ７０２の判断結果が真の場合（Ｓ７０２：Ｙｅｓ）、スレッド１１０Ｂは、対象ログに非該当ＬＬＳＮが含まれているか否かを判断する。
【０１００】
Ｓ７０４の判断結果が真の場合（Ｓ７０４：Ｙｅｓ）、スレッド１１０Ｂは、対象ログ中の更新履歴のうち、パーティション１１１Ｂについての更新をパーティション１１１Ｂに対して実行し、且つ、対象ログのコピーを、非該当ＬＬＳＮに対応するパーティションに対応したスレッドに（非該当ＬＬＳＮに対応するパーティションのリカバリー処理（子）を実行しているスレッド）に転送する（Ｓ７０５）。例えば、非該当ＬＬＳＮの先頭番号が１の場合、対象ログのコピーは、スレッド１１０Ａに転送される。非該当ＬＬＳＮが２以上の場合、対象ログのコピーは、２以上の非該当ＬＬＳＮに対応した２以上のパーティションに対応するスレッドにそれぞれ転送される。
【０１０１】
Ｓ７０４の判断結果が偽の場合（Ｓ７０４：Ｎｏ）、スレッド１１０Ｂは、対象ログ中の更新履歴通りの更新をパーティション１１１Ｂに対して実行する（Ｓ７０６）。
【０１０２】
Ｓ７０２の判断結果が偽の場合（Ｓ７０２：Ｎｏ）、実行すべき更新の履歴を含んだログが、ログファイル３０１Ｂ以外のログファイルに格納されているということである。このため、スレッド１１０Ｂは、Ｓ７０５とは逆に、別のスレッドから、実行すべき更新の履歴を含んだログ（直前回のＳ７０５又はＳ７０６で処理されたバックアップ後ログ中の該当ＬＬＳＮの次の該当ＬＬＳＮを含んだログ）のコピーを待ち、そのログのコピーを受信した場合（Ｓ７０３）、そのログのコピー中の更新履歴のうちの、パーティション１１１Ｂについての更新をパーティション１１１Ｂに対して実行する（Ｓ７０６）。
【０１０３】
スレッド１１０Ｂは、Ｓ７０５又はＳ７０６の後、未処理のバックアップ後ログが未だ残っているか否かを判断する（Ｓ７０７）。未処理のバックアップ後ログがあれば（Ｓ７０７：Ｙｅｓ）、再度Ｓ７０１が行われ、未処理のバックアップ後ログがなければ（Ｓ７０７：Ｙｅｓ）、パーティション１１１Ｂについてのリカバリー処理（子）が終了となる。
【０１０４】
以上、一実施例を説明したが、本発明はその実施例に限られない。
【０１０５】
例えば、ＤＢＭＳとして、インメモリデータベース以外のＤＢＭＳが採用されてもよい。データベースを構成する複数のデータベース部分は、異なる複数のデータベースサーバに分散していてもよいし、複数のデータベース部分のうちの少なくとも１つが、外部ストレージ装置に格納されていてもよい。
【０１０６】
また、ログファイル３０１（及びデータベース部分）は、外部ストレージ装置４０２に代えてデータベースサーバ４０１内の記憶デバイス４１５に格納されていてもよい。
【０１０７】
また、第２種のトランザクション集合に属するトランザクションのログについても、順番（ＬＬＳＮのようなログの生成順番）が記録されてもよい。しかし、実施例のように、第２種のトランザクション集合に属するトランザクションのログにはＬＬＳＮが記録されないようにすることで、ログを生成するがＬＬＳＮを採番しなくてもよいことがあり、結果として、プロセッサ４１４の負荷の軽減が期待できる。
【０１０８】
また、ログファイル３０１に代えて別のログ格納領域が採用されてもよい。例えば、ログ格納領域は、外部ストレージ装置４０２、メインメモリ４１６、又は記憶デバイス４１５内の領域であり、その領域に、ログ毎に生成されたログファイルが書き込まれてもよい。つまり、上記実施例では１つのログファイルに複数のログが書き込まれるが、一変形例では、１つのログにつき１つのログファイルがログ格納領域に書き込まれてもよい。
【０１０９】
また、ＬＬＳＮは、対応するＬＬＳＮ管理部１１５のＩＤと、タイムスタンプとの組み合わせでもよい。
【０１１０】
また、同一のチェックポイントについて２以上のチェックポイントログが生成され、それら２以上のチェックポイントログに、全てのＬＬＳＮ管理部１１５に対応した全てのＬＬＳＮが記録されてもよい。ただし、同一のチェックポイントについてのチェックポイントログの数は、パーティション１１１の数よりも少ないことが望ましい。ログＩ／Ｏ数の削減のためである。なお、チェックポイントログは、ログファイル以外の領域（例えばメインメモリ４１６）に格納されてもよい。
【０１１１】
また、リカバリー処理は、スレッド（クエリ実行部）に代えて、クエリ実行部とは別に設けられたリカバリー実行部（図示せず）によって行われてもよい。つまり、上記実施例では、クエリ実行部がリカバリー実行部を兼ねているが、クエリ実行部とは別にリカバリー実行部が設けられてもよい。
【符号の説明】
【０１１２】
４０１：データベースサーバ  ４０２：外部ストレージ装置
【図１】
2015111152.tif 000003
【図２】
2015111152.tif 000004
【図３】
2015111152.tif 000005
【図４】
2015111152.tif 000006
【図５】
2015111152.tif 000007
【図６】
2015111152.tif 000008
【図７】
2015111152.tif 000009
【図８】
2015111152.tif 000010
【図９】
2015111152.tif 000011
【図１０】
2015111152.tif 000012
【図１１】
2015111152.tif 000013
【図１２】
2015111152.tif 000014
【図１３】
2015111152.tif 000015
【図１４】
2015111152.tif 000016
【図１５】
2015111152.tif 000017
【図１６】
2015111152.tif 000018
【手続補正書】
【提出日】平成29年1月11日(2017.1.11)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データベースを管理するデータベース管理システムであって、
前記データベースへのクエリをクエリ発行元から受け付けるクエリ受付部と、
前記受け付けたクエリに関する情報を基に、複数のトランザクションを実行し、トランザクション毎に、トランザクションのログを生成し、前記生成したログをログ格納領域に書き込むためのログ書込み要求を発行するクエリ実行部と、
分割された前記データベースである複数のデータベース部分、の各々について、ログの順番を管理する順番管理部と
を有し、
各順番管理部により管理される順番は、その順番管理部に対応したデータベース部分を更新したトランザクションのログの生成の都度に更新され、
前記複数のデータベース部分のうちＮ個のデータベース部分を更新したトランザクションのログとして（Ｎは２以上の整数）、Ｍ個のログが生成され（ＭはＮ以下であり１以上の整数）、
前記Ｍ個のログのうちの少なくとも１つが、前記Ｎ個のデータベース部分にそれぞれ対応したＮ個の順番のうちの２以上の順番を含み、
前記クエリ実行部は、トランザクション実行順序によって結果が異なるトランザクションの集合である第１種トランザクション集合に属するトランザクション毎に、トランザクションのログに、ログの順番を記録する、
データベース管理システム。
【請求項２】
前記Ｎ個のデータベース部分にそれぞれ対応したＮ個のログ格納領域があり、
１つの順番を含んだログは、その順番に対応したログ格納領域に書き込まれ、
前記２以上の順番を含んだログは、前記２以上の順番にそれぞれ対応した２以上のログ格納領域のうちのいずれかに書き込まれる、
請求項１記載のデータベース管理システム。
【請求項３】
Ｍ＝１である、
請求項１又は２記載のデータベース管理システム。
【請求項４】
前記複数のデータベース部分にそれぞれ対応した複数のＩ／Ｏ（Input/Output）リソースがあり、
１つの順番を含んだログは、その順番に対応したＩ／Ｏリソースを通じて、そのＩ／Ｏリソースに対応したログ格納領域に書き込まれ、
前記２以上の順番を含んだログは、前記２以上の順番にそれぞれ対応した２以上のＩ／Ｏリソースのいずれかを通じて、そのＩ／Ｏリソースに対応したログ格納領域に書き込まれる、
請求項１乃至３のうちのいずれか１項に記載のデータベース管理システム。
【請求項５】
データベースを管理するデータベース管理システムであって、
前記データベースへのクエリをクエリ発行元から受け付けるクエリ受付部と、
前記受け付けたクエリに関する情報を基に、複数のトランザクションを実行し、トランザクション毎に、トランザクションのログを生成し、前記生成したログをログ格納領域に書き込むためのログ書込み要求を発行するクエリ実行部と、
分割された前記データベースである複数のデータベース部分、の各々について、ログの順番を管理する順番管理部と、
指定された第１のチェックポイントの時点におけるデータベースをリカバリーするリカバリー実行部と
を有し、
各順番管理部により管理される順番は、その順番管理部に対応したデータベース部分を更新したトランザクションのログの生成の都度に更新され、
前記クエリ実行部は、トランザクション実行順序によって結果が異なるトランザクションの集合である第１種トランザクション集合に属するトランザクション毎に、トランザクションのログに、ログの順番を記録し、
前記クエリ実行部は、チェックポイント毎に、全ての順番管理部にそれぞれ対応した全ての順番を含んだ１以上のチェックポイントログを生成し、
前記クエリ実行部は、複数のチェックポイントのうちの少なくとも１つのチェックポイントにおいてデータベースをバックアップし、
前記リカバリー実行部は、
バックアップされたデータベースのうち、前記第１のチェックポイントと同じ、又は、前記第１のチェックポイントよりも過去のチェックポイントである第２のチェックポイントに対応したデータベースをロードし、
前記第２のチェックポイントに対応したチェックポイントログ中の各順番を、その順番に対応する順番管理部に設定する、
データベース管理システム。
【請求項６】
前記リカバリー実行部は、前記第２のチェックポイントと前記第１のチェックポイントが異なっていれば、ロードされたデータベースのデータベース部分毎に、データベース部分に対応したログ格納領域に格納されている、前記第２のチェックポイントから前記第１のチェックポイントまでの１以上のログを、ログ中の順番の小さい順に用いて、データベース部分をリカバリーし、
前記リカバリー実行部は、データベース部分毎のリカバリーにおいて、そのデータベース部分に対応した順番である該当順番と該当順番以外の１以上の順番である１以上の非該当順番とを含んだログについては、そのログに従う更新を、そのデータベース部分と、前記１以上の非該当順番にそれぞれ対応する１以上のデータベース部分とに対して実行し、
前記リカバリー実行部は、データベース部分毎のリカバリーにおいて、そのデータベース部分に対応したログ中の順番が、直前回に用いたログ中の順番の次の番号でなければ、前記次の番号を含んだログを待つ、
請求項５記載のデータベース管理システム。
【請求項７】
チェックポイント毎に、チェックポイントログの数は、データベース部分の数よりも少ない、
請求項５又は６記載のデータベース管理システム。
【請求項８】
前記クエリ実行部は、トランザクション実行順序が結果に影響を与えないトランザクションの集合である第２種トランザクション集合に属するトランザクションのログには、順番を記録しない、
請求項１乃至７のうちのいずれか１項に記載のデータベース管理システム。
【請求項９】
前記クエリ実行部は、前記クエリに関する情報を基に、実行対象のトランザクションが、前記第１トランザクション集合と前記第２種トランザクション集合とのどちらに属するかを判断する、
請求項８記載のデータベース管理システム。
【請求項１０】
前記受け付けたクエリに基づいて前記受け付けたクエリを実行するために必要な１以上のデータベースオペレーションと前記１以上のデータベースオペレーションの実行手順とを表す情報を含んだクエリ実行プランを生成するクエリ実行プラン生成部を更に有し、
前記クエリに関する情報は、前記クエリ実行プランを表す情報である、
請求項９記載のデータベース管理システム。
【請求項１１】
前記データベースは、メインメモリ上に存在する、
請求項１乃至１０のうちのいずれか１項に記載のデータベース管理システム。
【請求項１２】
データベースを管理する計算機システムであって、
ログ格納領域に接続されたインターフェイスデバイスと、
前記インターフェイスデバイスに接続されたプロセッサと
を有し、
前記プロセッサは、複数のトランザクションを実行し、複数のトランザクションの実行において、トランザクション毎に、トランザクションのログを生成し、生成したログをログ格納領域に格納し、
前記プロセッサは、少なくとも、トランザクション実行順序によって結果が異なるトランザクションの集合に属するトランザクションのログには、ログの順番を記録し、
前記プロセッサは、分割された前記データベースである複数のデータベース部分、の各々について、ログの順番を管理し、
各データベース部分について管理される順番は、そのデータベース部分を更新したトランザクションのログの生成の都度に更新され、
前記複数のデータベース部分のうちＮ個のデータベース部分を更新したトランザクションのログとして（Ｎは２以上の整数）、Ｍ個のログが生成され（ＭはＮ以下であり１以上の整数）、
前記Ｍ個のログのうちの少なくとも１つが、前記Ｎ個のデータベース部分にそれぞれ対応したＮ個の順番のうちの２以上の順番を含む、
計算機システム。
【請求項１３】
データベースを管理する計算機システムであって、
ログ格納領域に接続されたインターフェイスデバイスと、
前記インターフェイスデバイスに接続されたプロセッサと
を有し、
前記プロセッサは、複数のトランザクションを実行し、複数のトランザクションの実行において、トランザクション毎に、トランザクションのログを生成し、生成したログをログ格納領域に格納し、
前記プロセッサは、少なくとも、トランザクション実行順序によって結果が異なるトランザクションの集合に属するトランザクションのログには、ログの順番を記録し、
前記プロセッサは、分割された前記データベースである複数のデータベース部分、の各々について、ログの順番を管理し、
各データベース部分について管理される順番は、そのデータベース部分を更新したトランザクションのログの生成の都度に更新され、
前記プロセッサは、チェックポイント毎に、全てのデータベース部分にそれぞれ対応した全ての順番を含んだ１以上のチェックポイントログを生成し、
前記プロセッサは、複数のチェックポイントのうちの少なくとも１つのチェックポイントにおいてデータベースをバックアップし、
前記プロセッサは、指定された第１のチェックポイントの時点におけるデータベースのリカバリーを実行するようになっており、
前記プロセッサは、前記リカバリーにおいて、
バックアップされたデータベースのうち、前記第１のチェックポイントと同じ、又は、前記第１のチェックポイントよりも過去のチェックポイントである第２のチェックポイントに対応したデータベースをロードし、
前記第２のチェックポイントに対応したチェックポイントログ中の各順番を、その順番に対応するデータベース部分について設定する、
計算機システム。
【請求項１４】
データベースを管理するデータベース管理方法であって、
コンピュータが、複数のトランザクションの実行において、トランザクション毎に、トランザクションのログを生成し、
コンピュータが、生成したログをログ格納領域に格納し、
コンピュータが、少なくとも、トランザクション実行順序によって結果が異なるトランザクションの集合に属するトランザクションについて生成されたログに、ログの順番を記録し、
コンピュータが、分割された前記データベースである複数のデータベース部分、の各々について、ログの順番を管理し、
各データベース部分について管理される順番は、そのデータベース部分を更新したトランザクションのログの生成の都度に更新され、
前記複数のデータベース部分のうちＮ個のデータベース部分を更新したトランザクションのログとして（Ｎは２以上の整数）、Ｍ個のログが生成され（ＭはＮ以下であり１以上の整数）、
前記Ｍ個のログのうちの少なくとも１つが、前記Ｎ個のデータベース部分にそれぞれ対応したＮ個の順番のうちの２以上の順番を含む、
データベース管理方法。
【請求項１５】
データベースを管理するデータベース管理方法であって、
コンピュータが、複数のトランザクションの実行において、トランザクション毎に、トランザクションのログを生成し、
コンピュータが、生成したログをログ格納領域に格納し、
コンピュータが、少なくとも、トランザクション実行順序によって結果が異なるトランザクションの集合に属するトランザクションについて生成されたログに、ログの順番を記録し、
コンピュータが、分割された前記データベースである複数のデータベース部分、の各々について、ログの順番を管理し、
各データベース部分について管理される順番は、そのデータベース部分を更新したトランザクションのログの生成の都度に更新され、
コンピュータが、チェックポイント毎に、全てのデータベース部分にそれぞれ対応した全ての順番を含んだ１以上のチェックポイントログを生成し、
コンピュータが、複数のチェックポイントのうちの少なくとも１つのチェックポイントにおいてデータベースをバックアップし、
コンピュータが、指定された第１のチェックポイントの時点におけるデータベースのリカバリーを実行するようになっており、
コンピュータが、前記リカバリーにおいて、
バックアップされたデータベースのうち、前記第１のチェックポイントと同じ、又は、前記第１のチェックポイントよりも過去のチェックポイントである第２のチェックポイントに対応したデータベースをロードし、
前記第２のチェックポイントに対応したチェックポイントログ中の各順番を、その順番に対応するデータベース部分について設定する、
データベース管理方法。
【国際調査報告】
2015111152.tif 000019
2015111152.tif 000020
2015111152.tif 000021
2015111152.tif 000022