(57)【特許請求の範囲】
【請求項１】
ログ情報と、そのログ情報に所定の順序で続くログ情報を参照することが可能な状態を表す可達状態であるか、または、参照することが不可能な状態を表す不可達状態であるかを表す可達情報、及び、前記ログ情報のサイズを表すサイズ情報を含む制御情報とを関連付けた状態で記憶可能な記憶領域が論理的に前記順序に並べられたログバッファと、
前記ログバッファにおいて、前記ログ情報を記録する記録処理を割り当て済みの記憶領域と、前記記録処理が割り当てられていない記憶領域との境界を表す記憶領域に記録されている第１制御情報から前記可達情報を読み取り、前記第１制御情報に含まれている前記可達情報に前記不可達状態を設定するとともに、前記第１制御情報に含まれている前記サイズ情報にあるサイズを設定し、読み取った前記可達情報が前記可達状態である場合に、前記ログバッファにおける前記順序に従い、前記サイズ情報が所定の条件を満たすことを表す第２制御情報を特定し、特定した第２制御情報に含まれている可達情報を前記可達状態に設定する可達情報設定手段と
を備える制御情報設定装置。
【請求項２】
前記制御情報は、さらに、前記ログ情報を記憶する処理が実行されている状態を表す処理中状態であるか、または、前記ログ情報を記憶する処理が実行されていない状態を表す非処理中状態であるかを表す記録操作状態情報を含み、
前記第１制御情報に含まれている前記記録操作状態情報に、前記処理中状態を設定し、前記第１制御情報に関する前記ログ情報を、前記ログバッファに記録する処理が完了した場合に、前記第１制御情報に含まれている前記記録操作状態情報に、前記非処理中状態を設定するログ情報保存手段を
さらに備える請求項１に記載の制御情報設定装置。
【請求項３】
前記制御情報は、さらに、前記ログ情報を記憶する処理が完了前の状態を表す未完了状態であるか、または、前記ログ情報を記憶する処理が完了した状態を表す完了状態であるかを表す記録操作完了情報を含み、
前記ログ情報保存手段は、前記あるサイズのログ情報を、前記可達情報設定手段によって読み取った前記境界が表す第１記憶領域に記録した後に、前記第２制御情報から前記記録操作完了情報を読み取り、読み取った前記記録操作完了情報が前記未完了状態である場合に、前記ログバッファにおいて、前記ログバッファにおける前記順序に従い、前記サイズ情報が前記所定の条件を満たす、または、記録操作状態情報が前記処理中状態であることを表す第３制御情報を特定し、特定した前記第３制御情報に含まれている前記記録操作完了情報に、前記未完了状態を設定する
請求項２に記載の制御情報設定装置。
【請求項４】
前記ログバッファにおいて、前記第２制御情報を記録した位置を特定する可達位置情報更新手段
をさらに備え、
前記ログ情報保存手段は、前記位置が、前記境界と前記あるサイズとを加算した値以上になるまで待ち合わせ処理を実行する
請求項３に記載の制御情報設定装置。
【請求項５】
前記ログバッファにおいて、前記第３制御情報を記録している位置を特定する完了位置更新手段
をさらに備える請求項３または請求項４に記載の制御情報設定装置。
【請求項６】
複数の前記ログ情報保存手段が入出力可能なメモリ
を備え、
可達位置情報更新手段は、特定した前記位置を前記メモリに格納する
請求項４に記載の制御情報設定装置。
【請求項７】
前記ログバッファは、不揮発性記録媒体における記憶領域である
請求項１乃至請求項６のいずれかに記載の制御情報設定装置。
【請求項８】
情報処理装置によって、ログ情報と、そのログ情報に所定の順序で続くログ情報を参照することが可能な状態を表す可達状態であるか、または、参照することが不可能な状態を表す不可達状態であるかを表す可達情報、及び、前記ログ情報のサイズを表すサイズ情報を含む制御情報とを関連付けた状態で記憶可能な記憶領域が論理的に前記順序に並べられたログバッファに関して、
前記ログバッファにおいて、前記ログ情報を記録する記録処理を割り当て済みの記憶領域と、前記記録処理が割り当てられていない記憶領域との境界を表す記憶領域に記録されている第１制御情報から前記可達情報を読み取り、前記第１制御情報に含まれている前記可達情報に前記不可達状態を設定するとともに、前記第１制御情報に含まれている前記サイズ情報にあるサイズを設定し、読み取った前記可達情報が前記可達状態である場合に、前記ログバッファにおける前記順序に従い、前記サイズ情報が所定の条件を満たすことを表す第２制御情報を特定し、特定した第２制御情報に含まれている可達情報を前記可達状態に設定する制御情報設定方法。
【請求項９】
ログ情報と、そのログ情報に所定の順序で続くログ情報を参照することが可能な状態を表す可達状態であるか、または、参照することが不可能な状態を表す不可達状態であるかを表す可達情報、及び、前記ログ情報のサイズを表すサイズ情報を含む制御情報とを関連付けた状態で記憶可能な記憶領域が論理的に前記順序に並べられたログバッファに関して、
前記ログバッファにおいて、前記ログ情報を記録する記録処理を割り当て済みの記憶領域と、前記記録処理が割り当てられていない記憶領域との境界を表す記憶領域に記録されている第１制御情報から前記可達情報を読み取り、前記第１制御情報に含まれている前記可達情報に前記不可達状態を設定するとともに、前記第１制御情報に含まれている前記サイズ情報にあるサイズを設定し、読み取った前記可達情報が前記可達状態である場合に、前記ログバッファにおける前記順序に従い、前記サイズ情報が所定の条件を満たすことを表す第２制御情報を特定し、特定した第２制御情報に含まれている可達情報を前記可達状態に設定する可達情報設定機能
をコンピュータに実現させるデータベース管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、たとえば、複数の装置に共有されているログバッファを管理する制御情報設定装置等に関する。
【背景技術】
【０００２】
ファイルや、データベース（以降、本願では、「ＤＢ」と称する場合がある）等に情報を書込む情報システムの内、高い信頼性を必要とする情報システムは、書込み操作に関する情報をログ情報として、ファイルやデータベースと異なるログバッファに記録する方式を採用することが多い。たとえば、高い信頼性を必要とする情報システムは、書込みが完了した情報を消失することが許されないシステムである。データベース管理システムは、高い信頼性が要求される情報システムの一例である。
【０００３】
たとえば、特許文献１乃至特許文献３は、高い信頼性が要求されるデータベース管理システムの一例を開示している。
【０００４】
特許文献１に開示されたデータベース管理システムは、共有ＤＢデータ管理部と、データ処理部と、先読み部とを有する。共有ＤＢデータ管理部は、データ処理部がデータを取得する要求に応じて、該データに関する排他制御を実行した後に、該データを取得する処理を実行する。共有ＤＢデータ管理部は、さらに、先読み部がデータを先読みする要求に応じて、先読み対象であるデータを読み取る。
【０００５】
特許文献２に開示されたデータベース管理システムは、共有ＤＢデータ管理部と、データ処理部と、先読み部とを有する。共有ＤＢデータ管理部は、先読み部がデータを参照する要求に応じて、該要求に関連付けされた処理、及び、該要求に関連付けされた下限値を特定する。共有ＤＢデータ管理部は、現在の時刻と、最新の入出力処理が実行された時刻との間の期間が、特定した下限値よりも短い場合に、該期間が特定した下限値以上になるまで、特定された処理を中断する。共有ＤＢデータ管理部は、さらに、データ処理部がデータを取得する要求に応じて、該データに関する排他制御と、該データの取得処理とを実行する。
【０００６】
特許文献３に開示されたデータベース管理装置は、複数のデータを含むデータセットを管理する複数の計算機を有する。複数の計算機のうち、第１計算機は、第１データを格納する要求に応じて、該第１データをメモリに格納し、さらに、該第１データを複製である第１複製データを作成する。第１計算機は、第２計算機に複製データを格納できる成功確率に基づき、第１複製データを第２計算機に送信する回数を算出する。第１計算機は、算出した回数分、第１複製データを第２計算機に送信する。
【０００７】
以降、説明の便宜上、本願明細書においては、ファイルやデータベース等に情報を格納（保存）する操作を「書込み」と表すとする。書込み操作に関するログ情報を、データベース等とは異なるログ記録媒体に格納（保存）する操作を「記録」と表すとする。また、並行と、擬似並行とを含めて、「並行」と表すとする。
【０００８】
データベースシステムにおいては、複数のデータベースに対する処理要求（トランザクション）が、並行して実行されることが多い。たとえば、該データベースシステムにおいて、トランザクションに関する処理を実行する複数のプロセスは並行に動作する。複数のプロセスが並行に動作する場合であっても、該データベースシステムは、トランザクションに関する処理を正しく実行する必要がある。したがって、該データベースシステムにおいて、複数のプロセスは、ファイルやデータベースへの書込み操作、及び、該書込み操作に関するログ情報の記録を、相互に矛盾することなく実行する必要がある。
【０００９】
この処理を実現する一例について説明する。データベースシステムは、ログ情報を記録する可能性のある全プロセスがアクセス可能な共有メモリに、ログ情報を記録可能なログバッファと、その制御情報とを有する。データベースシステムにて処理を実行する各プロセスは、相互のプロセスの整合性を保ちながら、書込み操作に関するログ情報をログバッファに記録する。
【００１０】
次に、該ログバッファを実現なメモリ素子について説明する。
【００１１】
計算機システムを構成するメモリ素子として、ＤＲＡＭとは異なるメモリ素子が提供されている。尚、ＤＲＡＭは、Ｄｙｎａｍｉｃ＿Ｒａｎｄｏｍ＿Ａｃｃｅｓｓ＿Ｍｅｍｏｒｙの略称を表す。該メモリ素子は、以下の特性を有する、すなわち、
計算機システムに電源が供給されなくなった場合であっても、電源が供給されていた期間に保持していたデータが消失しないという特性（不揮発性）、
中央演算処理装置（ＣＰＵ）に対する機械語命令により、直接、該メモリ素子にデータを読み書きできるという特性（バイトアドレッサブル）。
【００１２】
該メモリ素子は、たとえば、ＰＲＡＭやＭＲＡＭ等の不揮発性等の特性を有するメモリ素子を用いる態様によって実現することができる。また、該メモリ素子は、たとえば、揮発性のメモリ素子と、バッテリー及びＳＳＤ等の不揮発性ではあるがバイトアドレッサブルではないブロックアクセス型素子を組み合わす態様によって実現することができる。該組み合わす態様を採用している計算機システムは、電源が供給されなくなった場合に、バッテリーから供給される電力を用いて、揮発性のメモリ素子に記録されたデータを、不揮発性のブロックアクセス型素子に格納する。該計算機システムは、電源が復旧した場合に、ブロックアクセス型素子に格納されているデータを揮発性のメモリ素子に格納する。該組み合わせる態様によれば、実際には揮発性のメモリ素子であっても、不揮発性のメモリのように扱うことができるので、不揮発性を実現することができる。
【００１３】
上記の記載において、ＰＲＡＭは、Ｐａｒａｍｅｔｅｒ＿Ｒａｎｄｏｍ＿Ａｃｃｅｓｓ＿Ｍｅｍｏｒｙの略称を表す。ＭＲＡＭは、Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ＿Ｒａｎｄｏｍ＿Ａｃｃｅｓｓ＿Ｍｅｍｏｒｙの略称を表す。ＳＳＤは、Ｓｏｌｉｄ＿Ｓｔａｔｅ＿Ｄｒｉｖｅの略称を表す。
【００１４】
以降、説明の便宜上、不揮発性を実現する態様によらず、不揮発性を有するメモリ素子を、「不揮発性メモリ（ＮＶＲＡＭ）」と表す。
【００１５】
次に、データベースシステムにおけるログバッファとして、上述したような不揮発性メモリを用いる例について説明する。
【００１６】
非特許文献１には、不揮発性メモリをログバッファとして用いる方式が開示されている。非特許文献１によれば、複数のプロセスは、ログバッファに関する排他制御によって、該ログバッファに関する排他制御権を取得し、取得した排他制御権を有している期間内に、該ログバッファの末尾に続く記憶領域（ログ記憶領域）を確保する操作（以降、「ログ領域確保操作」と表す）を実行する。ログ領域確保操作にて確保される記憶領域は、たとえば、格納する対象であるログ情報のサイズ（長さ、大きさ）を表すデータ（以降、「レングス（ｌｅｎｇｔｈ）」と表す）を記憶可能なレングス領域と、該ログ情報に関する格納処理を実行している状態を表すフラグを記憶可能なフラグ領域とを含む。以降、該フラグを「コピー中フラグ」と表す。
【００１７】
ログバッファに関する制御を取得したプロセスは、確保した記憶領域にログ情報を記録する。
【００１８】
該ログ領域確保操作は、たとえば、次に示す機能１及び機能２によって実現することができる。すなわち、
機能１：ログバッファに関する制御情報（たとえば、ログバッファの末尾を示すポインタ）を更新する機能、
機能２：該ログ情報のサイズを、確保した記憶領域のうちレングス領域に記録し、格納処理中であることを表す値を、確保した記憶領域のうちフラグ領域に記録する。
【００１９】
非特許文献１によれば、データベース管理システムは、自システムにおいて障害が発生した場合に、データベースのある一時点（チェックポイント）における内容を格納したファイルと、該チェックポイント以降の操作履歴を記録したログ情報とを参照する。該データベース管理システムは、該チェックポイントまでのデータを、参照した該ファイルに基づき復旧し、その後、参照したログ情報における書込み操作を、該ファイルに対して実行することにより、該障害が発生する直前におけるデータベースの内容を復旧する。
【００２０】
非特許文献２は、複数のログバッファを用いることにより、競合を低減する方法を開示している。
【先行技術文献】
【特許文献】
【００２１】
【特許文献１】特許第５２６１８０９号
【特許文献２】特許第５０９８１２０号
【特許文献３】特許第５５４８８２９号
【非特許文献】
【００２２】
【非特許文献１】Ｆａｎｇ、  Ｒｕ  ａｎｄ  Ｈｓｉａｏ、  Ｈｕｉ―Ｉ  ａｎｄ＿Ｈｅ、  Ｂｉｎ  ａｎｄ  Ｍｏｈａｎ、  Ｃ  ａｎｄ  Ｗａｎｇ、  Ｙｕｎ，「Ｈｉｇｈ＿ｐｅｒｆｏｒｍａｎｃｅ＿ｄａｔａｂａｓｅ＿ｌｏｇｇｉｎｇ＿ｕｓｉｎｇ＿ｓｔｏｒａｇｅ＿ｃｌａｓｓ＿ｍｅｍｏｒｙ」，  Ｄａｔａ＿Ｅｎｇｉｎｅｅｒｉｎｇ（ＩＣＤＥ）、２０１１、ＩＥＥＥ＿２７ｔｈ＿Ｉｎｔｅｒｎａｔｉｏｎａｌ＿Ｃｏｎｆｅｒｅｎｃｅ、ｐ１２２１―１２３１
【非特許文献２】Ｗａｎｇ、  Ｔｉａｎｚｈｅｎｇ  ａｎｄ  Ｊｏｈｎｓｏｎ、  Ｒｙａｎ、「Ｓｃａｌａｂｌｅ  ｌｏｇｇｉｎｇ  ｔｈｒｏｕｇｈ  ｅｍｅｒｇｉｎｇ  ｎｏｎ―ｖｏｌａｔｉｌｅ  ｍｅｍｏｒｙ」、Ｖｅｒｙ  Ｌａｒｇｅ  Ｄａｔａ  Ｂａｓｅｓ  （ＶＬＤＢ）  ２０１４、ｐ８６５―８７６
【非特許文献３】Ｉｎｔｅｌ  ６４  ａｎｄ  ＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒｓ  Ｍａｎｕａｌ  Ｖｏｌｕｍｅ  ２Ａ：  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｒｅｆｅｒｅｎｃｅ、  Ａ−Ｍ、（ｈｔｔｐ：／／ｗｗｗ．ｔｅｌ．ｃｏｍ／Ａｓｓｅｔｓ／ＰＤＦ／ｍａｎｕａｌ／２５３６６６．ｐｄｆ）
【発明の概要】
【発明が解決しようとする課題】
【００２３】
データベースに対する複数の処理要求を管理するデータベース管理システムは、上述したように、たとえば、ログ情報等、複数の情報処理装置に共有されているログバッファに関して、排他制御を実行する。これは、該データベース管理システムが、複数の情報処理装置に共有されているログバッファに関して、正しく処理を実行する必要があるからである。
【００２４】
データベース管理システムは、たとえ、該処理要求に応じた処理を実行する複数の演算装置を有していたとしても、排他制御を実行している期間においては、逐次的に該処理を実行しなければならない。たとえば、特許文献１乃至特許文献３、非特許文献１、及び、非特許文献２に開示された装置（システム、方式）は、該排他制御権を有している期間内に、共有されているログバッファに関して逐次的に多くの処理を実行する。
【００２５】
しかし、データベース管理システムが、排他制御権を有している期間内において、逐次的に処理を実行しなければならないので、たとえば、特許文献１乃至特許文献３、非特許文献１、及び、非特許文献２に開示された装置は、処理効率が低下してしまう。
【００２６】
そこで、本発明の主たる目的は、ログバッファに対する処理要求を短期間に処理可能にする制御情報を記憶領域に効率よく設定する制御情報設定装置等を提供することである。
【課題を解決するための手段】
【００２７】
前述の目的を達成するために、本発明の一態様において、制御情報設定装置は、
ログ情報と、そのログ情報に所定の順序で続くログ情報を参照することが可能な状態を表す可達状態であるか、または、参照することが不可能な状態を表す不可達状態であるかを表す可達情報、及び、前記ログ情報のサイズを表すサイズ情報を含む制御情報とを関連付けた状態で記憶可能な記憶領域が論理的に前記順序に並べられたログバッファと、
前記ログバッファにおいて、前記ログ情報を記録する記録処理を割り当て済みの記憶領域と、前記記録処理が割り当てられていない記憶領域との境界を表す記憶領域に記録されている第１制御情報から前記可達情報を読み取り、前記第１制御情報に含まれている前記可達情報に前記不可達状態を設定するとともに、前記第１制御情報に含まれている前記サイズ情報にあるサイズを設定し、読み取った前記可達情報が前記可達状態である場合に、前記ログバッファにおける前記順序に従い、前記サイズ情報が所定の条件を満たすことを表す第２制御情報を特定し、特定した第２制御情報に含まれている可達情報を前記可達状態に設定する可達情報設定手段と
を備える。
【００２８】
また、本発明の他の見地として、制御情報設定方法は、
ログ情報と、そのログ情報に所定の順序で続くログ情報を参照することが可能な状態を表す可達状態であるか、または、参照することが不可能な状態を表す不可達状態であるかを表す可達情報、及び、前記ログ情報のサイズを表すサイズ情報を含む制御情報とを関連付けた状態で記憶可能な記憶領域が論理的に前記順序に並べられたログバッファに関して、
前記ログバッファにおいて、前記ログ情報を記録する記録処理を割り当て済みの記憶領域と、前記記録処理が割り当てられていない記憶領域との境界を表す記憶領域に記録されている第１制御情報から前記可達情報を読み取り、前記第１制御情報に含まれている前記可達情報に前記不可達状態を設定するとともに、前記第１制御情報に含まれている前記サイズ情報にあるサイズを設定し、読み取った前記可達情報が前記可達状態である場合に、前記ログバッファにおける前記順序に従い、前記サイズ情報が所定の条件を満たすことを表す第２制御情報を特定し、特定した第２制御情報に含まれている可達情報を前記可達状態に設定する。
【００２９】
さらに、同目的は、係る制御情報設定プログラム、及び、そのプログラムを記録するコンピュータが読み取り可能な記録媒体によっても実現される。
【発明の効果】
【００３０】
本発明に係る制御情報設定装置等によれば、ログバッファに対する処理要求を短期間に処理可能にする制御情報を記憶領域に効率よく設定することができる。
【図面の簡単な説明】
【００３１】
【図１】本発明の第１の実施形態に係るデータベース管理装置が有する構成を示すブロック図である。
【図２】第１の実施形態に係るログバッファが有する構成を概念的に示す図である。
【図３】第１の実施形態に係るログ情報が有する構成を示すブロック図である。
【図４】ログバッファ情報記憶部が有する構成を示すブロック図である。
【図５】第１の実施形態に係るデータベース管理装置における処理の流れを示すフローチャート（１／２）である。
【図６】第１の実施形態に係るデータベース管理装置における処理の流れを示すフローチャート（２／２）である。
【図７】制御情報の一例を概念的に表す図である。
【図８】データベース管理装置における処理の流れを示すフローチャートを表す。
【図９】第１の実施形態に係る先頭位置算出部における処理の流れを表すフローチャートである。
【図１０】第１の実施形態に係るログ処理部（１／３）における処理の流れを表すフローチャートである。
【図１１】第１の実施形態に係るログ処理部（２／３）における処理の流れを示すフローチャートである。
【図１２】第１の実施形態に係るログ処理部（３／３）における処理の流れを示すフローチャートである。
【図１３】第１の実施形態に係る可達位置情報更新部における処理の流れを表すフローチャートである。
【図１４】第１の実施形態に係る可達位置情報更新部における処理の流れを示すフローチャートである。
【図１５】第１の実施形態に係る完了位置情報更新部における処理の流れを表すフローチャートである。
【図１６】本発明の第２の実施形態に係るデータベース管理装置が有する構成を示すブロック図である。
【図１７】第２の実施形態に係る制御情報設定装置１５１における処理の流れを示すフローチャートである。
【図１８】本発明の各実施形態に係るデータベース管理装置を実現可能な計算処理装置のハードウェア構成例を、概略的に示すブロック図である。
【発明を実施するための形態】
【００３２】
まず、本発明の各実施形態に係るデータベース管理装置における機能の一部を実現可能なマルチプロセッサ命令について説明する。マルチプロセッサ命令は、たとえば、非特許文献３に、米国インテル社のｘ８６プロセッサに関する命令である「ｃｍｐｘｃｈｇ」命令が開示されている。尚、「ｃｍｐｘｃｈｇ」命令は、Ｃｏｍｐａｒｅ＿ａｎｄ＿Ｅｘｃｈａｎｇｅ命令を表す。「ｃｍｐｘｃｈｇ」命令を、Ｃｏｍｐａｒｅ＿ａｎｄ＿Ｓｗａｐ（Ｃａｓ）命令と称することもある。尚、機能の一部を実現可能なマルチプロセッサ命令は、上述した例に限定されない。
【００３３】
「ｃｍｐｘｃｈｇ」命令は、たとえば、ある記憶領域の位置を表す位置情報、第１の値、及び、第２の値なる３つのオペランドを含む。位置情報は、たとえば、データベースシステムにおけるレジスタ（ｅａｘレジスタ、６４ｂｉｔ＿ｍｏｄｅの場合にｒａｘレジスタ、以下同様）を表す名称である。説明の便宜上、位置情報は、ｅａｘレジスタであるとする。「ｃｍｐｘｃｈｇ」命令は、処理１及び処理３に示す一連の操作をアトミック（後述）に実行する命令である。
【００３４】
処理１：第１の値を読み取る、
処理２：読み取った第１の値が、ｅａｘレジスタに格納されている値に一致する場合に、第２の値を、第１の値を格納していたメモリ領域に格納する、
処理３：読み取った第１の値が、ｅａｘレジスタに格納されている値に一致しない場合に、読み取った第１の値をｅａｘレジスタに格納する。
【００３５】
次に、アトミックについて説明する。アトミックな処理とは、あるプロセッサが記憶領域に対する一連の処理を実行している間に、該あるプロセッサとは異なるプロセッサが、該記憶領域に対する処理を実行できないことを、ハードウェアによって保証している処理であることを表す。たとえば、「ｃｍｐｘｃｈｇ」命令は、あるプロセッサが、該記憶領域に対して処理１乃至処理３を実行している間に、他のプロセッサが、該記憶領域をアクセスしないことをハードウェアによって保証している処理であることを表す。
【００３６】
次に、本発明を実施する実施形態について図面を参照しながら詳細に説明する。
【００３７】
＜第１の実施形態＞
図１を参照しながら、本発明の第１の実施形態に係るデータベース管理装置１０１が有する構成について詳細に説明する。図１は、本発明の第１の実施形態に係るデータベース管理装置１０１が有する構成を示すブロック図である。
【００３８】
本発明の第１の実施形態に係るデータベース管理装置１０１は、大別して、複数のトランザクション実行部と、ログバッファ１１２と、ログバッファ情報記憶部１１１とを有する。複数のトランザクション実行部は、たとえば、トランザクション実行部１０７、トランザクション実行部１０９、及び、トランザクション実行部１１０である。トランザクション実行部１０７は、ログ処理部１０２と、メモリ１０８とを有する。ログ処理部１０２は、先頭位置算出部１０３と、ログ情報保存部１０４とを有する。ログ情報保存部１０４は、可達位置情報更新部１０５と、完了位置情報更新部１０６とを有する。トランザクション実行部１０９、及び、トランザクション実行部１１０は、トランザクション実行部１０７と同様の構成を有することとする。
【００３９】
尚、図１に例示したデータベース管理装置１０１は、３台のトランザクション実行部を有するが、必ずしも、３台でなくともよい。
【００４０】
ログバッファ１１２は、たとえば、不揮発性を有するメモリ素子を表すＮＶＲＡＭを用いて実現される。図２を参照しながら、ログバッファ１１２が有する構成について詳細に説明する。図２は、第１の実施形態に係るログバッファ１１２が有する構成を概念的に示す図である。
【００４１】
ログバッファ１１２は、たとえば、ログ情報に関する書込み操作において出力されたログ情報と、該ログ情報に関する制御情報とが関連付けされたログ情報セットを、少なくとも１つ格納することができる。図２に示す例において、ログバッファ１１２は、ログ情報１及び制御情報１が関連付けされた情報を表す第１ログ情報セット、ログ情報２及び制御情報２が関連付けされた情報を表す第２ログ情報セット等を含む。
【００４２】
ログ情報セットは、ログバッファ１１２において、制御情報、該制御情報に関連付けされたログ情報の順に記録されていてもよい。尚、本実施形態において、ログバッファ１１２においては、制御情報と、該制御情報に関連付けされたログ情報とが、少なくとも論理的に、記録された順に記憶されているとする。たとえば、制御情報は、上述した「ｃａｓ」命令を適用可能なサイズであり、たとえば、１ワードの大きさを有する情報である。
【００４３】
図３を参照しながら、ログ情報に関する制御情報について詳細に説明する。図３は、第１の実施形態に係るログ情報が有する構成を示すブロック図である。
【００４４】
制御情報は、可達情報と、記録操作完了情報と、記録操作状態情報と、サイズ（長さ、レングス、大きさ）情報とを含む。すなわち、制御情報は、可達情報を含むデータ構造を有する。
【００４５】
可達情報は、ログバッファ１１２における各ログ情報セットに関して、後順に位置するログ情報セットを参照することが可能であるか否かを表す情報である。すなわち、可達情報は、ログバッファ１１２において、所定の順序にて、あるログ情報セットに続くログ情報セットを参照することが可能な状態を表す可達状態であるか、または、参照することが不可能な状態を表す不可達状態であるかを表す情報である。たとえば、後順に位置するログ情報セットを参照することが可能な状態は、１（有効）であり、後順に位置するログ情報セットを参照することが不可能な値は、０（無効）である。可達情報は、後述の可達位置情報（後述）を更新するか否かを判定する場合に参照される情報（たとえば、フラグ）である。以降の説明においては、説明の便宜上、可達情報を格納可能な記憶領域を変数「ｒｆｌａｇ」と表すとする。後順に位置するログ情報セットを参照することが可能な状態を「可達状態」と表すとする。また、後順に位置するログ情報セットを参照することが不可能な状態を「不可達状態」とする。変数「ｒｆｌａｇ」は、ログバッファ１１２、または、メモリ１０８における特定の記憶領域を表すとする。尚、可達情報を、たとえば、可達状態制御フラグと表してもよい。たとえば、可達情報は、該可達情報を含む制御情報に関連付けされたログ情報に関する処理が割り当てられる以前においては可達状態であり、該処理が割り当てられた以降においては不可達状態である。
【００４６】
記録操作完了情報は、ログ情報をログバッファ１１２に記録する処理が完了する以前であるか否かを表す情報である。たとえば、ログ情報をログバッファ１１２に記録する処理が完了する以前の状態は１（有効）であり、処理が完了した以降の状態である場合に、値は０（無効）である。記録操作完了情報は、後述の完了位置情報（後述）を更新するか否かを判定する場合に参照される情報（たとえば、フラグ）である。以降の説明においては、記録操作完了情報を格納可能な記憶領域を変数「ｃｆｌａｇ」と表すとする。処理を完了する以前の状態を「未完了状態」と表すとする。また、処理完了以降の状態を「完了状態」と表すとする。たとえば、変数「ｃｆｌａｇ」は、ログバッファ１１２、または、メモリ１０８における特定の記憶領域を表す。尚、記録操作完了情報を、たとえば、完了制御フラグと表してもよい。たとえば、記録操作完了情報は、該記録操作完了情報を含む制御情報に関連付けされたログ情報に関する処理が完了以前である場合に未完了状態を表し、完了以降にて完了状態を表す。
【００４７】
記録操作状態情報は、ログ情報をログバッファ１１２に記録する処理を実行している状態であるか否かを表す情報である。たとえば、処理している状態は、１であり、処理していない状態は、０である。以降の説明においては、記録操作状態情報を格納可能な記憶領域を変数「ｉｎＣｏｐｙ」と表すとする。たとえば、変数「ｉｎＣｏｐｙ」は、ログバッファ１１２、または、メモリ１０８における特定の記憶領域を表す。尚、記録操作状態情報を、処理中フラグと表してもよい。さらに、以降の説明においては、処理を実行している状態を「処理中状態」と表すとする。処理を実行していない状態を「非処理中状態」と表すとする。
【００４８】
サイズ情報は、ログ情報に関するサイズ（大きさ、長さ、レングス）を表す。以降の説明においては、サイズ情報を格納可能な記憶領域を、変数「ｌｅｎｇｔｈ」とも表す。たとえば、変数「ｌｅｎｇｔｈ」は、ログバッファ１１２、または、メモリ１０８における特定の記憶領域を表す。
【００４９】
次に、図４を参照しながら、ログバッファ情報記憶部１１１が有する構成について説明する。図４は、ログバッファ情報記憶部１１１が有する構成を示すブロック図である。
【００５０】
ログバッファ情報記憶部１１１は、可達位置情報と、完了位置情報と、先頭位置情報とを含む。
【００５１】
可達位置情報は、ログバッファ１１２において、ログ情報を記録する処理が開始された状態を表す可達状態を含むログ情報セットのうち、位置が最も後順に位置するログ情報セットを記憶している位置を表す。以降においては、説明の便宜上、ログバッファ情報記憶部１１１のうち、可達位置情報を記憶可能な記憶領域を変数「ＲｅａｃｈａｂｌｅＵｐＴｏ」と表すとする。
【００５２】
完了位置情報は、ログバッファ１１２において、ログ情報を記録する処理が完了した状態を表す完了状態にあるログ情報セットのうち、位置が最も後順に位置するログ情報セットを記憶している位置を表す。以降においては、説明の便宜上、ログバッファ情報記憶部１１１のうち、完了位置情報を記憶可能な記憶領域を変数「ＦｉｎｉｓｈｅｄＵｐＴｏ」と表す。
【００５３】
先頭位置情報は、ログバッファ１１２において、まだ、ログ情報を記録する処理が割り当てられていないログ情報セットを記憶可能な位置を表す。以降においては、説明の便宜上、ログバッファ情報記憶部１１１のうち、先頭位置情報を記憶可能な記憶領域を変数「ＴＡＩＬ」と表すとする。
【００５４】
説明の便宜上、本実施形態においては、ログバッファ１１２は、Ｎ個のログ情報セットが格納されているとする。また、ログ情報を一意に識別可能なログ識別子は、ログバッファ１１２におけるログ情報セットの順番であるとする。たとえば、図２に示す例においては、ログ情報Ｉ（ただし、Ｉは、自然数を表す）、及び、制御情報Ｉが関連付けされた情報を表す第Ｉログ情報セットと表す。また、先頭位置情報は、新たなログ情報セットを記憶可能な領域のうち、Ｎ個のログ情報セットが格納されている記憶領域に最も近い位置（この例の場合に、（Ｎ＋１）番目のログ情報セット）を表すとする。
【００５５】
以降の説明において、さらに、（Ｎ＋１）番目のログ情報セットに含まれている制御情報に関して、変数「ｒｆｌａｇ」は１（すなわち、可達状態）を記憶しており、変数「ｃｆｌａｇ」は１（すなわち、未完了状態）を記憶しているとする。さらに、該制御情報に関して、変数「ｉｎＣｏｐｙ」は、０（すなわち、非処理中状態）を記憶しており、変数「ｌｅｎｇｔｈ」は、０を記憶しているとする。
【００５６】
次に、図５及び図６を参照しながら、本実施形態に係るデータベース管理装置１０１における処理について説明する。図５及び図６は、第１の実施形態に係るデータベース管理装置１０１における処理の流れを示すフローチャートである。
【００５７】
トランザクション実行部１０７は、データベースに対して実行される検索処理等に関するトランザクションを指示する要求に応じて、該トランザクションに関する処理を実行する（ステップＳ１０１）。
【００５８】
ステップＳ１０１に示す処理において、たとえば、トランザクション実行部１０７は、ある書込み操作に関するログ情報が格納されている記憶領域を指し示す位置情報と、該ログ情報のサイズを表すサイズ情報とを先頭位置算出部１０３に対して出力する（ステップＳ１０２）。
【００５９】
先頭位置算出部１０３は、トランザクション実行部１０７が出力したサイズ情報を入力する。先頭位置算出部１０３は、複数のトランザクション実行部に共有されているログバッファ情報記憶部１１１のうち、先頭位置情報を記憶している記憶領域（たとえば、変数「ＴＡＩＬ」）に関する処理を優先的に実行することができる排他制御権を取得する（ステップＳ１０３）。先頭位置算出部１０３は、取得した排他制御権を有している期間内に、変数「ＴＡＩＬ」に格納されている先頭位置情報を読み取る（ステップＳ１０４）。
【００６０】
先頭位置算出部１０３は、入力した該サイズ情報が表すサイズと、読み取った先頭位置情報とを足し算し（ステップＳ１０５）、足し算した結果算出された値を、取得した排他制御権を有している期間内に、ログバッファ情報記憶部１１１における変数「ＴＡＩＬ」に格納する（ステップＳ１０６）。先頭位置算出部１０３は、取得した排他制御権を解放する（ステップＳ１０７）。先頭位置算出部１０３は、ステップＳ１０４にて読み取った先頭位置情報を、第１先頭情報としてログ情報保存部１０４に対して出力する（ステップＳ１０８）。
【００６１】
尚、先頭位置算出部１０３が取得する情報は、該排他制御権を用いた制御によって、複数のトランザクション実行部において、相互に異なっている。また、先頭位置算出部１０３が排他制御権を解放することによって、他のトランザクション実行部（たとえば、トランザクション実行部１０９、または、トランザクション実行部１１０）における先頭位置算出部は、先頭位置情報を取得することができる。
【００６２】
ログ情報保存部１０４は、先頭位置算出部１０３が出力した第１先頭情報、トランザクション実行部１０７が出力したログ情報のサイズ、及び、トランザクション実行部１０７が出力した位置情報を入力する。ログ情報保存部１０４は、ログバッファ１１２のうち、読み取った先頭位置情報（すなわち、（Ｎ＋１）番目のログ情報セットを格納している位置）を起点とする記憶領域に格納されている制御情報を読み取り、読み取った該制御情報に含まれている可達情報をメモリ１０８に格納する。
【００６３】
ログ情報保存部１０４は、不可達状態、入力した制御情報に含まれている記録操作完了情報、処理中状態、及び、入力したログ情報のサイズを含む制御情報（以降、「第２制御情報」と表す）を作成する（ステップＳ１１１）。ログ情報保存部１０４は、作成した第２制御情報を、入力した第１先頭情報を起点とする記憶領域に記録する（ステップＳ１１２）。
【００６４】
ログ情報保存部１０４は、メモリ１０８に格納した可達情報が可達状態である場合に（ステップＳ１１３にてＹＥＳ）、可達位置情報を更新する操作（後述）を可達位置情報更新部１０５に指示する（ステップＳ１１４）。ログ情報保存部１０４は、メモリ１０８に格納した可達情報が可達状態でない場合に（ステップＳ１１３にてＮＯ）、可達位置情報を更新する操作を可達位置情報更新部１０５に指示しない。
【００６５】
ログ情報保存部１０４は、ログバッファ１１２のうち、ステップＳ１１１に先立って入力した第１先頭情報を起点とする記憶領域に、ステップＳ１１１に先立って入力した位置情報を起点とする記憶領域に格納されているログ情報を記録する（ステップＳ１１５）。ログ情報保存部１０４は、読み取った第１先頭情報を起点とする記憶領域に格納されている制御情報を読み取り、読み取った該制御情報に含まれている記録操作完了情報をメモリ１０８に格納する（ステップＳ１１６）。ログ情報保存部１０４は、ステップＳ１１６にて読み取った制御情報における可達情報、完了状態、非処理中状態、及び、該制御情報におけるログ情報のサイズを含む制御情報（以降、「第３制御情報」と表す）を作成する（ステップＳ１１７）。
【００６６】
ログ情報保存部１０４は、ステップＳ１１６にてメモリ１０８に格納した記録操作完了情報が未完了状態である場合に（ステップＳ１１８にてＹＥＳ）、完了位置情報を更新する処理（後述）を完了位置情報更新部１０６に指示する（ステップＳ１１９）。ログ情報保存部１０４は、ステップＳ１１６にてメモリ１０８に格納した記録操作完了情報が未完了状態でない場合に（ステップＳ１１８にてＮＯ）、完了位置情報を更新する処理を完了位置情報更新部１０６に指示しない。
【００６７】
ログ情報保存部１０４は、入力した第１先頭情報及び入力したサイズを加えた値（すなわち、第２先頭情報）と、ログバッファ情報記憶部１１１に格納されている可達位置情報とを比較する。ログ情報保存部１０４は、可達位置情報が、第２先頭情報以上である場合に（ステップＳ１２０にてＹＥＳ）、ログ情報を記録する操作を終了する。これに対して、ログ情報保存部１０４は、可達位置情報が、第２先頭情報未満である場合に（ステップＳ１２０にてＮＯ）、可達位置情報が第２先頭情報以上になるまで待つ待ち合わせ処理を実行する（ステップＳ１２１）。
【００６８】
次に、複数のプロセッサを有する情報処理装置の場合の例を参照しながら本実施形態に係る処理について説明する。
【００６９】
説明の便宜上、制御情報は、マルチプロセッサ命令によるアトミック操作にて扱うことができるデータを表すとする。また、マルチプロセッサ命令によるアトミック操作は、たとえば、上述した「ｃｍｐｘｃｈｇ」命令を用いて実現することができる。この例においては、排他制御権を取得する処理を「ＬｏｃｋＡｃｑｕｉｒｅ」と表し、取得した排他制御権を解放する処理を「ＬｏｃｋＲｅｌｅａｓｅ」と表すとする。
【００７０】
排他制御権を取得する処理、及び、排他制御権を解放する処理は、マルチプロセッサ命令を介したアトミック操作を用いて実装されることが多い。尚、排他制御権を取得する処理、及び、取得した排他制御権を解放する処理を実現する方法には、様々な方法がある。ここでは、排他制御権を実現する方法に関する詳細な説明を省略する。
【００７１】
さらに、データベース管理装置１０１は、Ｎ番目のログ情報セットまでログバッファ１１２に記録する処理を完了し、その後、新たなトランザクションを処理していない場合の例を参照しながら、本実施形態に係るデータベース管理装置１０１における処理について説明する。また、該例において、変数「ＲｅａｃｈａｂｌｅＵｐＴｏ」、変数「ＦｉｎｉｓｈｅｄＵｐＴｏ」、及び、変数「ＴＡＩＬ」は、まず、（Ｎ＋１）番目のログ情報セットが記録される記憶領域を表す位置を記憶しているとする。
【００７２】
また、該例においては、図７に示すように、（Ｎ＋１）番目のログ情報セットに含まれている制御情報に関して、可達情報を記録可能な変数「ｒｆｌａｇ」は、可達状態（すなわち、１）を記録しているとする。図７は、制御情報の一例を概念的に表す図である。記録操作完了情報を記録可能な変数「ｃｆｌａｇ」は、未完了状態（すなわち、１）を記録しているとする。該制御情報に関して、記録操作状態情報を記録可能な変数「ｉｎＣｏｐｙ」は、非処理中状態（すなわち、０）を記録しているとする。サイズ情報を記録可能な変数「ｌｅｎｇｔｈ」は、０を記録しているとする。すなわち、（Ｎ＋１）番目のログ情報セットに含まれている制御情報において、可達情報は可達状態であり、記録操作完了情報は未完了状態であるとする。また、該（Ｎ＋１）番目のログ情報セットに含まれている制御情報において、記録操作状態情報は非処理中状態であり、サイズ情報は０であるとする。
【００７３】
各プロセスは、共有メモリ（図１に不図示）における領域に割り当てられているとする。すなわち、該共有メモリは、第Ｉ（ただし、１≦Ｉ≦ｎ）プロセスに関する記憶領域を含む。第Ｉプロセスは、トランザクション実行部１０７によるトランザクション処理の実行に伴って発生するログ情報を、第Ｉプロセスに割り当てられた記憶領域におけるログ情報領域に格納する。
【００７４】
図８を参照しながら、データベース管理装置１０１における処理について説明する。図８は、データベース管理装置１０１における処理の流れを示すフローチャートを表す。
【００７５】
データベース管理装置１０１における処理は、大別して、ログ情報セットを記録する記憶領域を示す第１先頭情報を算出する処理（ステップＳ１２５）と、算出した第１先頭情報が指し示す領域にログ情報セットを記録する処理（ステップＳ１２６）とを含む。
【００７６】
ステップＳ１２５及びステップＳ１２６に示す処理について、処理の概要を説明する。
【００７７】
ステップＳ１２５：
先頭位置算出部１０３は、たとえば、トランザクション実行部１０７が出力した該サイズ情報を入力する。先頭位置算出部１０３は、ログバッファ情報記憶部１１１における先頭位置情報を読み取り、読み取った先頭位置情報（すなわち、上記の第１先頭情報）をログ情報保存部１０４に対して出力する。先頭位置算出部１０３が実行する処理は、たとえば、記憶領域を確保可能な「ｒｅｓｅｒｖｅ」関数を用いて実現することができる。「ｒｅｓｅｒｖｅ」関数は、たとえば、ログ情報のサイズを表す情報を入力とし、入力されたサイズ分の記憶領域を確保する関数を表す。
【００７８】
ステップＳ１２６：
ログ情報保存部１０４は、先頭位置算出部１０３が出力した第１先頭情報、トランザクション実行部１０７が出力したログ情報のサイズ、及び、トランザクション実行部１０７が出力した位置情報を入力する。ログ情報保存部１０４は、該位置情報に格納されているログ情報に関するログ情報セットを、ログバッファ１１２において入力した第１先頭情報が表す記憶領域に記録する。
【００７９】
ログ情報保存部１０４が実行する処理は、たとえば、データを記憶領域に記憶可能なｃｏｐｙ関数を用いて実現することができる。ログ情報保存部１０４は、たとえば、ｃｏｐｙ関数に従い処理することによって、以下の入力１乃至入力３に示す３つ情報を入力する。
【００８０】
入力１：記憶領域に記録するログ情報が格納されているプロセス固有メモリにおける位置（第１位置）を示す情報、
入力２：該ログ情報のサイズを示すサイズ情報、
入力３：ログ領域確保操作等により確保された記憶領域の位置（第２位置）を示す情報。
【００８１】
ログ情報保存部１０４は、たとえば、ｃｏｐｙ関数に従い処理することによって、第１位置を起点とする記憶領域に格納されているログ情報を、受信したサイズ分、第２位置を起点とする記憶領域に記録する。
【００８２】
次に、ステップＳ１２５及びステップＳ１２６における処理を詳細に説明する前に、メモリ１０８等における記憶領域を表す変数について説明する。
【００８３】
説明の便宜上、当該各トランザクション実行部において、変数「ｍｙＬＳＮ」、変数「ｍｙＬｏｇ」、変数「ｍｙＬｅｎｇｔｈ」、変数「ｎｅｘｔＬＳＮ」、変数「ｍｙＴｕｒｎ」、変数「ｏｌｄｖ」、及び、変数「ｎｅｗｖ」は、自トランザクション実行部内のメモリにおける特定の記憶領域を表すとする。また、ｂｕｆｆｅｒは、ログバッファ１１２を表すとする。さらに、ｂｕｆｆｅｒ［ｍｙＬＳＮ］は、ログバッファ１１２のうち、変数「ｍｙＬＳＮ」に格納されている値によって指示される記憶領域を表すとする。
【００８４】
制御情報に関して、可達情報は、たとえば、ログバッファ１１２における記憶領域を表す変数「ｒｆｌａｇ」に格納されているとする。記録操作完了情報は、たとえば、ログバッファ１１２における記憶領域を表す変数「ｃｆｌａｇ」に格納されているとする。記録操作状態情報は、たとえば、ログバッファ１１２における記憶領域を表す変数「ｉｎＣｏｐｙ」に格納されているとする。サイズ情報は、たとえば、ログバッファ１１２における記憶領域を表す変数「ｌｅｎｇｔｈ」に格納されているとする。
【００８５】
可達位置情報は、ログバッファ情報記憶部１１１における記憶領域を表す変数「ＲｅａｃｈａｂｌｅＵｐＴｏ」に格納されているとする。完了位置情報は、ログバッファ情報記憶部１１１における記憶領域を表す変数「ＦｉｎｉｓｈｅｄＵｐＴｏ」に格納されているとする。先頭位置情報は、ログバッファ情報記憶部１１１における記憶領域を表す変数「ＴＡＩＬ」に格納されているとする。
【００８６】
図９を参照しながら、先頭位置算出部１０３が実行するステップＳ１２５（図８）に示した処理について、さらに、詳細に説明する。図９は、第１の実施形態に係る先頭位置算出部１０３における処理を表すフローチャートである。
【００８７】
先頭位置算出部１０３は、ログバッファ情報記憶部１１１のうち、先頭位置情報が格納されている変数「ＴＡＩＬ」に関する排他制御権を取得する（ステップＳ１３１）。先頭位置算出部１０３は、取得した排他制御権を有している期間内に、該変数「ＴＡＩＬ」に格納されている先頭位置情報を読み取る（ステップＳ１３２）。先頭位置算出部１０３は、読み取った先頭位置情報を、変数「ｍｙＬＳＮ」に格納する（ステップＳ１３３）。先頭位置算出部１０３は、読み取った先頭位置情報に、入力したサイズ情報に含まれるサイズを足し算し（ステップＳ１３４）、算出した値を、取得した排他制御権を有している期間内に、ログバッファ情報記憶部１１１における変数「ＴＡＩＬ」に格納する（ステップＳ１３５）。先頭位置算出部１０３は、取得した排他制御権を解放し（ステップＳ１３６）、変数「ｍｙＬＳＮ」に格納した値（すなわち、第１先頭情報）を、ログ情報保存部１０４に対して出力する（ステップＳ１３７）。
【００８８】
すなわち、ステップＳ１３１乃至ステップＳ１３７に示す処理によって、先頭位置算出部１０３は、ログバッファ１１２において、ログ情報が割り当てられていない記憶領域を指し示す第１先頭情報を出力し、さらに、該先頭位置情報に関する記憶領域を更新する。尚、ステップＳ１３１乃至ステップＳ１３７に示す処理において、先頭位置算出部１０３は、たとえば、「ｒｅｓｅｒｖｅ」関数にて指示された処理と同様の処理を実行することにより先頭位置情報を読み取る。先頭位置算出部１０３は、たとえば、関数「Ｌｏｃｋ＿Ａｃｑｕｉｒｅ」にて指示された処理と同様の処理を実行することにより排他制御権を取得する。
【００８９】
図１０を参照しながら、ステップＳ１２６（図８）にてログ情報保存部１０４が実行する処理について、さらに詳細に説明する。図１０は、第１の実施形態に係るログ処理部１０２における処理を表すフローチャート（１／３）である。
【００９０】
ログ情報保存部１０４は、トランザクション実行部１０７が出力した位置情報と、トランザクション実行部１０７が出力したサイズ情報と、先頭位置算出部１０３が出力した第１先頭情報とを入力する。より具体的に、ログ情報保存部１０４は、入力した位置情報を変数「ｍｙＬｏｇ」に格納し、入力したサイズ情報を、変数「ｍｙＬｅｎｇｔｈ」に格納し、入力した第１先頭情報を、変数「ｍｙＬＳＮ」に格納する。
【００９１】
ログ情報保存部１０４は、入力した第１先頭情報と、入力したサイズ情報とを足し算することにより、次に、ログ情報セットを記録可能な先頭位置情報（すなわち、「第２先頭情報」）を算出する。より具体的に、ログ情報保存部１０４は、該サイズ情報を格納している変数「ｍｙＬｅｎｇｔｈ」に格納されている値と、該第１先頭情報を格納している変数「ｍｙＬＳＮ」に格納されている値を足し算（ステップＳ１４１）し、算出された結果（すなわち、「第２先頭情報」）を変数「ｎｅｘｔＬＳＮ」に格納する（ステップＳ１４２）。
【００９２】
次に、ログ情報保存部１０４は、ログバッファ１１２において、入力した第１先頭情報が表す記憶領域に記録されているログ情報セット、及び、該ログ情報セットに含まれている制御情報（以降、「第１制御情報」と表す）を読み取る。より具体的に、ログ情報保存部１０４は、記憶領域ｂｕｆｆｅｒ［ｍｙＬＳＮ］に格納されているログ情報セットを読み取り（ステップＳ１４３）、読み取ったログ情報セットのうち、第１制御情報を変数「ｏｌｄｖ」に格納する（ステップＳ１４４）。
【００９３】
次に、ログ情報保存部１０４は、読み取った第１制御情報に含まれている可達情報を読み取り、読み取った可達情報をメモリ１０８に格納する。より具体的に、ログ情報保存部１０４は、変数「ｏｌｄｖ」に格納されている第１制御情報のうち、変数「ｒｆｌａｇ」に格納されている可達情報を読み取り、読み取った可達情報を変数「ｍｙＴｕｒｎ」に格納する（ステップＳ１４５）。
【００９４】
次に、ログ情報保存部１０４は、不可達状態、入力した制御情報に含まれている記録操作完了情報、処理中状態、及び、入力したログ情報のサイズ情報が表すサイズを含む制御情報（以降、「第２制御情報」と表す）を作成する。より具体的に、ログ情報保存部１０４は、変数「ｏｌｄｖ」に格納されている第１制御情報を、変数「ｎｅｗｖ」に格納する（ステップＳ１４６）。ログ情報保存部１０４は、変数「ｎｅｗｖ」に含まれている変数「ｌｅｎｇｔｈ」に、変数「ｍｙＬｅｎｇｔｈ」におけるサイズ情報を格納する（ステップＳ１４７）。さらに、ログ情報保存部１０４は、変数「ｎｅｗｖ」に含まれている変数「ｉｎＣｏｐｙ」に、処理中状態（たとえば、１）を格納する。さらに、ログ情報保存部１０４は、変数「ｎｅｗｖ」に含まれている変数「ｒｆｌａｇ」に、不可達状態（たとえば、０）を格納する（ステップＳ１４８）。
【００９５】
次に、ログ情報保存部１０４は、「ｃａｓ」命令にて実行される処理と同様の処理を実行することにより、入力した第１先頭情報が表す記憶領域に、第２制御情報を格納する。
【００９６】
第２制御情報を格納する処理について詳細に説明する。ログ情報保存部１０４は、入力した第１先頭情報が表す記憶領域に記録されているログ情報セットにおける制御情報（以降、「第３制御情報」と表す）を読み取り、読み取った第３制御情報と、第１制御情報とが一致するか否かを判定する。
【００９７】
第１制御情報と、第３制御情報とが一致する場合に、ログ情報保存部１０４は、入力した第１先頭情報が表す記憶領域に、第２制御情報を格納する。すなわち、この場合に、ログ情報保存部１０４は、不可達状態、入力した制御情報に含まれている記録操作完了情報、処理中状態、及び、入力したログ情報のサイズ情報が表すサイズを含む制御情報を、該ログ情報セットが格納されている記憶領域に格納する。
【００９８】
第３制御情報と、第１制御情報とが一致しない場合に、ログ情報保存部１０４は、読み取った第３制御情報を第１制御情報に設定する。その後、ログ情報保存部１０４は、上述した読み取った第１制御情報に含まれている可達情報を読み取る処理（ステップＳ１４５に相当）、乃至、第３制御情報と第１制御情報とが一致するか否かを判定する処理（ステップＳ１４９（後述）に相当）を実行する。すなわち、ログ情報保存部１０４は、入力した第１先頭情報が表す記憶領域に、作成した第２制御情報を格納するまで、ステップＳ１４５乃至ステップＳ１５０（後述）に示す処理を実行する。
【００９９】
上述したような「ｃａｓ」命令にて実行される処理と同様の処理が、アトミックに実行される。より具体的に、「ｃａｓ」命令にて実行される処理と同様の処理を実行する処理について説明する。
【０１００】
ログ情報保存部１０４は、変数「ｏｌｄｖ」に格納されている第１制御情報と、記憶領域ｂｕｆｆｅｒ［ｍｙＬＳＮ］に格納されている制御情報とが一致しているか否かを判定する（ステップＳ１４９）。
【０１０１】
ログ情報保存部１０４は、変数「ｏｌｄｖ」に格納されている第１制御情報と、記憶領域ｂｕｆｆｅｒ［ｍｙＬＳＮ］に格納されている第３制御情報とが一致している場合に（ステップＳ１４９にてＹＥＳ）、変数「ｎｅｗｖ」に格納されている第２制御情報を、記憶領域ｂｕｆｆｅｒ［ｍｙＬＳＮ］に記録する（ステップＳ１５１）。
【０１０２】
ログ情報保存部１０４は、記憶領域ｂｕｆｆｅｒ［ｍｙＬＳＮ］に格納されている第３制御情報が、変数「ｏｌｄｖ」に格納されている第１制御情報と一致していない場合に（ステップＳ１４９にてＮＯ）、記憶領域ｂｕｆｆｅｒ［ｍｙＬＳＮ］に記録されている第３制御情報を変数「ｏｌｄｖ」に格納する（ステップＳ１５０）。その後、ログ情報保存部１０４は、ステップＳ１４５乃至ステップＳ１４９に示す処理を実行する。
【０１０３】
すなわち、ステップＳ１４９及びステップＳ１５０に示す処理が、「ｃａｓ」命令にて実行される処理と同様にアトミックに実行される。
【０１０４】
次に、ログ情報保存部１０４は、ステップＳ１４５にて読み取った可達情報が可達状態である場合に、ログバッファ情報記憶部１１１に格納されている可達位置情報を更新する更新操作（後述）を可達位置情報更新部１０５に指示する。ログ情報保存部１０４は、たとえば、第２先頭情報を、可達位置情報更新部１０５に対して出力することにより、更新操作を可達位置情報更新部１０５に指示する。ログ情報保存部１０４は、ステップＳ１４５にて読み取った可達情報が可達状態でない場合に、ログバッファ情報記憶部１１１格納されている可達位置情報を更新する更新操作を可達位置情報更新部１０５に指示しない。
【０１０５】
より具体的に、ログ情報保存部１０４は、変数「ｍｙＴｕｒｎ」に格納されている可達情報を読み取り、読み取った可達情報が、可達状態であるか否かを判定する（ステップＳ１５２）。該可達情報が可達状態である場合に（ステップＳ１５２にてＹＥＳ）、ログ情報保存部１０４は、変数「ｎｅｘｔＬＳＮ」に格納されている第２先頭情報を可達位置情報更新部１０５に対して出力することにより、可達位置情報に関する更新操作を可達位置情報更新部１０５に指示する（ステップＳ１５３）。すなわち、ログ情報保存部１０４は、変数「ＲｅａｃｈａｂｌｅＵｐＴｏ」に格納されている可達位置情報を更新する処理を、可達位置情報更新部１０５に指示する。これに対して、該可達情報が可達状態でない場合に（ステップＳ１５２にてＮＯ）、ログ情報保存部１０４は、可達位置情報に関する更新操作を、可達位置情報更新部１０５に指示しない。
【０１０６】
次に、ログ情報保存部１０４は、ログバッファ１１２のうち、入力した第１先頭情報を起点とする記憶領域に、入力した位置情報を起点とする記憶領域に格納されているログ情報を記録する。より具体的に、ログ情報保存部１０４は、変数「ｍｙＬｏｇ」に格納されている位置情報が表す記憶領域に格納されているログ情報を、記憶領域ｂｕｆｆｅｒ［ｍｙＬＳＮ］に、変数「ｍｙＬｅｎｇｔｈ」に格納されている値のサイズ分だけ記録する（ステップＳ１５４）。
【０１０７】
図１１を参照しながら、ステップＳ１５４に後続する処理について詳細に説明する。図１１は、第１の実施形態に係るログ処理部１０２における処理の流れを示すフローチャート（２／３）である。
【０１０８】
ログバッファ情報記憶部１１１は、ログバッファ１１２において、入力した第１先頭情報が表す記憶領域に記録されているログ情報セット、及び、該ログ情報セットに含まれている制御情報（以降、「第４制御情報」と表す）を読み取る。より具体的に、ログ情報保存部１０４は、変数「ｍｙＬＳＮ」に格納されている第１先頭情報が指し示す記憶領域ｂｕｆｆｅｒ［ｍｙＬＳＮ］からログ情報セットを読み取り、読み取ったログ情報セットにおける第４制御情報を変数「ｏｌｄｖ」に格納する（ステップＳ１６０）。
【０１０９】
次に、ログバッファ情報記憶部１１１は、読み取った第４制御情報に格納されている記録操作完了情報を読み取る。より具体的に、ログ情報保存部１０４は、変数「ｏｌｄｖ」に含まれている変数「ｃｆｌａｇ」から記録操作完了情報を読み取り（ステップＳ１６１）、読み取った記録操作完了情報を、たとえば、変数「ｍｙＴｕｒｎ」に格納する（ステップＳ１６２）。
【０１１０】
次に、ログ情報保存部１０４は、不可達状態、完了状態、非処理中状態、及び、第３制御情報に格納されているサイズ情報を含む制御情報（以降、「第５制御情報」と表す）を作成する。より具体的に、ログ情報保存部１０４は、変数「ｏｌｄｖ」に格納されている制御情報を、変数「ｎｅｗｖ」に格納する（ステップＳ１６３）。ログ情報保存部１０４は、変数「ｎｅｗｖ」における変数「ｉｎＣｏｐｙ」に、処理中でないことを表す非処理中状態（たとえば、０）を格納し（ステップＳ１６４）、変数「ｎｅｗｖ」における変数「ｃｆｌａｇ」に、完了したことを表す完了状態（たとえば、０）を格納する（ステップＳ１６５）。さらに、ログ情報保存部１０４は、変数「ｎｅｗｖ」における変数「ｒｆｌａｇ」に、可達状態でないことを表す不可達状態（たとえば、０）を格納する（ステップＳ１６６）。
【０１１１】
次に、ログ情報保存部１０４は、「ｃａｓ」命令にて実行される処理と同様の処理を実行することにより、入力した第１先頭情報が表す記憶領域に、第５制御情報を記録する。
【０１１２】
第５制御情報を記録する処理について詳細に説明する。ログ情報保存部１０４は、入力した第１先頭情報が表す記憶領域に記録されているログ情報セットにおける制御情報（以降、「第６制御情報」と表す）を読み取り、読み取った第６制御情報と、第４制御情報とが一致するか否かを判定する。
【０１１３】
第６制御情報と、第４制御情報とが一致する場合に、ログ情報保存部１０４は、入力した第１先頭情報が表す記憶領域に、第５制御情報を記録する。すなわち、この場合に、ログ情報保存部１０４は、可達状態でないことを表す情報、完了状態、記録操作中でないことを表す情報、及び、入力したログ情報のサイズ情報が表すサイズを含む第５制御情報を、該ログ情報セットが格納されている記憶領域に記録する。
【０１１４】
第６制御情報と、第４制御情報とが一致しない場合に、ログ情報保存部１０４は、読み取った第６制御情報を第４制御情報として設定し、その後、記録操作完了情報を読み取る処理、乃至、第６制御情報と第４制御情報とを比較する処理を実行する。すなわち、ログ情報保存部１０４は、入力した第１先頭情報が表す記憶領域に、作成した制御情報を記録するまで該処理を繰り返す。
【０１１５】
ログ情報保存部１０４は、上述したような「ｃａｓ」命令にて実行される処理と同様の処理を、アトミックに実行する。
【０１１６】
より具体的に、「ｃａｓ」命令にて実行される処理と同様の処理を実行する処理について説明する。ログ情報保存部１０４は、変数「ｏｌｄｖ」に格納されている第４制御情報が、記憶領域ｂｕｆｆｅｒ［ｍｙＬＳＮ］に格納されている第６制御情報と一致するか否かを判定する（ステップＳ１６７）。ログ情報保存部１０４は、記憶領域ｂｕｆｆｅｒ［ｍｙＬＳＮ］に格納されている第６制御情報が、変数「ｏｌｄｖ」に格納されている第４制御情報と一致する場合に（ステップＳ１６７にてＹＥＳ）、変数「ｎｅｗｖ」に格納されている第５制御情報を、記憶領域ｂｕｆｆｅｒ［ｍｙＬＳＮ］に記録する（ステップＳ１６９）。
【０１１７】
記憶領域ｂｕｆｆｅｒ［ｍｙＬＳＮ］に格納されている第６制御情報が、変数「ｏｌｄｖ」に格納されている第４制御情報に一致しない場合に（ステップＳ１６７にてＮＯ）、ログ情報保存部１０４は、記憶領域ｂｕｆｆｅｒ［ｍｙＬＳＮ］に格納されている第６制御情報を変数「ｏｌｄｖ」に格納する（ステップＳ１６８）。その後、ログ情報保存部１０４は、ステップＳ１６２乃至ステップＳ１６７に示す処理を実行する。
【０１１８】
ログ情報保存部１０４は、上述したような「ｃａｓ」命令にて実行される処理と同様の処理を、アトミックに実行する。
【０１１９】
次に、ログ情報保存部１０４は、ステップＳ１６２にて読み取った記録操作完了情報が完了以前を表す未完了状態である場合に、ログバッファ情報記憶部１１１における完了位置情報を更新する更新操作（後述）を完了位置情報更新部１０６に指示する。ログ情報保存部１０４は、たとえば、第２先頭情報を完了位置情報更新部１０６に対して出力することにより、完了位置情報更新部１０６に更新操作を指示する。ログ情報保存部１０４は、ステップＳ１６２にて読み取った記録操作完了情報が未完了状態でない場合に、完了位置情報を更新する更新操作を完了位置情報更新部１０６に指示しない。
【０１２０】
より具体的に、ログ情報保存部１０４は、変数「ｍｙＴｕｒｎ」に格納されている記録操作完了情報を読み取り、読み取った記録操作完了情報が、未完了状態であるか否かを判定する（ステップＳ１７０）。該記録操作完了情報が未完了状態である場合に（ステップＳ１７０にてＹＥＳ）、ログ情報保存部１０４は、変数「ｎｅｘｔＬＳＮ」に格納されている第２先頭情報を完了位置情報更新部１０６に対して出力することにより、完了位置情報に関する更新操作を完了位置情報更新部１０６に指示する（ステップＳ１７１）。すなわち、ログ情報保存部１０４は、変数「ＦｉｎｉｓｈｅｄＵｐＴｏ」に格納されている完了位置情報を更新する処理を、完了位置情報更新部１０６に指示する。ログ情報保存部１０４は、該記録操作完了情報が未完了状態でない場合に（ステップＳ１７０にてＮＯ）、完了位置情報を更新する処理を指示しない。
【０１２１】
次に、図１２を参照しながら、ステップＳ１７０（または、ステップＳ１７１）に後続する処理について詳細に説明する。図１２は、第１の実施形態に係るログ処理部１０２における処理の流れを示すフローチャート（３／３）である。
【０１２２】
ログ情報保存部１０４は、ログバッファ情報記憶部１１１から可達位置情報を読み取り、読み取った可達位置情報と、ステップＳ１４１（図１０）にて算出した第２先頭情報とを比較する。ログ情報保存部１０４は、読み取った可達位置情報が該第２先頭情報未満である場合に、ログバッファ情報記憶部１１１に格納されている可達位置情報が、第２先頭情報以上になるまで待ち合わせる処理を実行する。
【０１２３】
より具体的に、ログ情報保存部１０４は、ログバッファ情報記憶部１１１における変数「ＲｅａｃｈａｂｌｅＵｐＴｏ」に格納されている可達位置情報を読み取り、読み取った可達位置情報と、変数「ｎｅｘｔＬＳＮ」に格納されている第２先頭情報とを比較する（ステップＳ１８１）。ログ情報保存部１０４は、該可達位置情報が該第２先頭情報未満である場合に（ステップＳ１８１にてＮＯ）、ログバッファ情報記憶部１１１における変数「ＲｅａｃｈａｂｌｅＵｐＴｏ」に格納されている可達位置情報が、該第２先頭情報以上なるまで待ち合わせる処理を実行する（ステップＳ１８２）。たとえば、ログ情報保存部１０４が実行する待ち合わせる処理は、変数「ｎｅｘｔＬＳＮ」における値を入力とする「Ｓｌｅｅｐ」関数を用いて実現することができる。
【０１２４】
図１３を参照しながら、可達位置情報更新部１０５が実行する処理について説明する。図１３は、第１の実施形態に係る可達位置情報更新部１０５における処理を表すフローチャートである。
【０１２５】
可達位置情報更新部１０５は、第２先頭情報を入力し、入力した第２先頭情報をメモリ１０８（以降、「第１領域」と表す）に格納する。可達位置情報更新部１０５は、メモリ１０８に格納されている値を読み取り、読み取った値を、ログバッファ情報記憶部１１１に可達位置情報として格納する。より具体的に、可達位置情報更新部１０５は、ログ情報保存部１０４が出力した第２先頭情報を入力し、入力した第２先頭情報を変数「ｎｅｘｔＬＳＮ」に格納する。可達位置情報更新部１０５は、可達位置情報更新部１０５は、変数「ｎｅｘｔＬＳＮ」に格納されている第２先頭情報を、変数「ｌｓｎ」に格納する（ステップＳ１９１）。可達位置情報更新部１０５は、変数「ｌｓｎ」に格納されている値を、ログバッファ情報記憶部１１１における変数「ＲｅａｃｈａｂｌｅＵｐＴｏ」に格納する（ステップＳ１９２）。
【０１２６】
次に、可達位置情報更新部１０５は、ログバッファ１１２において、第１領域に格納されている値が指し示す記憶領域に格納されているログ情報セット、及び、該ログ情報セットにおける制御情報（以降、「第７制御情報」と表す）を読み取る。より具体的に、可達位置情報更新部１０５は、変数「ｌｓｎ」に格納されている値が指し示す記憶領域ｂｕｆｆｅｒ［ｌｓｎ］に記録されている制御情報を読み取る（ステップＳ１９３）。可達位置情報更新部１０５は、読み取ったログ情報セットに含まれている第７制御情報を、変数「ｏｌｄｖ」に格納する（ステップＳ１９４）。
【０１２７】
次に、可達位置情報更新部１０５は、読み取った第７制御情報に含まれているサイズ情報におけるサイズが０であるか否かを判定する。可達位置情報更新部１０５は、該サイズが０でない場合に、第１領域に格納されている値に、第７制御情報に含まれている該サイズを足し算し、算出した値を該第１領域に格納する。以降、制御情報に含まれているサイズ情報が表すサイズが０になるまで、処理を繰り返し実行する。これに対して、可達位置情報更新部１０５は、該サイズが０である場合に、まだ処理が開始されていないことを表す可達状態、第７制御情報に含まれている記録操作完了情報、該第７制御情報に含まれている記録操作状態情報、及び、該第７制御情報に含まれているサイズ情報を含む制御情報（以降、「第８制御情報」と表す）を作成する。この場合に、ステップＳ１９７及びステップＳ１９８にて作成された第８制御情報は、ステップＳ１９５に示す処理を実行した処理であるので、サイズ情報として０を含む。
【０１２８】
より具体的に、可達位置情報更新部１０５は、変数「ｏｌｄｖ」に格納した第７制御情報に含まれている変数「ｌｅｎｇｔｈ」に格納されているサイズが０であるか否かを判定する（ステップＳ１９５）。可達位置情報更新部１０５は、該サイズが０でない場合に（ステップＳ１９５にてＮＯ）、変数「ｌｓｎ」に格納されている値と該変数「ｌｅｎｇｔｈ」に格納されている値とを足し算し、算出される結果を、変数「ｌｓｎ」に格納する（ステップＳ１９６）。その後、可達位置情報更新部１０５は、ステップＳ１９２に示す処理を実行する。これに対して、可達位置情報更新部１０５は、該サイズが０である場合に（ステップＳ１９５にてＹＥＳ）、変数「ｏｌｄｖ」に格納されている第７制御情報を、変数「ｎｅｗｖ」に格納し（ステップＳ１９７）、さらに、変数「ｎｅｗｖ」に、可達情報の値として、まだ処理が開始されていないことを表す可達状態を格納する（ステップＳ１９８）。尚、ステップＳ１９７及びステップＳ１９８に示す処理によって、変数「ｎｅｗｖ」は、第８制御情報を記憶している。
【０１２９】
可達位置情報更新部１０５は、「ｃａｓ」命令によって実行される処理と同様の処理を実行することによって、作成した第８制御情報を、ログバッファ１１２において、第１領域に格納されている値が指し示す記憶領域に記録する。
【０１３０】
第８制御情報を、ログバッファ１１２において、第１領域に格納されている値が指し示す記憶領域に記録する処理について詳細に説明する。可達位置情報更新部１０５は、ログバッファ１１２において第１領域に格納されている値が指し示す記憶領域に格納されている制御情報（以降、「第９制御情報」）を読み取る。可達位置情報更新部１０５は、読み取った第９制御情報と、読み取った第７制御情報とが一致する場合に、作成した第８制御情報を、ログバッファ１１２において、第１領域に格納されている値が指し示す記憶領域に記録する。可達位置情報更新部１０５は、読み取った第９制御情報と、読み取った第７制御情報とが一致しない場合に、「第７制御情報に含まれているサイズ情報におけるサイズが０であるか否かを判定する」処理、乃至、「第９制御情報と第７制御情報とが一致するか否かを判定する」処理を実行する。
【０１３１】
可達位置情報更新部１０５は、上述したような「ｃａｓ」命令にて実行される処理と同様の処理を、アトミックに実行する。
【０１３２】
より具体的に、可達位置情報更新部１０５は、記憶領域ｂｕｆｆｅｒ［ｌｓｎ］に格納されている第９制御情報を読み取り、読み取った第９制御情報と、変数「ｏｌｄｖ」に格納されている第７制御情報とを比較する（ステップＳ１９９）。可達位置情報更新部１０５は、変数「ｏｌｄｖ」に格納されている第７制御情報と、第９制御情報とが一致する場合に（ステップＳ１９９にてＹＥＳ）、変数「ｎｅｗｖ」に格納されている第８制御情報を、記憶領域ｂｕｆｆｅｒ［ｌｓｎ］に記録する（ステップＳ２０１）。可達位置情報更新部１０５は、変数「ｏｌｄｖ」に格納されている第７制御情報と、第９制御情報とが一致しない場合に（ステップＳ１９９にてＮＯ）、記憶領域ｂｕｆｆｅｒ［ｌｓｎ］に格納されている第９制御情報を変数「ｏｌｄｖ」に格納する（ステップＳ２００）。その後、可達位置情報更新部１０５は、ステップＳ１９５に示す処理を実行する。ログ情報保存部１０４は、上述したような「ｃａｓ」命令にて実行される処理と同様の処理を、アトミックに実行する。
【０１３３】
次に、図１４を参照しながら、ステップＳ２０１に後続する処理について詳細に説明する。図１４は、第１の実施形態に係る可達位置情報更新部１０５における処理の流れを示すフローチャートである。
【０１３４】
可達位置情報更新部１０５は、第１領域に格納されている値と、ログバッファ情報記憶部１１１における可達位置情報と比較する。可達位置情報更新部１０５は、可達位置情報よりも小さな値を第１領域に格納しているログ情報保存部１０４に関して、待ち合わせ処理を終了する指示を実行する。該指示を受けた可達位置情報更新部１０５は、待ち合わせ処理を終了する。
【０１３５】
より具体的に、可達位置情報更新部１０５は、たとえば、「ＷａｋｅＵｐ」関数における処理と同様の処理を実行する。可達位置情報更新部１０５は、変数「ｌｓｎ」から値を読み取り、読み取った値と、ログバッファ情報記憶部１１１における可達位置情報とを比較する。可達位置情報更新部１０５は、読み取った値が、可達位置情報未満であるログ情報保存部を特定し、特定したログ情報保存部に待ち合わせ処理を終了する指示を実行する（ステップＳ２１１）。該指示を受信したログ情報保存部は、待ち合わせ処理を終了する。
【０１３６】
図１５を参照しながら、完了位置情報更新部１０６が実行する処理について説明する。図１５は、第１の実施形態に係る完了位置情報更新部１０６における処理を表すフローチャートである。
【０１３７】
完了位置情報更新部１０６は、第２先頭情報を入力し、入力した第２先頭情報をメモリ１０８（以降、「第２領域」と表す）に格納する。より具体的に、完了位置情報更新部１０６は、ログ情報保存部１０４が出力した第２先頭情報を入力し、入力した第２先頭情報を変数「ｎｅｘｔＬＳＮ」に格納する。完了位置情報更新部１０６は、変数「ｎｅｘｔＬＳＮ」に格納されている第２先頭情報を、変数「ｌｓｎ」に格納する（ステップＳ２２１）。
【０１３８】
次に、完了位置情報更新部１０６は、第２領域に格納されている値を、ログバッファ情報記憶部１１１に完了位置情報として格納する。より具体的に、完了位置情報更新部１０６は、変数「ｌｓｎ」に格納されている値を、ログバッファ情報記憶部１１１における変数「ＦｉｎｉｓｈｅｄＵｐＴｏ」に格納する（ステップＳ２２２）。
【０１３９】
次に、完了位置情報更新部１０６は、ログバッファ１１２において、第２領域に格納されている値が指し示す記憶領域に格納されている制御情報（以降、「第１０制御情報」と表す）を読み取る。可達位置情報更新部１０５は、読み取った第１０制御情報に含まれているサイズ情報におけるサイズが０であるか否か、及び、該第１０制御情報における記録操作状態情報が処理中状態であるか否かのうち、少なくとも一方を判定する。
【０１４０】
完了位置情報更新部１０６は、該サイズが０でなく、かつ、該記録操作状態情報が非処理中状態である場合に、第１領域に格納されている値に、読み取った該第１０制御情報に含まれている該サイズを足し算する。
【０１４１】
完了位置情報更新部１０６は、該サイズが０であるか、または、該記録操作状態情報が処理中状態である場合に、以下の４つの情報を含む制御情報（以降、「第１１制御情報」と表す）を作成する。
【０１４２】
・該第１０制御情報に含まれている可達情報、
・処理が完了する以前の状態を表している未完了状態、
・該第１０制御情報に含まれている記録操作状態情報、
・該第１０制御情報に含まれているサイズ情報を含む制御情報。
【０１４３】
より具体的に、完了位置情報更新部１０６は、変数「ｌｓｎ」に格納されている値が指し示す記憶領域ｂｕｆｆｅｒ［ｌｓｎ］に記録されている制御情報を読み取る（ステップＳ２２３）。完了位置情報更新部１０６は、読み取った制御情報に含まれている第１０制御情報を、変数「ｏｌｄｖ」に格納する（ステップＳ２２４）。可達位置情報更新部１０５は、以下に示す判定処理１及び判定処理２のうち、少なくとも一方の判定処理を実行する（ステップＳ２２５）。
【０１４４】
・判定処理１：変数「ｏｌｄｖ」に格納した第１０制御情報に含まれている変数「ｌｅｎｇｔｈ」に格納されているサイズが０であるか否か、
・判定処理２：変数「ｏｌｄｖ」に格納した第１０制御情報に含まれている変数「ｉｎＣｏｐｙ」が、処理中状態であるか否か。
【０１４５】
可達位置情報更新部１０５は、変数「ｌｅｎｇｔｈ」に格納されているサイズが０でなく、かつ、変数「ｉｎＣｏｐｙ」に格納されている値が非処理中状態である場合に（ステップＳ２２５にてＮＯ）、変数「ｌｓｎ」に格納されている値と、変数「ｏｌｄｖ」に含まれている変数「ｌｅｎｇｔｈ」に格納されている値とを足し算する（ステップＳ２２６）。可達位置情報更新部１０５は、算出した結果を変数「ｌｓｎ」に格納する。その後、可達位置情報更新部１０５は、ステップＳ２２２に示した処理を実行する。
【０１４６】
尚、可達位置情報更新部１０５は、変数「ｌｅｎｇｔｈ」に格納されているサイズが０である、または、変数「ｉｎＣｏｐｙ」に格納されている値が処理中状態である場合に（ステップＳ２２５にてＹＥＳ）、変数「ｏｌｄｖ」に格納されている第１０制御情報を、変数「ｎｅｗｖ」に格納する（ステップＳ２２７）。可達位置情報更新部１０５は、該変数「ｎｅｗｖ」に含まれている変数「ｃｆｌａｇ」に１（すなわち、未完了状態）を格納する（ステップＳ２２８）。すなわち、変数「ｎｅｗｖ」は、第１１制御情報を格納している。
【０１４７】
次に、完了位置情報更新部１０６は、「ｃａｓ」命令にて実行される処理と同様の処理を実行することにより、作成した第１１制御情報を、ログバッファ１１２において、第２領域に格納されている値が指し示す記憶領域に記録する。
【０１４８】
第１１制御情報を記録する処理について詳細に説明する。完了位置情報更新部１０６は、ログバッファ１１２において、第２領域に格納されている値に格納されている制御情報（以降、「第１２制御情報」と表す）を読み取る。完了位置情報更新部１０６は、読み取った第１２制御情報と、第１０制御情報とが一致する場合に、作成した第１１制御情報を、ログバッファ１１２において、第２領域に格納されている値が指し示す記憶領域に記録する。完了位置情報更新部１０６は、読み取った第１２制御情報と、第１０制御情報とが一致しない場合に、第１２制御情報を第１０制御情報に設定し、その後、第１０制御情報に関する上述した判定処理を実行する。
【０１４９】
完了位置情報更新部１０６は、上述したような「ｃａｓ」命令にて実行される処理と同様の処理を、アトミックに実行する。より具体的に、「ｃａｓ」命令にて実行される処理と同様の処理を実行する処理について説明する。
【０１５０】
完了位置情報更新部１０６は、記憶領域ｂｕｆｆｅｒ［ｌｓｎ］に格納されている第１２制御情報を読み取る。完了位置情報更新部１０６は、読み取った第１２制御情報と、第１０制御情報とが一致する場合に（ステップＳ２２９にてＹＥＳ）、変数「ｎｅｗｖ」に格納されている第１１制御情報を記憶領域ｂｕｆｆｅｒ［ｌｓｎ］に記録する（ステップＳ２３１）。完了位置情報更新部１０６は、読み取った第１２制御情報と、第１０制御情報とが一致しない場合に（ステップＳ２２９にてＮＯ）、記憶領域ｂｕｆｆｅｒ［ｌｓｎ］に格納されている第１２制御情報を変数「ｏｌｄｖ」に格納する（ステップＳ２３０）。その後、完了位置情報更新部１０６は、ステップＳ２２５に示す処理を実行する。
【０１５１】
完了位置情報更新部１０６は、上述したような「ｃａｓ」命令にて実行される処理と同様の処理を、アトミックに実行する。
【０１５２】
すなわち、完了位置情報更新部１０６は、図１５に示した処理を実行することによって、ログバッファ１１２に含まれるログ情報セットにおいて、該ログ情報セットに関して、サイズが０である、または、処理中状態であるログ情報セットを探す。すなわち、可達位置情報更新部１０５は、処理しているログ情報セットよりも識別子が大きな値を有するログ情報セットのうち、処理中状態であるログ情報セットか、または、まだサイズが０であるログ情報セットを探す。可達位置情報更新部１０５は、見つけたログ情報セットに含まれている制御情報に未完了状態（または、１）を設定する。すなわち、可達位置情報更新部１０５は、処理しているログ情報セットよりも識別子が大きな値を有するログ情報セットのうち、まだ、処理中状態であるか、まだサイズが０であるログ情報セットに関して未完了状態（すなわち、完了以前であることを表す）に設定する。
【０１５３】
次に、第１の実施形態に係るデータベース管理装置１０１に関する効果について説明する。
【０１５４】
本実施形態に係るデータベース管理装置１０１によれば、ログバッファ１１２に対する処理要求を短期間に処理可能にする制御情報を記憶領域に効率よく設定することができる。この理由は、排他制御権を有している期間内に処理を実行している期間に、ログ処理部１０２がログバッファ１１２にサイズを設定する操作等を実行する必要がないからである。
【０１５５】
上述した効果を奏する理由について、さらに詳細に説明する。
【０１５６】
本実施形態に係るデータベース管理装置１０１が、ログバッファ１１２を割り当てる操作において、取得した排他制御権を有している期間内に実行する操作は、ログバッファ１１２に関する変数「ＴＡＩＬ」を読み出し、その後、更新するだけである。
【０１５７】
これに対して、非特許文献１に記載された装置が取得した排他制御権を有している期間内に実行する必要がある操作は、変数「ＴＡＩＬ」に関する処理に加え、ログバッファにおける制御情報にサイズに関するサイズ情報を設定する処理と、記録操作状態情報を設定する処理とである。
【０１５８】
さらに、非特許文献１に記載された装置は、ログ情報をログバッファに記録した後に、トランザクションに関する処理を完了することによってデータベースにおけるデータを確実に格納する。したがって、該装置においては、特に、情報システムが多数のコアを搭載するシステム（メニーコアシステム）である場合に、複数プロセスが同時にログバッファを確保する操作を実行することに伴い、競合が発生する。この結果、メニーコアシステムの処理性能は、低下する。
【０１５９】
したがって、データベース管理装置１０１と、非特許文献１に記載された装置とを比較すると、排他制御権を有している期間内に実行する処理は、データベース管理装置１０１の方が、ログバッファ１１２に対する処理の分だけ少ない。すなわち、取得した排他制御権を有している期間内に実行する処理量が少ないので、本実施形態に係るデータベース管理装置１０１によれば、たとえば、メニーコアシステムにて、該排他制御に関する競合を低減することができる。
【０１６０】
また、非特許文献２に開示された装置は、本実施形態に係るデータベース管理装置１０１と比較して、該システムにおけるログバッファに関する制御が複雑であるという課題を有する。この理由は、たとえば、以下の２つである。すなわち、
○管理対象であるログバッファ１１２が複数である場合に、各プロセスが、書き込み先のログバッファ１１２を選択する必要がある、
○ログ情報に対する記録処理が完了したか否かを判定する対象（すなわち、ログバッファ１１２）が複数ある場合に、障害発生後のデータ復旧操作においては、各ログバッファ１１２に書き込まれたログ情報の順序を認識し、その順序通りにログ情報を読み込む必要が生じる。
【０１６１】
したがって、本実施形態に係るデータベース管理装置１０１によれば、複雑な制御を実行する必要がない。
【０１６２】
たとえば、ログバッファ１１２を、データベースに関する変更履歴を表すログ情報を不揮発性のメモリを用いて実現することもできる。この場合に、本実施形態に係るデータベース管理装置１０１によれば、該変更履歴を、入出力操作が必要となるディスクやＳＳＤ等のデバイスに、変更履歴の発生に同期しながら記録する必要はない。また、本実施形態に係るデータベース管理装置１０１によれば、特に、コア数が多いメニーコアシステムにおいて、ログ情報を高速に記録する実行することができる。
【０１６３】
本実施形態に係るデータベース管理装置１０１における記録操作完了情報によれば、ログバッファ１１２におけるログ情報セットに関する処理が完了前であるか否かを、短期間に判定することができる。この理由は、制御情報が、処理が完了前であるか否かを表す記録操作完了情報を含むからである。制御情報が記録操作完了情報を有するので、データベース管理装置１０１は、あるログ情報セットにおける該記録操作完了情報を参照することにより、該あるログ情報セットに関して入出力処理が完了したか否かを短期間に判定することができる。
【０１６４】
本実施形態に係るデータベース管理装置１０１における可達位置情報によれば、ログバッファ１１２において、どのログ情報セットまで、処理が開始されたのかを短期間に知ることができる。この理由は、可達位置情報更新部１０５が、可達状態であるログ情報セットのうち、最も後順に位置するログ情報セットの位置を特定することができるからである。
【０１６５】
また、本実施形態に係るデータベース管理装置１０１における可達位置情報によれば、ログ情報セットを記録する処理を、すべて、確実に実行することができる。この理由は、可達位置情報更新部１０５が特定した位置に基づき、すべてのログ情報セットに関する処理が開始されるまで、待ち合わせ処理を実行するからである。すなわち、ログ処理部１０２は、ログ情報セットに関する処理が、すべて開始されたタイミングにて同期処理を実行する。したがって、ログ情報セットに関する処理が、すべて完了したタイミングにて同期処理を実行する場合よりも、本実施形態に係るデータベース管理装置１０１によれば、より早期に、次の処理を実行することができる。
【０１６６】
また、本実施形態に係るデータベース管理装置１０１における完了位置情報によれば、ログバッファ１１２において、どのログ情報セットまで、処理が完了する以前の状態にあるのか否かを、短期間に知ることができる。この理由は、完了位置情報更新部１０６が、変数「ｌｅｎｇｔｈ」に格納されているサイズが０である制御情報を記録している位置を特定するからである。
【０１６７】
また、ログバッファ情報記憶部１１１を、複数のトランザクション実行部が参照可能なメモリ１０８にて実現することによって、より効率的に処理を実行することができる。この理由は、複数のトランザクション実行部が、メモリ１０８に格納された位置を参照することができるからである。複数のトランザクション実行部は、相互に通信処理を実行することなく、該位置を参照することができる。さらに、本実施形態に係るデータベース管理装置１０１によれば、メモリ１０８の処理性能が高いほど、より短期間に該位置を参照することができるという効果も奏する。
【０１６８】
＜第２の実施形態＞
図１６を参照しながら、本発明の第２の実施形態に係る制御情報設定装置１５１が有する構成について詳細に説明する。図１６は、本発明の第２の実施形態に係る制御情報設定装置１５１が有する構成を示すブロック図である。
【０１６９】
第２の実施形態に係る制御情報設定装置１５１は、可達情報設定部１５２と、ログバッファ１５３とを有する。
【０１７０】
ログバッファ１５３は、図２を参照しながら説明したように、ログ情報と、該ログ情報に関する処理を実行する場合に参照する制御情報とが関連付けされたログ情報セットを記憶する空間が、論理的に順番に並んでいる（すなわち、論理的に順序付けされている）とする。制御情報は、後順に位置するログ情報セットを参照することが可能であるか否かを表す可達情報、及び、該ログ情報のサイズ（大きさ、サイズ）を表すサイズ情報を含んでいるとする。
【０１７１】
説明の便宜上、ログバッファ１５３においては、ログ情報に関する処理を割り当て済みの領域（以降、「第１領域」と表す）と、ログ情報に関する処理を割り当てていない領域（以降、「第２領域」と表す）とが区分されているとする。
【０１７２】
次に、図１７を参照しながら、第２の実施形態に係る制御情報設定装置１５１における処理について説明する。図１７は、第２の実施形態に係る制御情報設定装置１５１における処理の流れを示すフローチャートである。
【０１７３】
可達情報設定部１５２は、第１領域及び第２領域の間の境界値と、たとえば、該外部装置が出力した該ログ情報のサイズ、及び、該ログ情報を入力する。可達情報設定部１５２は、ログバッファ１５３において、入力した境界値によって指し示された記憶領域（以降、「第１記憶領域」と表す）に記録されている制御情報（以降、「第１制御情報」と表す）を読み取る（ステップＳ２４１）。可達情報設定部１５２は、第１記憶領域に記録されている制御情報において、後順に位置するログ情報セットを参照することが不可能であるであることを表す不可達状態を設定する（ステップＳ２４２）。可達情報設定部１５２は、第１記憶領域に記録されている制御情報に対して、入力したサイズをサイズ情報に設定する（ステップＳ２４３）。
【０１７４】
可達情報設定部１５２は、読み取った第１制御情報に含まれている可達情報が、可達状態か否かを判定する（ステップＳ２４４）。可達情報設定部１５２は、該可達情報が可達状態である場合に（ステップＳ２４４にてＹＥＳ）、ログバッファ１５３において、ログ情報セットに関する順序に従い、制御情報に含まれているサイズ情報が所定の条件を満たす第２制御情報を特定する（ステップＳ２４５）。たとえば、所定の条件は、サイズ情報が０であるか否かである。たとえば、可達情報設定部１５２は、ステップＳ２４５に示す処理にて、該第１制御情報に後続する制御情報の中から、第２制御情報を特定する。当該論理的順序をなす記憶領域において、第１制御情報に後続する制御情報を記録している位置は、たとえば、第１の実施形態における変数「ｎｅｘｔＬＳＮ」に格納されている位置である。
【０１７５】
可達情報設定部１５２は、特定した第２制御情報に含まれている可達情報に可達状態を設定する（ステップＳ２４６）。
【０１７６】
これに対して、可達情報設定部１５２は、読み取った第１制御情報に含まれている可達情報が、不可達状態である場合に（ステップＳ２４４にてＮＯ）、ステップＳ２４５及びステップＳ２４６に示す処理を実行しない。
【０１７７】
境界値は、たとえば、第１の実施形態に示したログバッファ情報記憶部１１１（図４）に格納されている先頭位置情報である。可達情報設定部１５２は、たとえば、上述したログ情報保存部１０４（図１）等が有する機能によって実現することができる。
【０１７８】
次に、第２の実施形態に係る制御情報設定装置１５１に関する効果について説明する。
【０１７９】
本実施形態に係る制御情報設定装置１５１によれば、ログバッファ１５３に対する処理要求を短期間に処理可能にする制御情報を記憶領域に効率よく設定することができる。この理由は、ログバッファ１５３にサイズを設定する処理を、ログバッファ１５３に関する排他制御権を有さない期間に、可達情報を用いて実現することができるからである。
【０１８０】
これに対して、たとえば、非特許文献１に開示された装置は、複数のトランザクション実行部が共有しているログバッファ内の制御情報におけるサイズ情報を、該ログバッファに関して排他制御権を有している期間内に設定する。この結果、第２の実施形態に係る制御情報設定装置１５１によれば、該排他制御権を有している期間内に処理する処理量は減少する。したがって、本実施形態に係る制御情報設定装置１５１によれば、処理要求を短期間に処理可能にする制御情報を設定することができる。
【０１８１】
（ハードウェア構成例）
上述した本発明の各実施形態におけるデータベース管理装置を、１つの計算処理装置（情報処理装置、コンピュータ）を用いて実現するハードウェア資源の構成例について説明する。但し、係るデータベース管理装置は、物理的または機能的に少なくとも２つの計算処理装置を用いて実現してもよい。また、係るデータベース管理装置は、専用の装置として実現してもよい。
【０１８２】
図１８は、第１の実施形態に係るデータベース管理装置及び第２の実施形態に係る制御情報設定装置を実現可能な計算処理装置のハードウェア構成例を概略的に示す図である。計算処理装置２０は、中央処理演算装置（Ｃｅｎｔｒａｌ＿Ｐｒｏｃｅｓｓｉｎｇ＿Ｕｎｉｔ、以降「ＣＰＵ」と表す）２１、メモリ２２、ディスク２３、及び、不揮発性記録媒体２４、通信インターフェース（以降、「通信ＩＦ」と表す）２７、及び、ディスプレー２８を有する。計算処理装置２０は、さらに、入力装置２５、出力装置２６を有してもよい。計算処理装置２０は、通信ＩＦ２７を介して、他の計算処理装置、及び、通信装置と情報を送受信することができる。
【０１８３】
不揮発性記録媒体２４は、コンピュータが読み取り可能な、たとえば、コンパクトディスク（Ｃｏｍｐａｃｔ＿Ｄｉｓｃ）、デジタルバーサタイルディスク（Ｄｉｇｉｔａｌ＿Ｖｅｒｓａｔｉｌｅ＿Ｄｉｓｃ）である。また、不揮発性記録媒体２４は、ユニバーサルシリアルバスメモリ（ＵＳＢメモリ）、ソリッドステートドライブ（Ｓｏｌｉｄ＿Ｓｔａｔｅ＿Ｄｒｉｖｅ）等であってもよい。不揮発性記録媒体２４は、電源を供給しなくても係るプログラムを保持し、持ち運びを可能にする。不揮発性記録媒体２４は、上述した媒体に限定されない。また、不揮発性記録媒体２４の代わりに、通信ＩＦ２７、及び、通信ネットワークを介して係るプログラムを持ち運びしてもよい。
【０１８４】
すなわち、ＣＰＵ２１は、ディスク２３に記憶されているソフトウェア・プログラム（コンピュータ・プログラム：以下、単に「プログラム」と称する）を、実行する際にメモリ２２にコピーし、演算処理を実行する。ＣＰＵ２１は、プログラム実行に必要なデータをメモリ２２から読み取る。表示が必要な場合には、ＣＰＵ２１は、ディスプレー２８に出力結果を表示する。外部への出力が必要な場合には、ＣＰＵ２１は、出力装置２６に出力結果を出力する。外部からプログラムを入力する場合、ＣＰＵ２１は、入力装置２５からプログラムを読み取る。ＣＰＵ２１は、上述した図１、または、図１６に示す各部が表す機能（処理）に対応するところのメモリ２２にあるデータベース管理プログラム（図５、図６、図８乃至図１５）、または、制御情報設定プログラム（図１７）を解釈し実行する。ＣＰＵ２１は、上述した本発明の各実施形態において説明した処理を順次実行する。
【０１８５】
すなわち、このような場合、本発明は、係る制御情報設定プログラム、または、係るデータベース管理プログラムによっても成し得ると捉えることができる。さらに、係るデータベース管理プログラム、または、係る制御情報設定プログラムが記録されたコンピュータが読み取り可能な不揮発性の記録媒体によっても、本発明は成し得ると捉えることができる。
【０１８６】
以上、上述した実施形態を模範的な例として本発明を説明した。しかし、本発明は、上述した実施形態には限定されない。すなわち、本発明は、本発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
【符号の説明】
【０１８７】
１０１    データベース管理装置
１０２    ログ処理部
１０３    先頭位置算出部
１０４    ログ情報保存部
１０５    可達位置情報更新部
１０６    完了位置情報更新部
１０７    トランザクション実行部
１０８    メモリ
１０９    トランザクション実行部
１１０    トランザクション実行部
１１１    ログバッファ情報記憶部
１１２    ログバッファ
１５１    制御情報設定装置
１５２    可達情報設定部
１５３    ログバッファ
２０    計算処理装置
２１    ＣＰＵ
２２    メモリ
２３    ディスク
２４    不揮発性記録媒体
２５    入力装置
２６    出力装置
２７    通信ＩＦ
２８    ディスプレー
【図１】
0006536237.tif 000002
【図２】
0006536237.tif 000003
【図３】
0006536237.tif 000004
【図４】
0006536237.tif 000005
【図５】
0006536237.tif 000006
【図６】
0006536237.tif 000007
【図７】
0006536237.tif 000008
【図８】
0006536237.tif 000009
【図９】
0006536237.tif 000010
【図１０】
0006536237.tif 000011
【図１１】
0006536237.tif 000012
【図１２】
0006536237.tif 000013
【図１３】
0006536237.tif 000014
【図１４】
0006536237.tif 000015
【図１５】
0006536237.tif 000016
【図１６】
0006536237.tif 000017
【図１７】
0006536237.tif 000018
【図１８】
0006536237.tif 000019