トランザクションログ
表示
計算機科学のデータベースの分野において、トランザクションログ(英: transaction log)(または データベースログ, バイナリログ とも呼ばれる)とは、クラッシュやハードウェア故障があったとしてもデータベース管理システムのACID特性を保障するための操作履歴を指す。ログは電源が途絶えてもデータを保持できる補助記憶装置上のファイルに出力される場合が多い。
データベースが起動後に、整合性の無い状態であるか、正常に終了されていないことを検知すると、データベース管理システムはトランザクションログを読み取り、以下の操作を行う。どちらも原子性と永続性を保障するために必要である。
トランザクションログの目的は、データログとは異なる。一般にデータログは操作履歴を人間が読みやすい (human-readable) 表現で記録するために用いられる。そのため、データベース管理システムによってはトランザクションログとデータログの両方を提供している場合も多い。
トランザクションログの構造
[編集]トランザクションログは以下の構造を持つ。
- ログシーケンス番号(英: Log Sequence Number): ログレコードの一意識別子。一般に、番号は一意に増加する値が割り当てられ、ARIES のようなリカバリ・アルゴリズムで利用される。
- 直前のLSN: 直前のレコードへの参照。これにより、トランザクションログは連結リスト状の構造を持つことになる。
- トランザクション番号: レコードを生成したデータベースのトランザクション番号。
- 種類: レコードの種類を表す。
全てのログレコードは共通の属性の他に、操作ごとに固有の属性を持っている。以下は、一般的なデータベースが使用するログレコードの種類である:
- 更新レコード はデータベースの更新(変更)を記録し、以下の属性を持つ:
- ページ番号: 更新したページの番号を表す。
- 長さと位置: ページ内で変更した領域を表す。
- 更新前および後イメージ: 更新した領域の更新前および更新後の値。データベースによって両方または片方のみを記録する違いがある。
- 補償レコード は更新のロールバックを記録する。レコードはそれぞれ独立な更新レコードを指す。その内容は:
- Undo Next LSN: 補償処理が必要な次のレコード番号。
- コミットレコード はトランザクションのコミットを記録する。
- アボートレコード はトランザクションのロールバックを記録する。
- チェックポイントレコード はチェックポイント処理が完了したことを記録する。このレコードは読み込むべき最も古いレコードを示すため、リカバリ処理の高速化に貢献する。その内容は:
- Redo LSN: チェックポイント以降最初に行った変更処理レコード番号。このレコード以降の処理を再実行する必要がある。
- Undo LSN: チェックポイント中に実行中だったトランザクションが記録した最古のレコード番号。このレコード以降の処理は補償が必要な可能性がある。