(57)【要約】【課題】高速にログ書き込みを行う情報処理装置を提供する。【解決手段】本実施形態に係る情報処理装置は、不揮発性記憶手段と、第１のデータを生成する生成手段と、第２の記憶手段を第１の値で初期化する初期化手段と、第１のデータ内に含まれている第１の値と第１のデータの先頭を識別する第２の値とを、第１の値に対応する第１の参照情報と第２の値に対応する第２の参照情報に置き換えた第２のデータに変換し、第２のデータに第２の値及び第２のデータのデータ長を付加した第３のデータを生成する変換手段と、変換手段によって生成された第３のデータを不揮発性記憶手段に書き込む書き込み手段とを含む。【選択図】図１
2017162288.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性記憶手段と、
第１のデータを生成する生成手段と、
前記不揮発性記憶手段を第１の値で初期化する初期化手段と、
前記第１のデータ内に含まれている前記第１の値と前記第１のデータの先頭を識別する第２の値とを、前記第１の値に対応する第１の参照情報と前記第２の値に対応する第２の参照情報に置き換えた第２のデータに変換し、前記第２のデータに前記第２の値及び前記第２のデータのデータ長を付加した第３のデータを生成する変換手段と、
前記変換手段によって生成された前記第３のデータを前記不揮発性記憶手段に書き込む
書き込み手段と、
を具備する、情報処理装置。
【請求項２】
不揮発性記憶手段と、
第１のデータを生成する生成手段と、
前記第１のデータの先頭を識別する第１の値と前記第１のデータの末尾を識別する第２の値の組を複数生成し、前記第１のデータ内に含まれている全ての前記第１の値と全ての前記第２の値とを、前記第１の値に対応する第１の参照情報と前記第２の値に対応する第２の参照情報に置き換えた第２のデータに変換し、前記第２のデータに１組の前記第１の値及び前記第２の値と前記第２のデータのデータ長を付加した第３のデータを生成する変換手段と、
前記変換手段によって生成された前記第３のデータを前記不揮発性記憶手段に書き込む
書き込み手段と、
前記変換手段によって生成された複数の前記第３のデータのサイズの合計が、前記不揮発性記憶手段のサイズの整数倍となるごとに、前記第１の値と前記第２の値の組を切り替える切り替え手段と、
を具備する、情報処理装置。
【請求項３】
作業用記憶手段を備える第１の処理装置と、
前記第１の処理装置と通信可能であり、不揮発性記憶手段を備える第２の処理装置と、
を具備し、
前記第１の処理装置は、
第１のデータを生成する生成手段と、
前記不揮発性記憶手段を第１の値で初期化する初期化手段と、
前記第１のデータ内に含まれている前記第１の値と前記第１のデータの先頭を識別する第２の値とを、前記第１の値に対応する第１の参照情報と前記第２の値に対応する第２の参照情報に置き換えた第２のデータに変換し、前記第２のデータに前記第２の値及び前記第２のデータのデータ長を付加した第３のデータを生成する変換手段と、
前記変換手段によって生成された前記第３のデータを前記不揮発性記憶手段に書き込む書き込み手段と、
を具備する、情報処理システム。
【請求項４】
作業用記憶手段を備える第１の処理装置と、
前記第１の処理装置と通信可能であり、不揮発性記憶手段を備える第２の処理装置と、
を具備し、
前記第１の処理装置は、
第１のデータを生成する生成手段と、
前記第１のデータの先頭を識別する第１の値と前記第１のデータの末尾を識別する第２の値の組を複数生成し、前記第１のデータ内に含まれている全ての前記第１の値と全ての前記第２の値とを、前記第１の値に対応する第１の参照情報と前記第２の値に対応する第２の参照情報に置き換えた第２のデータに変換し、前記第２のデータに１組の前記第１の値及び前記第２の値と前記第２のデータのデータ長を付加した第３のデータを生成する変換手段と、
前記変換手段によって生成された前記第３のデータを前記不揮発性記憶手段に書き込む書き込み手段と、
前記変換手段によって生成された複数の前記第３のデータのサイズの合計が、前記不揮発性記憶手段のサイズの整数倍となるごとに、前記第１の値と前記第２の値の組を切り替える切り替え手段と、
を具備する、情報処理システム。
【請求項５】
コンピュータを、
不揮発性記憶装置を第１の値で初期化する初期化手段と、
第１のデータを生成し、記憶装置に書き込む生成手段と、
前記第１のデータ内に含まれている前記第１の値と前記第１のデータの先頭を識別する第２の値とを、前記第１の値に対応する第１の参照情報と前記第２の値に対応する第２の参照情報に置き換えた第２のデータに変換し、前記第２のデータに前記第２の値及び前記第２のデータのデータ長を付加した第３のデータを生成し、前記記憶装置に書き込む変換手段と、
前記記憶装置に書き込まれた前記第３のデータを前記不揮発性記憶装置に書き込む書き込み手段と、
して機能させるためのプログラム。
【請求項６】
コンピュータを、
第１のデータを生成し、記憶装置に書き込む生成手段と、
前記第１のデータの先頭を識別する第１の値と前記第１のデータの末尾を識別する第２の値の組を複数生成し、前記第１のデータ内に含まれている全ての前記第１の値と全ての前記第２の値とを、前記第１の値に対応する第１の参照情報と前記第２の値に対応する第２の参照情報に置き換えた第２のデータに変換し、前記第２のデータに１組の前記第１の値及び前記第２の値と前記第２のデータのデータ長を付加した第３のデータを生成し、前記記憶装置に書き込む変換手段と、
前記記憶装置に書き込まれた前記第３のデータを前記不揮発性記憶手段に書き込む書き込み手段と、
前記変換手段によって生成された複数の前記第３のデータのサイズの合計が、前記不揮発性記憶手段のサイズの整数倍となるごと、前記第１の値と前記第２の値の組を切り替える切り替え手段と、
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、情報処理装置、情報処理システム、及びプログラムに関する。
【背景技術】
【０００２】
不揮発メモリをＤＢＭＳ（Database Management System）におけるログ保存先として利用する方法が開発されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許第２０１２／０２５４１２０号
【非特許文献】
【０００４】
【非特許文献１】Dror Goldenberg, Mellanox Technologies, “InfiniBand Tecnology Overview”, [2016年3月10日検索], インターネット<URL：http://www.snia.org/sites/default/education/tutorials/2008/spring/networking/Goldenberg-D_InfiniBand_Tecnology_Overview.pdf>
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本実施形態は、高速にログ書き込みを行う情報処理装置、情報処理システム、及びプログラムを提供する。
【課題を解決するための手段】
【０００６】
本実施形態に係る情報処理装置は、不揮発性記憶手段と、第１のデータを生成する生成手段と、第２の記憶手段を第１の値で初期化する初期化手段と、第１のデータ内に含まれている第１の値と第１のデータの先頭を識別する第２の値とを、第１の値に対応する第１の参照情報と第２の値に対応する第２の参照情報に置き換えた第２のデータに変換し、第２のデータに第２の値及び第２のデータのデータ長を付加した第３のデータを生成する変換手段と、変換手段によって生成された第３のデータを不揮発性記憶手段に書き込む書き込み手段とを含む。
【図面の簡単な説明】
【０００７】
【図１】第１の実施形態に係る情報処理システムの構成を例示するブロック図。
【図２】第１の実施形態に係る高速ログアクセス部の構成を例示するブロック図。
【図３】第１の実施形態に係る高速ログ保存部の構成を例示するブロック図。
【図４】第１の実施形態に係るログバッファの構成を例示する図。
【図５】第１の実施形態に係るログ初期化部及びログ管理部の処理を例示するフローチャート。
【図６】第１の実施形態に係るログ書き込み部の処理を例示するフローチャート。
【図７】第１の実施形態に係るＲＤＭＡを用いたログ書き込み処理を例示する図。
【図８】第１の実施形態に係る複数のログの並列保存を例示する図。
【図９】図８におけるサーバ障害発生時のログバッファ及びログ保存領域の状態を例示する図。
【図１０】第１の実施形態に係るログリカバリ処理を例示するフローチャート。
【図１１】第１の実施形態に係る変換後ログの取り出し処理を例示するフローチャート。
【図１２】第１の実施形態に係る基本ログ変換処理を例示するフローチャート。
【図１３】第１の実施形態に係る基本ログ変換処理を例示する概念図。
【図１４】第１の実施形態に係る基本ログ逆変換処理を例示するフローチャート。
【図１５】Ｓｎａｐｐｙにおけるタグ情報の種類を例示する図。
【図１６】入力データが６４ＫＢを超える場合のログ変換処理を例示するフローチャート。
【図１７】入力データが６４ＫＢを超える場合のログ変換処理を例示する概念図。
【図１８】入力データが６４ＫＢを超える場合のログ逆変換処理を例示するフローチャート。
【図１９】第２の実施形態に係るログバッファ及びログ保存領域を例示する図。
【図２０】第２の実施形態に係るログファイル位置と書き込みフェーズとの関係を示す図。
【図２１】第２の実施形態に係るログ変換処理を例示するフローチャート。
【図２２】第２の実施形態に係る基本ログ変換処理を例示するフローチャート。
【図２３】第２の実施形態に係る基本ログ変換処理を例示する概念図。
【図２４】第２の実施形態に係る基本ログ逆変換処理を例示するフローチャート。
【図２５】第２の実施形態に係るログリカバリ処理を例示するフローチャート。
【図２６】第２の実施形態に係る変換後ログの取り出し処理を例示するフローチャート。
【図２７】第２の実施形態に係るログ保存時におけるすきま処理を例示する図。
【図２８】第２の実施形態に係るログ長の制御バイトの構成を示す図。
【図２９】第３の実施形態に係るログ保存領域の構成を例示する図。
【図３０】第３の実施形態に係るログファイル位置と書き込みフェーズとの関係を示す図。
【図３１】第３の実施形態に係るログのヘッダー及びフッターを例示する図。
【図３２】第３の実施形態に係るログリカバリ部の書き込みフェーズ決定処理を例示するフローチャート。
【図３３】一般的なトランザクション処理を例示する図。
【図３４】ＥＬＲを用いたトランザクション処理の第１の例を示す図。
【図３５】ＥＬＲを用いたトランザクション処理の第２の例を示す図。
【図３６】第４の実施形態に係るＥＬＲを用いたトランザクション処理の第１の例を示す図。
【図３７】第４の実施形態に係るＥＬＲを用いたトランザクション処理の第２の例を示す図。
【図３８】第４の実施形態に係るログファイル位置と書き込みフェーズとの関係を示す図。
【図３９】第４の実施形態に係るログのヘッダー及びフッターを例示する図。
【発明を実施するための形態】
【０００８】
以下、図面を参照しながら本発明の実施の形態について説明する。なお、以下の説明において、略又は実質的に同一の機能及び構成要素については、同一符号を付し、必要に応じて説明を行う。
【０００９】
［第１の実施形態］
高速アクセス可能かつバイト単位で読み書き可能な不揮発性メモリ（Storage Class Memory：ＳＣＭ）をＤＢＭＳ（Database Management System）のログ保存先に適用する方法が開発されている。ＤＢＭＳでは、サーバ装置が故障してもサービスを継続するために、サーバ装置とは別にストレージ装置が用意される場合がある。サーバ装置とストレージ装置は、ストレージネットワークを通じて接続される。例えば、ユーザ端末（クライアント）がＤＢＭＳに対してデータの読み出しを要求すると、ＤＢＭＳのサーバ装置が読み出し要求を受け付け、サーバ装置はストレージネットワークを通じて、ストレージ装置より要求されているデータを取得し、ユーザ端末へ送信する。ユーザ端末がＤＢＭＳに対して書き込み要求を行う場合も同様であり、ＤＢＭＳのサーバ装置が書き込み要求を受け付け、サーバ装置はストレージネットワークを通じて、ストレージ装置に対し要求されているデータの書き込みを指示する。
【００１０】
ログ保存領域にＳＣＭを用いることで、複数のログをランダムに書き込むことができるため、ログ書き込みの高速化を図ることができる。複数のログをランダムに書き込む際、書き込み領域を確保したままデータが書かれていない状態（以下、穴状態と呼ぶ）、又は書き込み途中状態（以下、部分書き込み状態と呼ぶ）でサーバ装置が故障した場合に備えるため、各ログの長さ及び書き込み完了したか否かを示す情報をストレージ装置の不揮発メモリに保存する必要がある。
【００１１】
しかしながら、この情報を書き込むため、１回のログ書き込みに対してサーバ装置とストレージ装置間でさらに複数回のアクセスが必要となる。このため、書き込みのオーバヘッドが非常に大きく、不揮発メモリの高速性を活かすことができない。
【００１２】
また、サーバ装置がストレージ装置とのアクセスに高速なインターフェイス（例えば、infiniband（登録商標），Converged Ethernet（登録商標），OmniNetなど）を用いる場合でも、サーバ装置側ＯＳ（Operating System）のＩＯ（In Out）スタックを経由することによりアクセス速度が低下するため、不揮発メモリの高速性を活かすことができない。さらに、上述の高速インターフェイスは４Ｋバイト以上の大きなサイズのデータの読み書きを想定しおり、ログなどの１ＫＢ以下の小さなサイズのデータをアクセスするのに適していない。
【００１３】
本実施形態に係る情報処理システムでは、ＳＣＭを用いた高速なログ書き込みが必要なシステムにおいて、ＯＳのＩＯスタックを経由しないで直接ストレージ装置に書き込むことで、高速なログ書き込みを実現する。また、本実施形態に係る情報処理システムでは、１回の書き込みアクセスでログの穴状態及び部分書き込み状態を検出可能である。
【００１４】
図１は、本実施形態に係る情報処理システム１の構成を例示するブロック図である。
【００１５】
情報処理システム１は、サーバ装置２、ストレージ装置３、ログストレージ装置４、ストレージネットワーク５を備える。
【００１６】
サーバ装置２は、ＤＢＭＳの処理を行うコンピュータである。サーバ装置２は、アプリケーション／ミドルウェア２１、ストレージアクセス部２２、インターフェイス部２３、高速ログアクセス部２４、高速インターフェイス部２５を備える。
【００１７】
アプリケーション／ミドルウェア２１（生成手段）は、例えば、ストレージ装置３又はログストレージ装置４に保存されているデータを参照又は更新し、ログ（第１のデータ）を生成する。また、例えばユーザ端末（クライアント）からのデータベースアクセス要求（書き込み要求、読み出し要求）を処理し、ストレージアクセス部２２又は高速ログアクセス部２４へ、例えば書き込み又は読み出し要求を送信する。
【００１８】
ストレージアクセス部２２は、例えば、アプリケーション／ミドルウェア２１からストレージ装置３をアクセスする機能を持つ。
【００１９】
インターフェイス部２３は、例えば、ストレージアクセス部２２の要求をストレージネットワーク５へ送信するためのインターフェイスである。
【００２０】
高速ログアクセス部２４は、例えば、アプリケーション／ミドルウェア２１から高速にログストレージ装置４をアクセスする機能を持つ。
【００２１】
具体的には、高速ログアクセス部２４は、ログ初期処理部２４１、ログ書き込み部２４２、ログバッファ２４５などを含む。また、ログ初期処理部２４１は、ログ初期化部２４１ａ、ログ変換処理部２４１ｂを含む。高速ログアクセス部２４に含まれる各処理部の詳細については、図２以降で後述する。
【００２２】
高速インターフェイス部２５は、例えば、高速ログアクセス部２４の要求を高速にストレージネットワーク５へ送信するためのインターフェイスである。
【００２３】
ストレージ装置３は、既存のＤＢＭＳで用いられる一般的なストレージ装置であり、ＤＢＭＳで扱われるデータを保存するストレージ装置である。ストレージ装置３は、インターフェイス部３１、データ保存部３２を備える。
【００２４】
インターフェイス部３１は、例えば、サーバ装置２からのデータアクセス要求をストレージネットワーク５へ送信する。
【００２５】
データ保存部３２は、例えば、ＨＤＤ（Hard Disk Drive）、ＳＳＤ（Solid State Drive）などから構成され、サーバ装置２からのデータを永続的に保存する。
【００２６】
ログストレージ装置４は、ＤＢＭＳのログを保存するストレージ装置である。一般に、ＤＢＭＳではデータベースへのアクセス負荷を軽減するため、データを変更があるごとにデータベースへ書き込むのではなく、変更内容をログに変換し、ログをまとめてログの保存先へ書き込む。ログストレージ装置４は、高速インターフェイス部４１、高速ログ保存部４２を備える。
【００２７】
高速インターフェイス部４１は、サーバ装置２からのログアクセス要求をストレージネットワーク５から受信する。
【００２８】
高速ログ保存部４２は、ＳＣＭを含み、ログをＳＣＭに保存する。なお、高速ログ保存部４２は、例えば、ＮＶＤＩＭＭ（Non-Volatile Dual In-line Memory Module）として、すなわち電源異常時にＤＲＡＭ（Dynamic Randam Access Memory）などの揮発性メモリのデータを退避する手段として用いられてもよい。また、ログストレージ装置４そのものをＵＰＳ（Uninterruptible Power Supply）でバックアップする場合、高速ログ保存部４２は、電源異常時にＤＲＡＭなどの揮発性メモリのデータの一部をＳＳＤなどに退避する手段として用いられてもよい。
【００２９】
なお、高速ログ保存部４２に用いられるＳＣＭは、ＭＲＡＭ（Magnetoresistive Random Access Memory：磁気抵抗メモリ）、ＰＲＡＭ（Phase change Random Access Memory：相変化メモリ）、ＲｅＲＡＭ（Resistive Random Access Memory：抵抗変化型メモリ）、ＦｅＲＡＭ（Ferroelectric Random Access Memory）などの不揮発性半導体メモリでもよい。
【００３０】
ストレージネットワーク５は、サーバ装置２とストレージ装置３及びログストレージ装置４とをネットワーク経由で接続する。
【００３１】
ストレージネットワーク５は、サーバ装置２とストレージ装置３との通信であるＯＳのＩＯスタックを経由した通信と、サーバ装置２とログストレージ装置４との通信であるＯＳをバイパスした通信の両方を可能とするネットワークである。本実施形態においては、ストレージネットワーク５に用いられる通信インターフェイスは、例えばInfiniband，Converged Ethernet，OmniNetなどを想定している。例えば、Infinibndを用いた通信では、サーバ装置２のアプリケーション／ミドルウェア２１から、ＯＳをバイパスして直接ログストレージ装置４のＳＣＭをアクセスできる。しかしながら、他の通信インターフェイスが用いられてもよい。
【００３２】
なお、図１ではストレージネットワーク５は１つしか図示されていないが、ストレージネットワーク５の故障又は切断などに対応するため、ストレージネットワーク５は複数のネットワークで構成されていてもよい。
【００３３】
また、ストレージネットワーク５は、サーバ装置２のＯＳのＩＯスタックを経由したストレージ装置３用のネットワークと、サーバ装置２のＯＳを経由しないログストレージ装置４用のネットワークの、２種類のネットワークから構成されていてもよい。
【００３４】
本実施形態では、サーバ装置２、ストレージ装置３、ログストレージ装置４は、それぞれ独自のプロセッサ及びメモリ（主記憶装置）を備える。サーバ装置２、ストレージ装置３、ログストレージ装置４の有する各機能は、それぞれが備えるプロセッサが、各機能ブロックが発行するコマンド、アドレス、データ、情報、指示、信号などを処理することにより実現される。プロセッサは、例えば、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro-Processing Unit）、又は、ＤＳＰ（Digital Signal Processor）などであってもよい。メモリは、主記憶装置であり、プロセッサからの制御に従う。メモリには、プロセッサの制御に基づいて、プロセッサにより処理されるデータなどが一時的に格納される。
【００３５】
本実施形態において、サーバ装置２は、複数存在してもよい。
【００３６】
本実施形態では、説明を容易にするため、ログストレージ装置４とストレージ装置３は分かれているが、同じ機能を持っていれば１台で構成されていてもよい。また、サーバ装置２などの他のサーバ装置がログストレージ装置４及びストレージ装置３の機能を持つ場合は、ログストレージ装置４及びストレージ装置３は、単独で存在しなくてもよい。
【００３７】
本実施形態では、サーバ装置２の高速インターフェイス部２５、ストレージ装置３のインターフェイス部３１、及び、ログストレージ装置４の高速インターフェイス部４１は、サーバ装置２、ストレージ装置３、及び、ログストレージ装置４それぞれとストレージネットワーク５とを接続するためのＨＢＡ（Host Bus Adapter）又はＨＣＡ（Host Channel Adapter）のインターフェイスを有する。しかしながら、その他のインターフェイスを有していてもよい。
【００３８】
また、本実施形態では、サーバ装置２の高速インターフェイス部２５及びログストレージ装置４の高速インターフェイス部４１は、ＲＤＭＡ（Remote Direct Memory Access）などを用いて、サーバ装置２側のＯＳとログストレージ装置４側のＣＰＵ（Central Processing Unit）を経由することなく、ログストレージ装置４のＳＣＭをバイト単位で読み書きできるものとする。
【００３９】
図２は、本実施形態に係るサーバ装置２の高速ログアクセス部２４の構成を例示するブロック図である。
【００４０】
高速ログアクセス部２４は、ログ初期処理部２４１、ログ書き込み部２４２、ログリカバリ部２４３、ログファイル位置２４４、ログバッファ２４５を備える。
【００４１】
ログ初期処理部２４１は、ログバッファ２４５の初期化を行うログ初期化部２４１ａ（初期化手段）、辞書式圧縮を用いてログの変換処理を行うログ変換処理２４１ｂ（変換手段）を含む。ログ初期化部２４１ａの詳細は、図５で後述する。また、ログ変換処理部２４１ｂの詳細は図１２で後述する。
【００４２】
ログ書き込み部２４２（書き込み手段）は、ログバッファ２４５にログの書き込みを行う。
【００４３】
ログリカバリ部２４３（復帰手段）は、高速ログ保存部４２に保存されたデータを用い、有効なログを取り出す。
【００４４】
ログリカバリ部２４３は、取り出したログを逆変換し、もとのログを復元するログ逆変換処理部２４３ａを含む。ログ逆変換処理部２４３ａの詳細については、図１４で後述する。
【００４５】
ログファイル位置２４４は、一般にＬＳＮ（Log Sequence Number：ログシーケンス番号）と呼ばれ、ログの識別子として用いられる。ログファイル位置２４４は、例えば、ログストレージ装置４へ書き込むログのサイズに比例して各ログに付与される固有の識別子である。具体的には、ログファイル位置２４４は、ログストレージ装置４へ書き込むログを仮想的に１ファイル上に格納した（以下、仮想ログファイルと呼ぶ）場合に、各ログの仮想ログファイル上での位置を示す。例えば、アプリケーション／ミドルウェア２１は、増えたログに対し、仮想ログファイルの先頭からの最新のログの位置（バイト数）を示すように、ログファイル位置２４４をログサイズ分だけ増加させる。
【００４６】
ここで、仮想ログファイルは実体として確保されている必要はない。すなわち、アプリケーション／ミドルウェア２１は、仮想ログファイルを意識することなく、ログが増加するたびに、増加分のログサイズを加えてログファイル位置を更新する。
【００４７】
ログバッファ２４５（作業用記憶手段）は、生成されたログの中で、まだ高速ログ保存部４２へ書き込まれていないログを格納する。すなわち、アプリケーション／ミドルウェア２１は、ログを生成するたびに、ログバッファ２４５にログを書き込む。ログバッファ２４５は、例えばあらかじめシステムにより容量が決められているリングバッファであることが望ましい。すなわち、ログバッファ２４５の末尾までログが書き込まれた場合、先頭から新たなログが上書きされる。
【００４８】
図３は、本実施形態に係るログストレージ装置４の高速ログ保存部４２の構成を例示するブロック図である。高速ログ保存部４２は、ログ管理部４２１、保存ログファイル位置４２２、ログ保存領域４２３を備える。
【００４９】
ログ管理部４２１は、例えば、ストレージネットワーク５を経由したサーバ装置２の高速インターフェイス部２５との通信、ログ保存領域４３３における初期化処理及びログごとの保存領域の確保などを行う。なお、上述のように、ログ管理部４２１と高速インターフェイス部２５との通信インターフェイスには、ＲＤＭＡなどが用いられる。
【００５０】
保存ログファイル位置４２２は、サーバ装置側のログファイル位置２４４を保存する。例えば、サーバ装置２の高速ログアクセス部２４は、適切なタイミングで高速インターフェイス部２５を通じて、ログファイル位置２４４をログストレージ装置４へ送信する。ログストレージ装置４のログ管理部４２１は、受信したログファイル位置２４４を、保存ログファイル位置４２２として保存する。ログファイル位置２４４がログストレージ装置４へ送信されるタイミングは、例えば、ログバッファ２４５の残り容量がなくなった時、又は高速ログアクセス部２４を用いるアプリケーション／ミドルウェア２１が終了する時などでもよい。
【００５１】
ログ保存領域４２３（不揮発性記憶手段）は、ログバッファ２４５に格納されている１つ以上のログを保存する。ログ保存領域４２３は、例えばあらかじめシステムにより容量が決められているリングバッファであることが望ましい。すなわち、ログ保存領域４２３の末尾までログが書き込まれた場合、先頭から新たなログが上書きされる。
【００５２】
図４は本実施形態に係るサーバ装置２のログバッファ２４５の構成を例示する図である。
【００５３】
ログバッファ２４５は、ログＬを連続して格納する。
【００５４】
ログバッファ２４５に格納されるログＬはヘッダーＬＨ、ログ長ＬＬ、変換後ログＬＢを含む。
【００５５】
ヘッダーＬＨ（請求項１の第２の値）は、ログの先頭を示す識別情報である。
【００５６】
ログ長ＬＬは、制御バイトＬＬａと変換後ログの長さＬＬｂを含む。本実施形態においては、制御バイトＬＬａは例えば１バイトの長さを持ち、変換後ログの長さＬＬｂは３バイトの長さを持つとする。しかしながら、制御バイトＬＬａ及び変換後ログの長さＬＬｂの長さは、これら以外であってもよい。
【００５７】
変換後ログＬＢ（第２のデータ）は、アプリケーション／ミドルウェア２１から送信されたログを、ヘッダーＬＨ及び初期値を含まないように変換したログである。初期値（請求項１の第１の値）は、ログストレージ装置４のログ保存領域４２３を初期化する際に用いる値であり、ログ保存領域４２３は全て初期値で埋められる。初期値は、例えば、後述するログリカバリ部２４３の処理において、ログ保存領域４２３にログが保存済であるか否かを判定する際に用いられる。
【００５８】
ログ長ＬＬの制御バイトＬＬａの値は、ログ長ＬＬ全体がヘッダーＬＨ及び初期値と一致しないような値を設定する。例えば、ヘッダーＬＨが「0x03030303（“0x”は１６進数を表す接頭字である。以下同様）」の場合、ヘッダーＬＨの下位１バイトの値は「00110011」である。また、例えば、初期値が「0x07070707」の場合、初期値の下位１バイトの値は「01110111」である。したがってこの場合、制御バイトの下位２ビットを「00」にすることで、ログ長ＬＬの値は、ヘッダーＬＨ及び初期値と一致しない。なお、ビット列の最上位ビットをＭＳＢ（Most Significant Bit）と呼び、ビット列の最下位ビットをＬＳＢ（Least Significant Bit）と呼ぶ。
【００５９】
図５は、第１の実施形態に係るログ初期化部２４１ａ及びログ管理部４２１の処理を例示するフローチャートである。具体的には、図５は、サーバ装置２のログバッファ２４５の確保、及びログストレージ装置４のログ保存領域４２３の確保と初期化を行う手順を示す。ログ初期化部２４１ａとログ管理部４２１との通信は、ストレージネットワーク５を経由して行われる。
【００６０】
ステップＳ５０１において、サーバ装置２のログ初期化部２４１ａはアプリケーション／ミドルウェア２１と連携して、ログストレージ装置４のログ保存領域４２３のサイズを決定する。
【００６１】
ステップＳ５０２において、ログ初期化部２４１ａは、ログストレージ装置４のログ管理部４２１へ、ステップＳ５０１で決定されたサイズのログ保存領域４２３の確保を要求する。
【００６２】
ステップＳ５０３において、ログ管理部４２１は、サーバ装置２との間でＲＤＭＡにより読み書き可能であるＳＣＭ上に、ステップＳ５０２で要求されたサイズ分のログ保存領域４２３を確保する。
【００６３】
ステップＳ５０４において、ログ管理部４２１は、確保したログ保存領域４２３を初期値で埋めて初期化を行う。初期値は、あらかじめ決められた値であってもよい。
【００６４】
ステップＳ５０５において、ログ管理部４２１は、サーバ装置２へログ保存領域４２３の初期化が完了した旨の応答を返す。
【００６５】
ステップＳ５０６において、ログ初期化部２４１ａは、サーバ装置２内にＲＤＭＡなどでログストレージ装置４と高速にデータ通信を行うためのログバッファ２４５を確保する。
【００６６】
ステップＳ５０７において、ログ初期化部２４１ａは、ログストレージ装置４から通知される初期化完了の応答を待つ。
【００６７】
なお、ログ初期化部２４１ａの処理であるステップＳ５０６及びステップＳ５０７と、ログ管理部４２１の処理であるステップＳ５０３乃至ステップＳ５０５は、並列して処理されるのが望ましい。
【００６８】
ステップＳ５０８において、ログ初期化部２４１ａは、ログストレージ装置４の保存ログファイル位置４２２を、ＲＤＭＡなどによりログファイル位置２４４に読み出す。なお、保存ログファイル位置４２２は、ステップＳ５０５においてログ管理部４２１がサーバ装置２へ返す応答の内容に含まれるとしてもよい。
【００６９】
以上の手順により、ログバッファ２４５とログ保存領域４２３との間で、ＲＤＭＡなどにより高速にデータを送受信するための準備が完了する。
【００７０】
次に、ログ書き込みの詳細な手順を示す。
【００７１】
図６は、本実施形態に係るログ書き込み部２４２の処理を例示するフローチャートである。
【００７２】
図７は、本実施形態に係るＲＤＭＡを用いたログ書き込み処理を例示する図であり、図６のステップＳ６０４及びステップＳ６０５を模式的に表している。
【００７３】
ステップＳ６０１において、ログ書き込み部２４２は、アプリケーション／ミドルウェア２１の実行に伴い出力されるログを、ヘッダーＬＨ及び初期値が含まれないように変換する。
【００７４】
ステップＳ６０２において、ログ書き込み部２４２は、変換後のログＬに対するログファル位置２４４を決定する。その後、他のログのログファル位置がログファイル位置２４４と同値にならないようにするため、ログファイル位置２４４をログサイズ分増加させる。増加させるログサイズの値は、変換後のログＬのサイズにヘッダーＬＨとログ長ＬＬのサイズを加えた値である。
【００７５】
ステップＳ６０３において、ログ書き込み部２４２は、変換後のログＬに対するステップＳ６０２で決定したログファイル位置２４４をログバッファ２４５のサイズで除算した余りを、ログバッファの書き込み位置とする。ログ書き込み部２４２は、変換後のログＬに対するステップＳ６０２で決定したログファイル位置２４４をログ保存領域４２３のサイズで除算した余りを、ログ保存領域４２３の書き込み位置とする。
【００７６】
ステップＳ６０４において、ログ書き込み部２４２は、ログバッファ２４５へ変換後のログＬを書き込む。
【００７７】
ステップＳ６０５において、ログ書き込み部２４２は、ＲＤＭＡなどによりログ保存領域４２３へログを保存する。ＲＤＭＡを用いることにより、ログ書き込み部２４２は、ログストレージ装置４のＣＰＵを経由することなく高速にログをログ保存領域４２３へ書き込むことができる。
【００７８】
以上の手順によって、ログ書き込み部２４２は、１つのログを１回のＲＤＭＡによる書き込みアクセスで、ログ保存領域４２３へ保存できる。
【００７９】
次に、ログ保存領域４２３に書き込まれたログを用いて、ログの穴状態及び部分書き込み状態を検出する処理について説明する。
【００８０】
図８は、本実施形態に係る複数のログの並列保存を例示する図である。
【００８１】
図９は、図８におけるサーバ障害発生時のログバッファ２４５及びログ保存領域４２３の状態を例示する図である。
【００８２】
ログ書き込み処理を実行する一連の処理単位をトランザクションと呼ぶ。トランザクションＴＸ１はログ１を保存するトランザクションであり、トランザクションＴＸ２はログ２を保存するトランザクションであり、トランザクションＴＸ３はログ３を保存するトランザクションである。
【００８３】
図８は、アプリケーション／ミドルウェア２１のトランザクションが確保したログファイル位置２４４の順番とは異なる順番で、ＲＤＭＡなどによりログ保存領域４２３へログの保存を行う場合を示す。具体的には、ログＬ１、ログＬ２、ログＬ３のログファイル位置は、トランザクションＴＸ１（時刻Ｔ１）、トランザクションＴＸ２（時刻Ｔ２）、トランザクションＴＸ３（時刻Ｔ３）の順で確保されているが、ログ保存領域４２３への書き込みは、トランザクションＴＸ２（時刻Ｔ４）、トランザクションＴＸ３（時刻Ｔ５）、トランザクションＴＸ１（時刻Ｔ７）の順番で行われる。
【００８４】
時刻Ｔ４において、ログＬ２のログバッファ２４５への書き込みが完了するため、ＲＤＭＡなどによりログＬ２がログ保存領域４２３へ書き込み開始される。
【００８５】
時刻Ｔ５において、ログＬ３のログバッファ２４５への書き込みが完了するため、ＲＤＭＡなどによりログＬ３がログ保存領域４２３へ書き込み開始される。
【００８６】
時刻Ｔ６においてサーバ障害が発生した場合、ログＬ３のログ保存領域４２３への書き込みが途中で終了する。したがって、ログ保存領域４２３の状態は図９のようになる。
【００８７】
図９では、ログＬ２はログ保存領域４２３に書き込み完了されている。しかしながら、ログＬ１は時刻Ｔ７よりログ保存領域４２３に書き込み開始されるため、時刻Ｔ６では穴状態となっている。また、ログＬ３は、時刻Ｔ６においてログ保存領域４２３上では部分書き込み状態である。
【００８８】
サーバ障害発生時には、サーバ装置２に格納されるログファイル位置２４４及びログバッファ２４５などは消失する。したがって、サーバ装置２は、ログストレージ装置４のログ保存領域４２３を探索することにより、書き込み完了されているログＬ２を抽出し、自機上に復元する。
【００８９】
図１０は、本実施形態に係るログリカバリ処理を例示するフローチャートである。
【００９０】
ログリカバリ処理は、サーバ装置２のログリカバリ部２４３で実行される。
【００９１】
ログリカバリ部２４３は、ログ保存領域４２３を先頭から末尾までサーチ位置を進めながら探索し、ヘッダーＬＨを手掛かりに変換後ログＬＢを取り出し、取り出した変換後ログＬＢを逆変換することによりログの復元を行う。
【００９２】
ステップＳ１００１において、ログリカバリ部２４３は、サーチ位置をログ保存領域４２３の先頭に設定する。ログ保存領域４２３のサーチはバイト単位で行われることが望ましいが、サーチはバイト単位でなくてもよい。
【００９３】
ステップＳ１００２において、ログリカバリ部２４３は、サーチ位置のログ保存領域４２３に保存されているデータを読み出し、サーチ位置を１バイト増加させる。
【００９４】
ステップＳ１００３において、ログリカバリ部２４３は、読み出したデータがヘッダーＬＨであるか否かを判定する。読み出したデータがヘッダーＬＨである場合は、ログリカバリ部２４３は、ステップＳ１００４において、ヘッダーＬＨ位置から変換後ログＬＢを取り出す。ログリカバリ部２４３が変換後ログＬＢを取り出す処理の詳細は、図１１で後述する。読み出したデータがヘッダーＬＨでない場合は、ステップＳ１００７へ進む。
【００９５】
ステップＳ１００５において、ログリカバリ部２４３は、変換後ログＬＢが取り出されたか否かを判定する。変換後ログＬＢが取り出された場合は、ログリカバリ部２４３は、ステップＳ１００６において、取り出したログの逆変換処理を実行し、もとのログを抽出する。取り出したログの逆変換処理の詳細については、図１４で後述する。変換後ログＬＢが取り出されない場合は、ステップＳ１００７へ進む。
【００９６】
ステップＳ１００７において、ログリカバリ部２４３は、ログ保存領域４２３を末尾までサーチ完了したかを判定する。ログリカバリ部２４３は、サーチ位置がログ保存領域４２３の末尾でない場合は、ステップＳ１００２に戻る。
【００９７】
ログ初期化部２４１ａは、ログ保存領域４２３を初期値で初期化し、ログ長ＬＬ及び変換後ログＬＢの中に初期値又はヘッダーと同じ値が現れないように書き込みデータを制御する。これにより、ログリカバリ部２４３は、図９のログＬ１のようにログ保存領域４２３上に穴状態のログが存在する場合でも、ヘッダーＬＨを見つけることで、正しくログの先頭を見つけることができる。
【００９８】
図１１は、本実施形態に係る変換後ログの取り出し処理を例示するフローチャートである。図１１の処理は、上述の図１０のステップＳ１００４の処理に相当する。
【００９９】
ログリカバリ部２４３は、ヘッダーＬＨよりサーチ位置を進めながら、変換後ログＬＢのみを取り出す。
【０１００】
具体的には、ログリカバリ部２４３は、サーチ位置のデータがヘッダーＬＨ及び初期値でないことを確認した場合、ログ長ＬＬと変換後ログＬＢのデータを一時的にサーバ装置２のメモリなどに格納する。ログリカバリ部２４３は、一時的に格納した変換後ログＬＢの長さがログ長ＬＬと等しくなった場合、その時点のサーチ位置のデータがヘッダーＬＨ及び初期値であるか否かを調べることで、ログ長ＬＬが正しいか否かを確認する。そして、ログリカバリ部２４３は、上述の確認結果が全て正しい場合にのみ、一時的に格納したログ長ＬＬと変換後ログＬＢを取り出す。
【０１０１】
ステップＳ１１０１において、ログリカバリ部２４３は、サーチ位置のデータがヘッダーＬＨ及び初期値でないか否かを判定する。サーチ位置のデータがヘッダーＬＨ及び初期値でない場合は、ログリカバリ部２４３は、ステップＳ１１０２において、サーチ位置のデータをログ長ＬＬとして一時的に格納する。サーチ位置のデータがヘッダーＬＨ及び初期値のいずれかである場合は、ステップＳ１１０８へ進む。
【０１０２】
ログリカバリ部２４３は、ステップＳ１１０２の終了時に、サーチ位置を１バイト増加させる。
【０１０３】
ステップＳ１１０３において、ログリカバリ部２４３は、再度サーチ位置のデータがヘッダーＬＨ及び初期値でないか否かを判定する。サーチ位置のデータがヘッダーＬＨ及び初期値でない場合は、ログリカバリ部２４３は、ステップＳ１１０４において、サーチ位置のデータを変換後ログＬＢとして一時的に格納する。サーチ位置のデータがヘッダーＬＨ及び初期値のいずれかである場合は、変換後ログＬＢが不正であると判定し、ステップＳ１１０８へ進む。
【０１０４】
ログリカバリ部２４３は、ステップＳ１１０４の終了時に、サーチ位置を１バイト増加させる。
【０１０５】
ステップＳ１１０５において、ログリカバリ部２４３は、変換後ログＬＢの長さがログ長ＬＬと等しくなったか否かを判定する。変換後ログＬＢの長さがログ長ＬＬと等しくない場合は、ログリカバリ部２４３は、ステップＳ１１０３に戻り、再度サーチ位置のデータがヘッダーＬＨ及び初期値でないか否かを判定する。変換後ログＬＢの長さがログ長ＬＬと等しい場合は、ステップＳ１１０６へ進む。
【０１０６】
ステップＳ１１０６において、ログリカバリ部２４３は、再度サーチ位置のデータがヘッダーＬＨ及び初期値でないか否かを判定する。サーチ位置のデータがヘッダーＬＨ及び初期値でない場合は、ログリカバリ部２４３は、ステップＳ１１０７において、ステップＳ１１０２及びステップＳ１１０４で一時的に格納したログ長ＬＬ及び変換後ログＬＢを取り出す。サーチ位置のデータがヘッダーＬＨ及び初期値のいずれかである場合は、ログ長ＬＬが不正であると判定し、ステップＳ１１０８へ進む。
【０１０７】
ステップＳ１１０８において、ログリカバリ部２４３は、一時的に格納したログ長ＬＬ及び変換後ログＬＢがある場合は、これらを消去する。
【０１０８】
図１１の手順により、例えば、図９のログＬ３のような部分書き込み状態の場合には、初期値がログ長ＬＬに満たない位置に見つかるので、ステップＳ１１０３において変換後ログＬＢが不正であると判定される。このため、誤ったデータが取り出されることはない。また、ログ長ＬＬ及び変換後ログＬＢのデータにはヘッダーＬＨ及び初期値を含まないため、例えば図９のログＬ２のように全てのデータがログ保存領域４２３に保存されているログは、正しく取り出される。
【０１０９】
本実施形態では、上述のとおりログをヘッダーＬＨ及び初期値が含まれないデータに変換する。このため、サーバ装置２は、ログ保存前に辞書式圧縮を用いてログを変換する。
【０１１０】
辞書式圧縮とは、あるデータ列が複数回出現する場合、２回目以降の出現箇所を以前に出現した箇所の参照（以下、参照タグと呼ぶ）に置き換える方法である。辞書式圧縮により、ログサイズが圧縮され、さらにログからヘッダーＬＨ及び初期値が除去される。また、辞書式圧縮は、例えばハフマン符号などのエントロピー符号化を行うデータ圧縮方法と比較して、圧縮率は低いが圧縮及び展開の速度が速いアルゴリズムであり、ログの圧縮に有用である。
【０１１１】
図１２は、本実施形態に係る基本ログ変換処理を例示するフローチャートである。
【０１１２】
本実施形態において、基本ログ変換処理は、サーバ装置２のログ変換処理部２４１ｂにおいて実行される。基本ログ変換処理は、ログ初期化部２４１ａの処理（図５参照）が開始する前に実行されるのが望ましい。しかしながら、基本ログ変換処理はアプリケーション／ミドルウェア２１で実行されてもよい。
【０１１３】
基本ログ変換処理では、ログ内のヘッダーＬＨ及び初期値と一致するデータは、辞書式圧縮により参照タグに変換される。すなわち、ログはヘッダーＬＨ及び初期値を含まない変換後ログＬＢに変換される。変換後ログＬＢの長さはログ長ＬＬとして、変換後ログＬＢの先頭に付加される。
【０１１４】
ステップＳ１２０１において、ログ変換処理部２４１ｂは、ログの先頭にヘッダーＬＨ、初期値を付加する。ログの先頭に付加したヘッダーＬＨ、初期値は、いずれも辞書式圧縮において初めて現れる文字列であるため、後述する最初のリテラル部分に格納される。リテラルとは、数字及び文字列をそのまま記述したデータを表す。
【０１１５】
ステップＳ１２０２において、ログ変換処理部２４１ｂは、ステップＳ１２０１で付加したデータ全体を辞書式圧縮により圧縮する（以下、圧縮後のデータを圧縮データと呼ぶ）。
【０１１６】
ステップＳ１２０３において、ログ変換処理部２４１ｂは、圧縮データの最初のリテラル部分からステップＳ１２０１で付加したヘッダーＬＨ及び初期値を削除する。
【０１１７】
ステップＳ１２０４において、ログ変換処理部２４１ｂは、ヘッダーＬＨ及び初期値を削除後の圧縮データの長さをログ長ＬＬとする。
【０１１８】
ステップＳ１２０５において、ログ変換処理部２４１ｂは、ヘッダーＬＨ及び初期値を削除後の圧縮データを変換後ログＬＢとする。
【０１１９】
ステップＳ１２０６において、ログ変換処理部２４１ｂは、ログ長ＬＬを変換後ログＬＢの先頭に付加する。
【０１２０】
図１３は、本実施形態に係る基本ログ変換処理を例示する概念図である。
【０１２１】
具体的には、ヘッダーＬＨが「0x03030303」、初期値が「0x07070707」の場合の辞書式圧縮を用いたログ変換の様子を例示する。
【０１２２】
ログ内の「0x03030303」及び「0x07070707」のデータは、辞書式圧縮により参照タグに置き換えられて「0x03030303」及び「0x07070707」ではなくなる。次に、先頭の「0x03030303」と「0x07070707」が取り除かれるため、変換後ログＬＢには「0x03030303」と「0x07070707」が含まれなくなる。また、変換後ログＬＢには、圧縮データに付加されるタグ（以下、リテラルタグと呼ぶ）が含まれる。その後、変換後ログＬＢの先頭にログ長ＬＬが付加される。
【０１２３】
図１４は、本実施形態に係る基本ログ逆変換処理を例示するフローチャートである。図１４の処理は、上述の図１０のステップＳ１００６の処理に相当する。
【０１２４】
本実施形態において、基本ログ逆変換処理は、サーバ装置２のログ逆変換処理部２４３ａで実行される。しかしながら、基本ログ逆変換処理は、アプリケーション／ミドルウェア２１で実行されてもよい。
【０１２５】
ステップＳ１４０１において、ログ逆変換処理部２４３ａは、先頭のログ長ＬＬを削除し、変換後ログＬＢを取り出す。
【０１２６】
ステップＳ１４０２において、ログ逆変換処理部２４３ａは、変換後ログＬＢを圧縮データと見なし、リテラルタグの後ろに続く最初のリテラル部分に、ヘッダーＬＨと初期値を付加する。
【０１２７】
ステップＳ１４０３において、ログ逆変換処理部２４３ａは、付加したデータを圧縮データと見なして、辞書式圧縮の復元を実行する。
【０１２８】
ステップＳ１４０４において、ログ逆変換処理部２４３ａは、辞書式圧縮の復元処理後に先頭部分に現れるヘッダーＬＨと初期値を削除した残りのデータを、圧縮前のログとして抽出する。
【０１２９】
図１２及び図１３に示した辞書式圧縮により、ログはヘッダーＬＨ及び初期値が含まれないように変換されるが、リテラルタグ及び参照タグの組み合わせによってヘッダーＬＨの値又は初期値と同じ値となる場合がある。リテラルタグ及び参照タグは辞書式圧縮の方式ごとに異なるため、辞書式圧縮の方式ごとに対策が必要である。
【０１３０】
図１５は、Ｓｎａｐｐｙにおけるタグ情報の種類を例示する図である。
【０１３１】
Ｓｎａｐｐｙは、４バイト以上の重複文字列を参照に置き換える辞書式圧縮方式である。具体的には、図１５は、最大入力データが６４ＫＢ、リテラルの最大長を２５６バイトに制限したＳｎａｐｐｙのタグ情報の種類を示す。
【０１３２】
タグ情報ＴＩは、リテラルタグＴＬ及び参照タグＴＲの２種類のタグを含む。また、タグ情報ＴＩは、先頭のタグバイトＴＢと０〜２バイトの付加情報ＡＩを含む。タグ情報ＴＩは、タグバイトＴＢでタグ情報ＴＩの種別と長さが判定できるように定義されている。リテラルタグＴＬの後ろには、タグ情報ＴＩで指定された長さの実文字列が続く。
【０１３３】
タグ情報ＴＩがリテラルタグＴＬで、かつリテラルの長さが６０バイト以内の場合、タグの上位６ビットは（リテラルの長さ−１）を表し、下位２ビットは０である。例えば、「ＡＢＣＤＥＦＧＨ」の８バイト文字列からなるリテラルの場合、リテラルの長さは８であり、タグの上位６ビットは７（２進数で「111」）であるため、タグ情報は２進数で「11100」となる。すなわち、タグ情報は、１６進数で「0x1C」となる。
【０１３４】
タグ情報ＴＩがリテラルタグＴＬで、かつリテラルの長さが６１バイト以上の場合、タグバイトＴＢは１６進数で「0xF0」となり、その後に（リテラルの長さ−１）を表すタグ情報が続く。例えば、８３バイトからなるリテラルの場合、リテラルの長さは８２（１６進数で「0x52」）であるため、タグ情報は１６進数で「0xF0，0x52」となる。
【０１３５】
タグ情報ＴＩが参照タグＴＲで、かつ１バイトのオフセットの場合、タグバイトＴＢの上位６ビットは（参照する文字列の長さ−４）を表し、次の１バイトで圧縮前の文字列における現在位置からのオフセット値（単位はバイト）を表す。例えば、文字列「ＡＢＣＤＥＦＧＨＡＢＣＤＥ」を圧縮すると、後の「ＡＢＣＤＥ」は前の「ＡＢＣＤＥ」と重複しているため、前の文字列「ＡＢＣＤＥＦＧＨ」はリテラルタグＴＬとなり、後の「ＡＢＣＤＥ」は参照タグＴＲとなる。参照タグＴＲの最初の１バイトは、１バイトのオフセットかつ文字列の長さが５バイトであるため、２進数で「00000101」（１６進数で「0x05」）となる。さらに、参照タグＴＲの次の１バイトは「0x08」（オフセット値は８バイト）となる。したがって、文字列「ＡＢＣＤＥＦＧＨＡＢＣＤＥＦ」は、Ｓｎａｐｐｙを用いて圧縮すると、「0x1C，“ＡＢＣＤＥＦＧＨ”，0x05，0x08」と変換される。
【０１３６】
タグ情報ＴＩが参照タグＴＲで、かつ２バイトのオフセットの場合、タグバイトＴＢの上位６ビットは（参照する文字列の長さ−４）を表し、次の２バイトで圧縮前の文字列における現在位置からのオフセット値（単位はバイト）を表す。
【０１３７】
Ｓｎａｐｐｙでは、ヘッダーＬＨ及び初期値と上述のタグバイトＴＢとが一致しないように、ヘッダー及び初期値に下位２ビットが「11」からなる４バイト列が用いられる。更に、ヘッダー及び初期値の４バイト列の各バイトの値を０〜５９の範囲に制限することにより、リテラルタグＴＬ（リテラルの長さが６１バイト以上の場合）の２バイト目（値は６０〜２５５の範囲）と３バイト目（実文字列）との組み合わせと一致することを避けられる。
【０１３８】
したがって、例えば、ヘッダーＬＨに「0x03030303」、初期値に「0x07070707」を用いることで、Ｓｎａｐｐｙによる圧縮後のデータにおいて、任意のリテラルタグ及び参照タグの組み合わせがヘッダー及び初期値と不一致となる。
【０１３９】
ここで、Ｓｎａｐｐｙの辞書式圧縮を用いて、ログ変換を行う具体例を示す。
【０１４０】
例えば、ヘッダーＬＨと初期値を含むログ「“ＡＢＣ”，0x07，0x07，0x07，0x07，“ＤＥＦＧＨ”，0x03，0x03，0x03，0x03」を変換する場合を考える。
【０１４１】
まず、ログの先頭にヘッダーＬＨ「0x03030303」と初期値「0x07070707」を付加する。これにより、Ｓｎａｐｐｙで圧縮するデータは「0x03，0x03，0x03，0x03，0x07，0x07，0x07，0x07，“ＡＢＣ”，0x07，0x07，0x07，0x07，“ＤＥＦＧＨ”，0x03，0x03，0x03，0x03」となる。
【０１４２】
次に、このデータをＳｎａｐｐｙを用いて圧縮すると、「0x28，0x03，0x03，0x03，0x03，0x07，0x07，0x07，0x07，“ＡＢＣ”，0x01，0x07，0x10，“ＤＥＦＧＨ”，0x01，0x14」となる。ここで、先頭の「0x28」は、リテラルの長さが１１バイトであることを示すリテラルタグであり、その後ろに続く「0x03，0x03，0x03，0x03，0x07，0x07，0x07，0x07，“ＡＢＣ”」がリテラルの文字列である。さらにその後ろに続く「0x01，0x07」は１バイトオフセットの参照タグＴＲであり、７バイト前方で４バイト長の参照を表す。すなわち、「0x01，0x07」は「0x07，0x07，0x07，0x07」への参照を表す。その後ろに続く「0x10」は長さ５バイトのリテラルタグＴＬであり、さらにその後ろに続く「“ＤＥＦＧＨ”」はリテラルの文字列である。さらにその後ろに続く「0x01，0x14」は１バイトオフセットの参照タグであり、２０バイト前方で４バイト長の参照を表す。すなわち、「0x01，0x14」は「0x03，0x03，0x03，0x03」への参照を表す。
【０１４３】
この圧縮データの最初のリテラル部分から付加したヘッダーＬＨ「0x03，0x03，0x03，0x03」と初期値「0x07，0x07，0x07，0x07」を削徐すると、変換後ログＬＢ「0x28，“ＡＢＣ”，0x01，0x07，0x10，“ＤＥＦＧＨ”，0x01，0x14」が得られる。変換後ログＬＢの長さは１４バイトである。Ｓｎａｐｐｙによる圧縮前のログの長さは１６バイトであったため、圧縮によりログ長が２バイト減っている。
【０１４４】
また、変換後ログＬＢは、圧縮前のログに含まれていたヘッダーＬＨ「0x03，0x03，0x03，0x03」及び初期値「0x07，0x07，0x07，0x07」と同じデータが含まれないように変換されている。
【０１４５】
さらに、ヘッダーＬＨ及び初期値として、下位２ビットが「0x11」かつ値の範囲が０〜５９である４バイトの列である、「0x03，0x03，0x03，0x03」及び「0x07，0x07，0x07，0x07」を用いたため、変換後ログＬＢは、リテラルタグＴＬ及び参照タグＴＲと不一致となる。
【０１４６】
以下では、ログ逆変換処理部２４３ａが、図１４の手順に従って変換後ログＬＢからＳｎａｐｐｙによる圧縮前のログを算出する例を説明する。
【０１４７】
変換後ログＬＢは、上述のとおり「0x28，“ＡＢＣ”，0x01，0x07，0x10，“ＤＥＦＧＨ”，0x01，0x14」である。
【０１４８】
ステップＳ１４０２において、変換後ログＬＢの最初のリテラル部分にヘッダーと初期値を付加すると、リテラル「0x28，0x03，0x03，0x03，0x03，0x07，0x07，0x07，0x07，“ＡＢＣ”，0x01，0x07，0x10，“ＤＥＦＧＨ”，0x01，0x14」が得られる。
【０１４９】
ステップＳ１４０３において、付加したデータに対してＳｎａｐｐｙの復元を実行すると、リテラル「0x03，0x03，0x03，0x03，0x07，0x07，0x07，0x07，“ＡＢＣ”，0x07，0x07，0x07，0x07，“ＤＥＦＧＨ”，0x03，0x03，0x03，0x03」が得られる。
【０１５０】
ステップＳ１４０４において、先頭のヘッダーＬＨと初期値を削除すると、圧縮前のログである「“ＡＢＣ”，0x07，0x07，0x07，0x07，“ＤＥＦＧＨ”，0x03，0x03，0x03，0x03」が得られる。
【０１５１】
上述の処理により、ヘッダーＬＨ及び初期値を含む圧縮前のログが算出される。
【０１５２】
図１６は、入力データが６４ＫＢを超える場合のログ変換処理を例示するフローチャートである。
【０１５３】
Ｓｎａｐｐｙによる圧縮処理では、最大入力データは６４ＫＢに制限される。そこで、６４ＫＢを超えるログの入力に対応するための処理を行う。
【０１５４】
ステップＳ１６０１において、ログ変換処理部２４１ｂは、ログが６４ＫＢ以上であるか否かを判定する。ログが６４ＫＢ以上である場合は、ログ変換処理部２４１ｂは、ステップＳ１６０２において、ログを６４ＫＢ以下の部分ログに分割する。ログが６４ＫＢ以下である場合は、ログ変換処理部２４１ｂは、ステップＳ１６０６において、基本ログ変換処理（図１２参照）を実行する。
【０１５５】
ステップＳ１６０３において、ログ変換処理部２４１ｂは、ステップＳ１６０２において得られた全ての部分ログに対して、基本ログ変換処理（図１２参照）を実行する。
【０１５６】
ステップＳ１６０４において、ログ変換処理部２４１ｂは、変換後の部分ログを連結して変換後ログＬＢを生成する。
【０１５７】
ステップＳ１６０５において、ログ変換処理部２４１ｂは、ステップＳ１６０４において生成した変換後ログＬＢの長さを検出し、ログ長ＬＬとする。また、ログ変換処理部２４１ｂは、ログを分割したことを示すため、ログ長ＬＬの制御バイトＬＬａの最上位ビット（ＭＳＢ、図４参照）を１にする。
【０１５８】
ステップＳ１６０７において、ログ変換処理部２４１ｂは、ステップＳ１６０６又はステップＳ１６０５により得られた変換後ログＬＢの先頭にヘッダーＬＨを付加する（第３のデータが生成される）。
【０１５９】
図１７は、入力データが６４ＫＢを超える場合のログ変換処理を例示する概念図である。
【０１６０】
具体的には、図１７は、ログＬを４分割した場合のログ変換処理を示す。
【０１６１】
ログＬは、６４ＫＢごとに部分ログＬＰ１、部分ログＬＰ２、部分ログＬＰ３と、６４ＫＢに満たない部分ログＬＰ４に分割される。
【０１６２】
部分ログは、それぞれログ変換され、部分長と変換後部分ログが求められる。具体的には、部分ログＬＰ１乃至ＬＰ４は、それぞれログ変換により変換後部分ログＬＢ１乃至ＬＢ４に変換され、それぞれ部分長ＬＬａ１乃至ＬＬａ４が求められる。これらは連結され、変換後ログＬＢが生成される。
【０１６３】
変換後ログＬＢには、全体のログ長ＬＬ及びヘッダーＬＨが付加される。
【０１６４】
図１８は、入力データが６４ＫＢを超える場合のログ逆変換処理を例示するフローチャートである。
【０１６５】
ステップＳ１８０１において、ログリカバリ部２４３は、ログ長ＬＬの制御バイトＬＬａの最上位ビット（ＭＳＢ）が１であるか否かを判定する。制御バイトＬＬａのＭＳＢが１である場合は、ログリカバリ部２４３は、ステップＳ１８０２において、変換後ログＬＢ内の部分長を参照して、変換後ログＬＢを変換後部分ログに分割する。制御バイトＬＬａのＭＳＢが１でない場合は、ログ逆変換処理部２４３ａは、ステップＳ１８０５において、基本ログ逆変換処理（図１４参照）を実行し、得られたログを変換前（圧縮前）のログとする。
【０１６６】
ステップＳ１８０３において、ログ逆変換処理部２４３ａは、ステップＳ１８０２で得られた全ての変換後部分ログに対し、基本ログ逆変換処理（図１４参照）を実行する。
【０１６７】
ステップＳ１８０４において、ログリカバリ部２４３は、生成された部分ログを連結し、変換前（圧縮前）のログとする。
【０１６８】
以上説明した本実施形態においては、サーバ装置２は、ＲＤＭＡなどを用いることにより、サーバ装置２のＯＳのＩＯスタックを経由せずに直接ログストレージ装置４にログを書き込むことができる。さらに、サーバ装置２は、１回の書き込みアクセスでログの穴状態及び部分書き込み状態を検出可能である。
【０１６９】
本実施形態においては、サーバ装置２は、ログ保存のトランザクションが複数存在する場合でも、他のトランザクションのログ保存状態に左右されることなく、ログ保存を行うことができる。このため、サーバ装置２は、不揮発メモリの高速性を活かして高速にログの保存を行うことができる。
【０１７０】
本実施形態においては、サーバ装置２は、あらかじめログストレージ装置４のログ保存領域４２３を初期値で初期化し、辞書式圧縮を用いてログをヘッダーＬＨと初期値が含まないように変換する。これにより、サーバ装置２は、サーバ障害などによりログ保存領域４２３に生成されたログの穴状態及び部分書き状態を検出し、正常に保存されたログのみを復元できる。
【０１７１】
また、サーバ装置２は、ログを変換する際に辞書式圧縮を用いることにより、ログを高速に変換でき、かつ圧縮によりログサイズを小さくできる。
【０１７２】
［第２の実施形態］
本実施形態では、サーバ装置２の負荷が高いログ保存領域４２３の初期値による初期化を行わずに、ログ上の穴状態及び部分書き状態を検出する方法について説明する。
【０１７３】
なお、本実施形態では、ＲＤＭＡなどにより、高速インターフェイス部２５から高速ログ保存部４２へデータ（ログ）がアドレス昇順でＳＣＭへ書き込まれることを前提とする。
【０１７４】
本実施形態では、全体構成及び各機能ブロックは第１の実施形態と同様である。以下では、第１の実施形態と本実施形態との相違点である、ログバッファ２４５に格納されるログの構成及びそログ変換処理、ログ逆変換処理、ログリカバリ処理について説明する。
【０１７５】
なお、本実施形態では、ログ保存領域２３４の初期値による初期化を行わないため、ログ初期化部２４１ａは不要である。
【０１７６】
図１９は、本実施形態に係るログバッファ２４５及びログ保存領域４２３を例示する図である。
【０１７７】
ログバッファ２４５に格納されるログＬは、ヘッダーＬＨ（請求項２の第１の値）、ログ長ＬＬ、変換後ログＬＢ、フッターＬＦ（請求項２の第２の値）を含む。本実施形態では、ログＬの構成に追加されたフッターＬを用いて、ログ保存領域４２３にログが末尾まで書き込まれたか否かが判定される。
【０１７８】
本実施形態では、ヘッダーＬＨは、ＡヘッダーＬＨ＿Ａ及びＢヘッダーＬＨ＿Ｂの２種類が用いられ、フッターＬＦは、ＡフッダーＬＨ＿Ａ及びＢフッダーＬＨ＿Ｂの２種類が用いられる。ＡヘッダーＬＨ＿Ａが付加されたログにはＡフッターＬＦ＿Ａが付加され、ＢヘッダーＬＨ＿Ｂが付加されたログにはＢフッターＬＦ＿Ｂが付加される。また、ログにＡヘッダー及びＡフッターが付加されて書き込まれる期間をＡフェーズＰＡ、Ｂヘッダー及びＢフッターが付加されて書き込まれる期間をＢフェーズＰＢとする（以下、各フェーズの総称を書き込みフェーズとする）。
【０１７９】
ログ変換処理部２４１ｂは、ログ保存領域４２３へログの書き込みを完了するごとに、又はログ保存領域４２３の末尾までログを書き込むごとに、ＡフェーズＰＡからＢフェーズＰＢ又はＢフェーズＰＢからＡフェーズＰＡへ、書き込みフェーズを切り替える。
【０１８０】
また、ログ長ＬＬと変換後ログＬＢには、ＡヘッダーＬＨ＿Ａ、ＡフッターＬＦ＿Ａ、ＢヘッダーＬＨ＿Ｂ、ＢフッターＬＦ＿Ａが含まれないようにする。これにより、ＡフェーズＰＡの書き込み完了時には、ログ保存領域４２３にＢヘッダーＬＨ＿Ｂ、ＢフッターＬＦ＿Ｂは存在せず、ＢフェーズＰＢの書き込み完了時には、ログ保存領域４２３にＡヘッダーＬＨ＿Ａ、ＡフッターＬＦ＿Ａは存在しない。
【０１８１】
したがって、ログ保存領域４２３に保存された古いログに新しいログが上書される場合に、新しいログの書き込み開始前にログ保存領域４２３が初期値で初期化されなくても、、新しいログの書き込みフェーズ（ＡフェーズＰＡ又はＢフェーズＰＢ）に対応したヘッダーＬＨ及びフッターＬＦにより、古いログと新しいログとを区別することができる。例えば、ログ書き込み部２４２がログ保存領域４２３にＡフェーズＰＡで書き込まれた古いログを新しいログで上書きする場合の書き込みフェーズは、ＢフェーズＰＢとなる。このため、例えば、ＢフェーズＰＢでサーバ装置２の障害により書き込みが中断した場合、ログリカバリ部２４３がログ保存領域４２３に保存されたログを探索する際、ログリカバリ部２４３はＡフェーズのヘッダーＬＨ＿Ａ及びフッターＬＦ＿Ａを無視し、ＢフェーズのヘッダーＬＨ＿Ｂ及びフッターＬＦ＿Ｂを探索することにより、ログ保存領域４２３に保存されたログを抽出できる。
【０１８２】
図２０は、本実施形態に係るログファイル位置と書き込みフェーズとの関係を示す図である。
【０１８３】
アプリケーション／ミドルウェア２１が生成した一連のログの合計サイズ（すなわち、仮想ログファイル上のログの合計サイズ）がログ保存領域４２３のサイズよりも大きい場合、ログ変換処理部２４１ｂは、あらかじめログ保存領域４２３のサイズごとに書き込みフェーズの決定（以下、書き込みフェーズ決定処理と呼ぶ）を行う。具体的には、例えばログ変換処理部２４１ｂは、ログファイル位置２４４をログ保存領域４２３のサイズで除算した商を求め、求めた商が偶数の場合は書き込みフェーズをＡフェーズＰＡとし、求めた商が奇数の場合は書き込みフェーズをＢフェーズＰＢとする。
【０１８４】
図２１は、本実施形態に係るログ変換処理を例示するフローチャートである。
【０１８５】
本実施形態に係るログ変換処理と、第１の実施形態に係るログ変換処理（図１６参照）との相違点は、以下の点である。
【０１８６】
ステップＳ２１０１において、ログ変換処理部２４１ｂは、ログバッファ２４５へのログ書き込み時に、上述の書き込みフェーズ決定処理を行う（切り替え手段）。
【０１８７】
ステップＳ２１０８において、ログ変換処理部２４１ｂは、変換後ログＬＢに対し、ヘッダーＬＨに加えてフッターＬＦを付加する。
【０１８８】
ステップＳ２１０２乃至ステップＳ２１０７の処理は、それぞれ図１６のステップＳ１６０１乃至ステップＳ１６０６の処理と同じであるため、説明を省略する。
【０１８９】
図２２は、本実施形態に係る基本ログ変換処理を例示するフローチャートである。
【０１９０】
本実施形態に係る基本ログ変換処理のステップＳ２２０１乃至Ｓ２２０６は、第１の実施形態に係る基本ログ変換処理（図１２参照）のステップＳ１２０１乃至Ｓ１２０６と対応する。両者の相違点は、辞書式圧縮前にログの先頭に付加されるデータ、及び辞書式圧縮後に最初のリテラル部分から削除されるデータが異なる点である。
【０１９１】
具体的には、ステップＳ２２０１において、辞書式圧縮前にログの先頭にはＡヘッダーＬＨ＿Ａ、ＡフッターＬＦ＿Ａ、ＢヘッダーＬＨ＿Ｂ、ＢフッターＬＦ＿Ｂが付加される。また、ステップＳ２２０３において、辞書式圧縮後に最初のリテラル部分からＡヘッダーＬＨ＿Ａ、ＡフッターＬＦ＿Ａ、ＢヘッダーＬＨ＿Ｂ、ＢフッターＬＦ＿Ｂが削除される。これにより、変換後ログＬＢはＡヘッダーＬＨ＿Ａ、ＡフッターＬＦ＿Ａ、ＢヘッダーＬＨ＿Ｂ、ＢフッターＬＦ＿Ｂを含まない。
【０１９２】
図２３は、本実施形態に係る基本ログ変換処理を例示する概念図である。
【０１９３】
具体的には、ＡヘッダーＬＨ＿Ａが0x03030303、ＡフッターＬＦ＿Ａが0x07070707、ＢヘッダーＬＨ＿Ｂが0x0b0b0b0b、ＢフッターＬＦ＿Ｂが0x0f0f0f0fとした場合の辞書式圧縮を用いたログ変換の様子を例示する。
【０１９４】
ログ内の「0x03030303」、「0x07070707」、「0x0b0b0b0b」、「0x0f0f0f0f」のデータは、辞書式圧縮により参照タグに置き換えられて「0x03030303」、「0x07070707」、「0x0b0b0b0b」、「0x0f0f0f0f」ではなくなる。次に、先頭の「0x03030303」、「0x07070707」、「0x0b0b0b0b」、「0x0f0f0f0f」が取り除かれるため、変換後ログＬＢには「0x03030303」、「0x07070707」、「0x0b0b0b0b」、「0x0f0f0f0f」が含まれなくなる。変換後ログＬＢには、リテラルタグ及びログ長ＬＬが付加される。
【０１９５】
図２４は、本実施形態に係る基本ログ逆変換処理を例示するフローチャートである。
【０１９６】
本実施形態に係る基本ログ逆変換処理のステップＳ２４０１乃至Ｓ２４０４は、第１の実施形態に係る基本ログ変換処理（図１４参照）のステップＳ１４０４乃至Ｓ１４０４と対応する。両者の相違点は、辞書式圧縮の復元前にリテラル部分に付加されるデータ及び復元後に削除されるデータが異なる点である。
【０１９７】
具体的には、ステップＳ２４０２において、変換後ログの最初のリテラル部分にはＡヘッダーＬＨ＿Ａ、ＡフッターＬＦ＿Ａ、ＢヘッダーＬＨ＿Ｂ、ＢフッターＬＦ＿Ｂが付加される。また、ステップＳ２４０４において、辞書式圧縮の復元後のデータからＡヘッダーＬＨ＿Ａ、ＡフッターＬＦ＿Ａ、ＢヘッダーＬＨ＿Ｂ、ＢフッターＬＦ＿Ｂが削除される。
【０１９８】
図２５は、本実施形態に係るログリカバリ処理を例示するフローチャートである。
【０１９９】
本実施形態に係るログリカバリ処理と第１の実施形態に係るログリカバリ処理（図１０参照）との相違点は、ログストレージ装置４の保存ログファイル位置４２２を用いて書き込みフェーズを決定する点、及びログ保存領域４２３をサーチする際に決定した書き込みフェーズのヘッダーを探す点である。以下、相違点について説明する。
【０２００】
ステップＳ２５０１において、ログリカバリ部２４３は、ログストレージ装置４の保存ログファイル位置４２２を用いて書き込みフェーズ決定処理を行う。
【０２０１】
ステップＳ２５０４において、ログリカバリ部２４３は、ログ保存領域４２３をサーチする際に決定した書き込みフェーズのヘッダーＬＨをサーチする。
【０２０２】
ステップＳ２５０５において、ログリカバリ部２４３は、変換後ログの取り出し処理を行う。本実施形態に係る変換後ログの取り出し処理の詳細は、図２６で後述する。
【０２０３】
ステップＳ２５０７において、ログ逆変換処理部２４３ａは、本実施形態に係る基本ログ逆変換処理（図２４参照）を行う。
【０２０４】
その他のステップＳ２５０２乃至ステップＳ２５０４、ステップＳ２５０６、ステップＳ２５０８の処理は、それぞれ図１０のステップＳ１００１乃至ステップＳ１００３、ステップＳ１００５、ステップＳ１００７の処理と同じであるため、説明を省略する。
【０２０５】
図２６は、本実施形態に係る変換後ログの取り出し処理を例示するフローチャートである。図２６の処理は、上述の図２５のステップＳ２５０５の処理に相当する。
【０２０６】
ログリカバリ部２４３は、ログ長ＬＬを元にフッターＬＦの位置を求め、フッターＬＦの位置に保存されているデータが決定した書き込みフェーズのフッターＬＦであることを確認することで、ログが末尾まで書き込まれたことを確認する。
【０２０７】
そして、ログリカバリ部２４３は、フッターＬＦが正しい場合、その間のデータを変換後ログとして取り出す。したがって、本実施形態に係る変換後ログ取り出し処理では、第１の実施形態で述べたログ長ＬＬが正しいか否かを確認するサーチ（図１１のステップＳ１１０３乃至Ｓ１１０６）は不要である。
【０２０８】
ステップＳ２６０１において、ログリカバリ部２４３は、サーチ位置のデータを読み出してログ長ＬＬとして一時的に格納し、サーチ位置を１バイト増加させる。
【０２０９】
ステップＳ２６０２において、ログリカバリ部２４３は、サーチ位置からログ長ＬＬ分先のデータを読み出す。
【０２１０】
ステップＳ２６０３において、ログリカバリ部２４３は、ステップＳ２６０２で読み出したデータがステップＳ２５０１で決定した書き込みフェーズのフッターＬＦであるか否かを判定する。決定した書き込みフェーズのフッターＬＦである場合は、ログリカバリ部２４３は、ステップＳ２６０４において、ステップＳ２６０２で読み出したデータを変換後ログＬＢとして一時的に格納する。決定した書き込みフェーズのフッターＬＦでない場合は、ログリカバリ部２４３は、フッターＬＦの値が不正であると判定し、ステップＳ２６０７へ進む。
【０２１１】
ステップＳ２６０５において、ログリカバリ部２４３は、サーチ位置をログ長ＬＬ＋１バイト分進める。
【０２１２】
ステップＳ２６０６において、ログリカバリ部２４３は、ステップＳ２６０１及びステップＳ２６０４で一時的に格納したログ長ＬＬと変換後ログＬＢを取り出す。
【０２１３】
ステップＳ２６０７において、ログリカバリ部２４３は、一時的に格納したログ長ＬＬ及び変換後ログＬＢがある場合は、これらを消去する。
【０２１４】
上述の処理により、ログリカバリ部２４３は、先頭からサーチして正しいヘッダーＬＨを見つけることで、ログに穴状態が存在する場合でも、正常に書き込まれたログを取り出せる。また、ログリカバリ部２４３は、フッターＬＦを確認することで部分書き込み状態のログを判定できる。
【０２１５】
本実施形態では、ログの構成にフッターＬＦを追加し、さらに書き込みフェーズごとにヘッダーＬＨ及びフッターＬＦを切り替えてログに付加することにより、ログ保存領域４２３を初期値で初期化する手順が不要となる。これにより、サーバ装置２の処理負荷を低減することができる。
【０２１６】
図２７は、本実施形態に係るログ保存時におけるすきま処理を例示する図である。
【０２１７】
ログサイズは、ログ保存領域４２３のサイズに関係なく決まる。このため、ログ保存領域４２３の残りの領域のサイズが次に書き込むログサイズよりも小さくなった場合には、ログ書き込み部２４２は、ログ保存領域４２３の残りの領域にログを書き込むことができない。ログを書き込むことができないログ保存領域４２３の領域を、すきま領域と呼ぶ。
【０２１８】
図２７では、ログＬ１及びログＬ２を保存した後のログ保存領域４２３の残りの領域サイズが、ログＬ３のサイズよりも小さいため、ログ書き込み部２４２は、ログ保存領域４２３の残りの領域にログＬ３を書き込むことができない。ログＬ３はログＬ１及びログＬ２とは異なる書き込みフェーズ（ＢフェーズＰＢ）で書き込まれる。このため、ログ保存領域４２３の最後にすきま領域Ｒができる。
【０２１９】
そこで、本実施形態では、すきま領域Ｒと同じサイズで、ログ書き込み中の書き込みフェーズ（ＡフェーズＰＡ）のヘッダーＬＨ＿ＡとフッターＬＦ＿Ａを持ったダミーログＬＤがすきま領域Ｒに書き込まれる。これにより、リカバリ処理の実行時には、ログリカバリ部２４３は、ダミーログＬＤのログ長ＬＬを取得してダミーログＬＤをスキップできるため、すきま領域Ｒの大きさに関係なく処理時間を短縮できる。
【０２２０】
図２８は、本実施形態に係るログ長ＬＬの制御バイトの構成を示す図である。
【０２２１】
ダミーログＬＤと通常のログＬとを区別するため、ログ長ＬＬの制御バイトＬＬａの７ビット目をダミーか否かを表すフラグ（以下、ダミーフラグと呼ぶ）にする。なお、ダミーフラグは制御バイトＬＬａの他のビットで実現されてもよい。
【０２２２】
変換後ログの取り出し処理（図２６参照）において、ログリカバリ部２４３は、ダミーフラグによりダミーログＬＤであると判定した場合は、ステップＳ２６０４及びステップＳ２６０６を実行しないことで、ダミーログＬＤがリカバリ処理に用いられないようににする。
【０２２３】
また、ダミーログＬＤの変換後ログＬＢの値は、すべてのヘッダーＬＨ及びフッターＬＦと一致しない任意の値を用いることができる。
【０２２４】
以上説明した本実施形態においては、ログリカバリ部２４３は、ヘッダーＬＨに加えてフッターＬＦをログＬに付加することにより、変換したログが最後まで書き込まれたか否かを確認できる。さらに、ログ変換処理部２４１ｂは、ヘッダーＬＨ及びフッターＬＦの組が異なる書き込みフェーズを２種類用い、ログ保存領域４２３の末尾までログを書き込むごとに書き込みフェーズを切り替える。これにより、ログ保存領域４２３に残る古いログの上に新しくログを上書きする場合でも、古いログの書き込みフェーズとは異なる書き込みフェーズのヘッダーＬＨとフッターＬＦが書き込まれるため、ログリカバリ部２４３は、ログのリカバリ処理を実行する場合に正しくログを抽出できる。また、これにより、ログ保存領域４２３の事前の初期化が不要になり、サーバ装置２の処理負荷を低減できる。
【０２２５】
本実施形態においては、ログ保存領域４２３にすきま領域Ｒが発生した場合に、ログ書き込み部２４２が、すきま領域Ｒをその時点の書き込みフェーズのヘッダーＬＨ及びフッターＬＦを持つダミーデータＬＤで埋める。これにより、ログリカバリ部２４３は、すきま領域Ｒが発生した場合でも、ログのリカバリ処理を実行する場合に正しく書き込み完了されたログを抽出できる。さらに、ログ長ＬＬを用いてダミーデータＬＤをスキップできるため、リカバリ処理時のすきま領域Ｒのサーチが高速になる。
【０２２６】
［第３の実施形態］
本実施形態では、ログ保存領域４２３を複数持つ場合のログストレージ装置４の構成について説明する。
【０２２７】
第１の実施形態及び第２の実施形態では、ログストレージ装置４のログ保存領域４２３は１つである。ログ保存領域４２３に書き込まれたログは、ログ保存領域４２３への書き込みアクセスがない期間に、例えばＨＤＤ又はＳＳＤなどに保存される（以下、アーカイブ処理と呼ぶ）。
【０２２８】
図２９は、本実施形態に係るログ保存領域４２３の構成を例示する図である。
【０２２９】
本実施形態では、ログストレージ装置４は２つのログ保存領域（ログ保存領域４２３ａ、ログ保存領域４２３ｂ）を持つ。これにより、例えば一方のログ保存領域は書き込みアクセスを受け付け、他方のログ保存領域に対してはアーカイブ処理が行われることにより、ログストレージ装置４はサーバ装置２より継続してログ書き込みアクセスを受け付けることができる。具体的には、ＡフェーズＰＡ時には、サーバ装置２はログ保存領域４２３ａにログを書き込む。次に、ＢフェーズＰＢ時には、サーバ装置２はログ保存領域４２３ｂにログを書き込むと同時に、ログストレージ装置４はログ保存領域４２３ａに対して書き込み完了したログのアーカイブ処理ＡＣを行う。これを、書き込みフェーズが切り替わるごとに繰り返すことにより、サーバ装置２は途切れることなくログストレージ装置４に対して書き込みアクセスを行うことができる。
【０２３０】
しかしながら、図２９において、ログ保存領域４２３ａにはＡフェーズＰＡのログが２回連続で上書きされ、ログ保存領域４２３ｂにはＢフェーズＰＢのログが２回連続で上書きされてしまう。したがって、ログリカバリ部２４３は、古いログのヘッダーＬＨ及びフッターＬＦと、古いログに上書きされた新しいログのヘッダーＬＨ及びフッターＬＦを区別できなくなる。
【０２３１】
そこで、２つのログ保存領域を用いる場合は、書き込みフェーズを３つ用いる。なお、以下では簡単のために、ログ保存領域が２つである場合について説明するが、ログ保存領域の数が２つ以上の任意の偶数である場合も、書き込みフェーズの数を任意の奇数とすることで同様の効果を得られる。また、ログ保存領域の数が３以上の任意の奇数である場合も、例えば書き込みフェーズをログ保存領域の数に１（ログ保存領域の個数の倍数ではない任意の数であってもよい）を加算した数とすることで、同様の効果を得られる。
【０２３２】
図３０は、本実施形態に係るログファイル位置２４４と書き込みフェーズとの関係を示す図である。
【０２３３】
サーバ装置２は、ＡフェーズＰＡ、ＢフェーズＰＢ、ＣフェーズＰＣの３個の書き込みフェーズを切り替え、ログ保存領域４２３ａ又はログ保存領域４２３ｂににログを書き込む。具体的には、サーバ装置２はＡフェーズＰＡ時にはログ保存領域４２３ａに、ＢフェーズＰＢ時にはログ保存領域４２３ｂに書き込むが、次にＣフェーズＰＣを用いてログ保存領域４２３ａに書き込み、さらにＡフェーズＰＡを用いてログ保存領域４２３ｂに書き込む。すなわち、サーバ装置２は、ログファイル位置２４４に従ってログ保存領域４２３のサイズごとにＡフェーズＰＡ、ＢフェーズＰＢ、ＣフェーズＰＣ、ＡフェーズＰＡと順番に切り替える。これにより、ログ保存領域４２３ａ及びログ保存領域４２３ｂは、前回の書き込みフェーズと異なる書き込みフェーズで上書きされるため、書き込まれたログのヘッダーとフッターは正しく区別される。
【０２３４】
ログ変換処理部２４１ｂは、ログファイル位置２４４に対して計算を行い、あらかじめログ保存領域４２３のサイズごとに書き込みフェーズ決定処理を行う。具体的には、例えばログ変換処理部２４１ｂは、ログファイル位置２４４をログ保存領域４２３のサイズで除算した商を求め、求めた商をさらに３で除算し、求めた余りが０の場合は書き込みフェーズをＡフェーズＰＡとし、余りが１の場合は書き込みフェーズをＢフェーズＰＢとし、余りが２の場合は書き込みフェーズをＣフェーズＰＣとする。
【０２３５】
図３１は、本実施形態に係るログのヘッダー及びフッターを例示する図である。
【０２３６】
ログ変換処理部２４１ｂは、ログに全てのヘッダー及びフッターが含まれないようにログ変換を行う。
【０２３７】
本実施形態に係る基本ログ変換処理と、第２の実施形態の基本ログ変換処理（図２２参照）との相違点は、ログ変換処理の前後に付加するヘッダー及びフッターが異なる点である。
【０２３８】
すなわち、本実施形態に係る基本ログ変換処理では、ログ変換処理部２４１ｂは、ログＬの先頭にＡヘッダーＬＨ＿Ａ、ＡフッターＬＦ＿Ａ、ＢヘッダーＬＨ＿Ｂ、ＢフッターＬＦ＿Ｂ、ＣヘッダーＬＨ＿Ｃ、ＣフッターＬＦ＿Ｃの６個のデータを付加して辞書式圧縮を行う（ステップＳ２２０１に相当する）。さらに、ログ変換処理部２４１ｂは、圧縮データのリテラル部分より、付加した上述の６個のヘッダー及びフッターを削除する（ステップＳ２２０３に相当する）。
【０２３９】
また同様に、本実施形態に係る基本ログ逆変換処理と、第２の実施形態の基本ログ逆変換処理（図２４参照）との相違点は、辞書式圧縮の復元前及び復元後に付加するヘッダー及びフッターが異なる点である。すなわち、本実施形態に係る基本ログ逆変換処理では、変換後ログのリテラル部分の先頭に上述の６個のヘッダー及びフッターを付加する（ステップＳ２４０２に相当する）。さらに辞書式圧縮の復元後のデータより、付加した上述の６個のヘッダー及びフッターを削除する（ステップＳ２４０４に相当する）ことで、元のログを復元できる。
【０２４０】
図３２は、本実施形態に係るログリカバリ部２４３の書き込みフェーズ決定処理を例示するフローチャートである。
【０２４１】
本実施形態に係るログリカバリ部２４３は、ログ保存領域４２３ａ及びログ保存領域４２３ｂの両方のリカバリ処理を行う。
【０２４２】
ステップＳ３２０１において、ログリカバリ部２４３は、保存ログファイル位置４２２をログ保存領域４２３のサイズで除算し、商を求める。
【０２４３】
ステップＳ３２０２において、ログリカバリ部２４３は、ステップＳ３２０１で求めた商が偶数である場合は、最後に書き込まれたログ保存領域がログ保存領域４２３ａであること表す「１」を記憶し、商が奇数である場合は、最後に書き込まれたログ保存領域がログ保存領域４２３ｂであることを表す「２」を記憶する。
【０２４４】
ステップＳ３２０３において、ログリカバリ部２４３は、リカバリ処理対象のログ保存領域がステップ３２０２で求めたログ保存領域と一致するか否かを判定する。一致しない場合は、ログリカバリ部２４３は、ステップＳ３２０４において、リカバリ処理対象のログ保存領域は１つ前のログ保存領域であると判定し、ステップＳ３２０１で求めた商から１を減算する。これにより、ログリカバリ部２４３は、ログ保存領域の書き込みフェーズを正しく判定できる。リカバリ処理対象のログ保存領域がステップ３２０２で求めたログ保存領域と一致する場合は、ステップＳ３２０５へ進む。
【０２４５】
ステップＳ３２０５において、ログリカバリ部２４３は、ステップＳ３２０１で求めた商（ステップＳ３２０４を経由した場合は、ステップＳ３２０４で更新した商）を３で除算し、余りを求める。
【０２４６】
ステップＳ３２０６において、ログリカバリ部２４３は、ステップＳ３２０５で求めた余りが０の場合は、書き込みフェーズはＡフェーズであると判定し、余りが１の場合は、書き込みフェーズはＡフェーズであるとし、余りが２の場合は、書き込みフェーズはＣフェーズであるとする。
【０２４７】
以上説明した本実施形態においては、ログ保存領域４２３が複数ある場合は、例えばログ保存領域の数に１（ログ保存領域の個数の倍数ではない任意の数）を加えた数の書き込みフェーズを用いる。これにより、各ログ保存領域４２３には、前回とは異なるヘッダー及びフッターが書き込まれるため、リカバリ処理時に正しくログを抽出できる。
【０２４８】
なお、本実施形態においても、第２の実施形態で述べたすきま処理を同様に適用できる。すなわち、書き込みフェーズが切り替わる際にログ保存領域４２３ａ又はログ保存領域４２３ｂにすきま領域が発生した場合、ログ書き込み部２４２は、すきま領域が発生した時点の書き込みフェーズのヘッダー及びフッターを持つダミーデータですきま領域を埋める。これにより、ログリカバリ部２４３は、ログ保存領域４２３ａ及びログ保存領域４２３ｂにすきま領域が発生した場合でも、リカバリ処理時に正しく書き込み完了されたログを抽出できる。
【０２４９】
［第４の実施形態］
本実施形態では、アプリケーション／ミドルウェア２１の処理後に上述のログ書き込み処理を行う一連の処理の流れにおいて、ＥＬＲ（Early Lock Release）を組み合わせた場合のログ書き込み処理の最適化について説明する。
【０２５０】
一般に、アプリケーション／ミドルウェア２１のトランザクションは、トランザクション実行中にアクセスしたデータを他のトランザクションが更にアクセスしないようにするため、ロックを取得する。具体的には、ロックを取得したトランザクション実行中は、他のトランザクションは実行不可となる。そして、ロックを取得したトランザクションは、ログ書き込みが完了した時点でロックを解放する。これにより、トランザクション間の依存関係が無くなるため、トランザクション間の独立性が確保される。
【０２５１】
図３３は、一般的なトランザクション処理を例示する図である。
【０２５２】
具体的には、図３３は、トランザクションＴＸ１の後にトランザクションＴＸ２が実行され、トランザクションＴＸ１及びＴＸ２において同じデータが使用される場合を例示する。
【０２５３】
時刻Ｔ１において、トランザクションＴＸ１はロックを取得し、データの読み書き及びログバッファの書き込みなどを行う。その後、トランザクションＴＸ１は、ログＬ１の書き込み処理を行う。
【０２５４】
時刻Ｔ２において、トランザクションＴＸ１は、ログの書き込み完了後にロックを開放する。トランザクションＴＸ２は、トランザクションＴＸ１によるロック解放後にロックを取得し、データの読み書き及びログバッファの書き込みなどを行う。その後、トランザクションＴＸ２は、ログＬ２の書き込みを行う。
【０２５５】
時刻Ｔ３において、トランザクションＴＸ２は、ログの書き込み完了後にロックを開放する。
【０２５６】
すなわち、一般的なトランザクション処理では、処理中のトランザクションはログの書き込みが完了した時点でロック解放し、その後、次のトランザクションがロックを取得してデータの読み書きなどを行う。
【０２５７】
図３４は、ＥＬＲを用いたトランザクション処理の第１の例を示す図である。
【０２５８】
ＥＬＲとは、トランザクションがログバッファにログを書き込んだ時点でロック解放を行う方式である。これにより、処理中のトランザクションのログ書き込み時間を待つことなく次のトランザクションがロックを取得できるため、複数のトランザクションを並列処理させることにより処理速度を向上できる。
【０２５９】
一般的なトランザクション処理（図３３参照）では、トランザクションＴＸ１のロック解放及びトランザクションＴＸ２のロック取得（時刻Ｔ２）がＴＸ１のログＬ１の保存完了時点であるのに対し、ＥＬＲを用いたトランザクション処理では、トランザクションＴＸ１のロック解放及びトランザクションＴＸ２のロック取得（時刻Ｔ２’）は、トランザクションＴＸ１のログバッファ書き込み完了時点となる。同様に、一般的なトランザクション処理（図３３参照）では、トランザクションＴＸ２のロック解放（時刻Ｔ３）はトランザクションＴＸ２のログＬ２保存完了時点であるのに対し、ＥＬＲを用いたトランザクション処理では、トランザクションＴＸ２のロック解放（時刻Ｔ３’）はトランザクションＴＸ２のログバッファ書き込み完了時点となる。
【０２６０】
なお、図３４では、トランザクションＴＸ１のログＬ１の保存とトランザクションＴＸ２のデータ読み書き及びログバッファの書き込みとが並列して処理されるために、例えば、ログ保存を実行するスレッドとデータ読み書き及びログバッファの書き込みを実行するスレッドが分かれていてもよい。また、例えばトランザクションごとに異なるスレッドが用いられてもよい。
【０２６１】
図３５は、ＥＬＲを用いたトランザクション処理の第２の例を示す図である。
【０２６２】
図３５において、トランザクションＴＸ１及びＴＸ２は同じスレッドで処理される。
【０２６３】
ログの書き込み先が高速アクセス可能な不揮発メモリである場合は、データ読み書き及びログバッファの書き込みとログの保存とを別のスレッドで処理する場合（図３４参照）に比べ、これらを同じスレッドで処理する方が、処理のオーバヘッドが少ないため処理速度が向上する。
【０２６４】
しかしながら、図３５に示すように、トランザクションＴＸ１がデータの読み書き及びログバッファの書き込み完了時（時刻Ｔ１）においてロック解放を行った直後にトランザクションＴＸ２が割り込みを行った場合は、ログＬ１の書き込み開始は、トランザクションＴＸ２の割り込み処理完了時（時刻Ｔ３）後の任意の時刻（例えば時刻Ｔ５）まで待たされる。さらに、割り込み処理においてトランザクションＴＸ１がロック解放したデータをトランザクションＴＸ２が読み書きし、ログバッファ書き込み及びログＬ２の保存まで行うと、ログＬ１よりも先にログＬ２が保存される。
【０２６５】
この場合、ログＬ２の書き込み完了時（時刻Ｔ３）からログＬ１の書き込み開始時（時刻Ｔ５）までの間の任意の時刻（例えば時刻Ｔ４）にサーバ装置２に障害が発生すると、上述のリカバリ処理で正しいデータを復元できなくなる。
【０２６６】
図３６は、本実施形態に係るＥＬＲを用いたトランザクション処理の第１の例を示す図である。
【０２６７】
図３６は、図３５で示した処理を改良したトランザクション処理の例を示す。具体的には、ログ保存が完了していないトランザクションのログ保存を、他のトランザクションが代わりに実行する。
【０２６８】
トランザクションＴＸ２におけるログＬ１の書き込み開始時（時刻Ｔ２）にトランザクションＴＸ１におけるログＬ１の書き込みが完了していない場合、ログＬ１保存及びログＬ２保存をトランザクションＴＸ２が実行することにより、ＥＬＲを行っタ場合でもログＬ１がログＬ２より先に保存される。また、時刻Ｔ４においてトランザクションＴＸ１がログＬ１の保存を再度行っても、同じログＬ１のデータがログ保存領域４２３に保存されるため、ログ保存の順番及び内容に影響は生じない。
【０２６９】
なお、ログ保存が完了していないトランザクションの検出は、ログファイル位置２４４が確保されており、かつログ保存が完了していないトランザクションを検出（又は管理）することにより行われる。ログ保存時（時刻Ｔ２）にログ保存が完了していないトランザクションがある場合は、ログ保存が完了していないトランザクションのログの中で最小のログファイル位置から、ログ保存を行うトランザクションのログのログファイル位置までをログ保存すればよい。
【０２７０】
図３７は、本実施形態に係るＥＬＲを用いたトランザクション処理の第２の例を示す図である。
【０２７１】
トランザクションＴＸ１、トランザクションＴＸ２、トランザクションＴＸ３が並列して処理されており、ログＬ１、ログＬ２、ログＬ３のログファイル位置は、トランザクションＴＸ１（時刻Ｔ１）、トランザクションＴＸ２（時刻Ｔ２）、トランザクションＴＸ３（時刻Ｔ４）の順で確保されている。
【０２７２】
トランザクションＴＸ２及びＴＸ３は同じスレッドで処理され、トランザクションＴＸ１とトランザクションＴＸ２及びＴＸ３は、それぞれ異なるスレッドで処理される。
【０２７３】
時刻Ｔ３において、トランザクションＴＸ２は、ログＬ２のログバッファ２４５への書き込みを完了し、ロックを解放する。その後、時刻Ｔ４においてトランザクションＴＸ３が割り込みを行う。
【０２７４】
時刻Ｔ５において、トランザクションＴＸ３は、トランザクションＴＸ３のログＬ３に加えてトランザクションＴＸ１のログＬ１及びトランザクションＴＸ２のログＬ２の書き込みを開始する。
【０２７５】
しかしながら、時刻Ｔ５では、トランザクションＴＸ１はログＬ１のログバッファ２４５への書き込みを完了していない。このため、ログバッファのログＬ１部分には書き換え前の古いログが残っており、トランザクションＴＸ３は、この古いログをログストレージ装置４のログ保存領域４２３へ保存する。
【０２７６】
時刻Ｔ７において、トランザクションＴＸ１のログ保存処理が開始されるため、ログ保存領域４２３上のログＬ１は最新の状態に書き換えられる。また、時刻Ｔ８よりトランザクションＴＸ２のログ保存処理が開始され、ログ保存領域４２３上のログＬ２は再度同じ内容で上書きされる。
【０２７７】
ここで、時刻Ｔ６においてサーバ障害が発生した場合、ログバッファ２４５の書き換え前のログＬ１部分にサーバ障害発生時の書き込みフェーズに対応したヘッダー及びフッターが残っていると、これらを用いてリカバリ処理が実行されるため、ログを正しく復元することができない。したがって、ＥＬＲを用いる場合には、上述のようなケースを避ける必要がある。
【０２７８】
図３８は、本実施形態に係るログファイル位置２４４と書き込みフェーズとの関係を示す図である。
【０２７９】
ログ変換処理部２４１ｂは、ログバッファ２４５のサイズごとに書き込むログのヘッダーＬＨ及びフッターＬＦを切り替える。これにより、ログ書き込みログリカバリ部２４３は、ログバッファ２４５に保存されている古いログの書き込みフェーズと、書き込み中のログの書き込みフェーズを区別できるため、正しくリカバリ処理を実行できる。
【０２８０】
具体的には、ログ保存領域４２３のサイズに合わせてＡフェーズＰＡ及びＢフェーズＰＢ（以下、親フェーズと呼ぶ）を、ログバッファ２４５のサイズに合わせた２つのサブフェーズに分ける。ＡフェーズＰＡのサブフェーズをＡ１フェーズＰＡ１、Ａ２フェーズＰＡ２とし、ＢフェーズＰＢのサブフェーズをＢ１フェーズＰＢ１、Ｂ２フェーズＰＢ２とする。すなわち、本実施形態においては、４種類の書き込みフェーズが用いられる。
【０２８１】
ログ変換処理部２４１ｂは、ログファイル位置２４４に対して計算を行い、あらかじめログ保存領域４２３のサイズ及びログバッファ２４５のサイズごとに書き込みフェーズを決定する。具体的には、例えばログ変換処理部２４１ｂは、ログファイル位置２４４をログ保存領域４２３のサイズで除算した商と余りを求め、求めた商が偶数の場合は親フェーズをＡフェーズＰＡとし、求めた商が奇数の場合は親フェーズをＢフェーズＰＢとする。ログ変換処理部２４１ｂは、求めた余りをさらにログバッファ２４５のサイズで除算し、求めた商によりサブフェーズを決定する。すなわち、求めた商が偶数の場合のサブフェーズは、親フェーズに応じてＡ１フェーズＰＡ１又はＢ１フェーズＰＢ１となり、求めた商が奇数の場合のサブフェーズは、親フェーズに応じてＡ２フェーズＰＡ２又はＢ２フェーズＰＢ２となる。
【０２８２】
図３９は、本実施形態に係るログのヘッダー及びフッターを例示する図である。
【０２８３】
本実施形態においては、上述の４種類のフェーズが用いられるため、ヘッダー及びフッターは８種類となる。
【０２８４】
ログ変換処理部２４１ｂは、基本ログ変換処理Ａ１ヘッダーＬＨ＿Ａ１、Ａ１フッターＬＦ＿Ａ１、Ｂ１ヘッダーＬＨ＿Ｂ１、Ｂ１フッターＬＦ＿Ｂ１、Ａ２ヘッダーＬＨ＿Ａ２、Ａ２フッターＬＦ＿Ａ２、Ｂ２ヘッダーＬＨ＿Ｂ２、Ｂ２フッターＬＦ＿Ｂ２の８個のヘッダー及びフッターを先頭に付加して辞書式圧縮を行い、さらに圧縮データのリテラル部分より付加した上述の８個のヘッダー及びフッターを削除することにで、元のログを変換する。
【０２８５】
また同様に、ログ変換処理部２４１ｂは、基本ログ逆変換処理において、上述の８個のヘッダー及びフッターを変換後ログのリテラル部分の先頭に付加し、さらに辞書式圧縮の復元後のデータより付加した上述の８個のヘッダー及びフッターを削除することで、元のログを復元する。
【０２８６】
以上説明した本実施形態においては、ＥＬＲによりログバッファ２４５へのデータの格納とログ保存領域４２３へのログ保存の間に他のトランザクションの割り込みが発生する場合であっても、ログを正しく保存及び復元することができるため、ＥＬＲの高速性を活かすことが出来る。具体的には、割り込みを行ったトランザクションが他のトランザクションのログ保存を行う場合において、ログ変換処理部２４１ｂは、ログバッファ２４５のサイズごとにヘッダー及びフッターを切り替える。これにより、例えばサーバ障害が発生しリカバリ処理を行う場合に、ログリカバリ部２４３は、他のトランザクションがログバッファ２４５へログの格納を完了していないためログバッファ２４５に古いログが格納されている場合であっても、古いログを識別することができるため、正しいログだけを抽出することができる。
【０２８７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２８８】
１…情報処理システム、２…サーバ装置、３…ストレージ装置、４…ログストレージ装置、５…ストレージネットワーク、２１…アプリケーション／ミドルウェア、２２…ストレージアクセス部、２３、３１…インターフェイス部、２４、４１…高速ログアクセス部、２５…高速インターフェイス部、３２…データ保存部、４２…高速ログ保存部（ＳＣＭ）、２４１…ログ初期処理部、２４１ａ…ログ初期化部、２４１ｂ…ログ変換処理部、２４２…ログ書き込み部、２４５…ログバッファ。
【図１】
2017162288.tif 000003
【図２】
2017162288.tif 000004
【図３】
2017162288.tif 000005
【図４】
2017162288.tif 000006
【図５】
2017162288.tif 000007
【図６】
2017162288.tif 000008
【図７】
2017162288.tif 000009
【図８】
2017162288.tif 000010
【図９】
2017162288.tif 000011
【図１０】
2017162288.tif 000012
【図１１】
2017162288.tif 000013
【図１２】
2017162288.tif 000014
【図１３】
2017162288.tif 000015
【図１４】
2017162288.tif 000016
【図１５】
2017162288.tif 000017
【図１６】
2017162288.tif 000018
【図１７】
2017162288.tif 000019
【図１８】
2017162288.tif 000020
【図１９】
2017162288.tif 000021
【図２０】
2017162288.tif 000022
【図２１】
2017162288.tif 000023
【図２２】
2017162288.tif 000024
【図２３】
2017162288.tif 000025
【図２４】
2017162288.tif 000026
【図２５】
2017162288.tif 000027
【図２６】
2017162288.tif 000028
【図２７】
2017162288.tif 000029
【図２８】
2017162288.tif 000030
【図２９】
2017162288.tif 000031
【図３０】
2017162288.tif 000032
【図３１】
2017162288.tif 000033
【図３２】
2017162288.tif 000034
【図３３】
2017162288.tif 000035
【図３４】
2017162288.tif 000036
【図３５】
2017162288.tif 000037
【図３６】
2017162288.tif 000038
【図３７】
2017162288.tif 000039
【図３８】
2017162288.tif 000040
【図３９】
2017162288.tif 000041