このページをはてなブックマークに追加このページを含むはてなブックマーク このページをlivedoor クリップに追加このページを含むlivedoor クリップ

目次

ログ機能の役割

  1. DBシステムの性能向上
    • 一般的にログの目的はそのプログラムの動作を記録しておくことである。そのため、プログラムが目的とする本来の処理としては、ログ機能は性能は向上するどころか、劣化させるものとなる。しかし、DBシステムが持つログ機能には、DB自体の性能を向上する役割がある。
    • ログをディスク上に書き出すことで、メモリ上のバッファ領域をディスクへ書き出す処理を省き、かつデータの安全性を保証できるため、DBシステムの性能が向上する。
  2. 障害からの復旧
    • DBシステムのログ機能は、DBの一貫性欠如を起こす障害に対する冗長性を提供する。

ログデータを書き出すタイミング

  • ログデータはトランザクションがコミットされる時点でディスク上に書き出される。
    • 言い換えれば、ログデータの書き出しが終了した時点で、トランザクションのコミットが終了する。
  • しかし、この時点では変更されたデータはまだメモリ内にあり、ディスクには書き出されていない。
    • このようにトランザクションのコミットにはログデータのみを書き出し、変更されたデータの書き出しを後で行う方式を先行書き込みログ(Write-Ahead Logging:WAL)と呼ぶ。
    • 書き出すのはあくまでログデータのみなので、ログデータにはトランザクションを保証できるだけの情報を含めなければならない。
  • トランザクションのコミット時に、ログデータを先行して書き出してからコミットを終了すると、トランザクションのレスポンス性能を向上させる効果がある。

ログデータの内容

  • トランザクションの開始と種る用
    • 各トランザクションにはDBシステム内で識別可能なIDが付けられているが、トランザクションの開始と終了はこのIDと共にログデータとして保存される。
    • 終了には、コミットとアボート(ロールバック)の2種類がある。
  • 変更前データ
    • トランザクションをアボートした場合、変更データを変更前まで戻す必要がある。
    • このときに使用されるのが変更前データのUNDOログデータである。
    • 変更データを変更前に戻す動作をロールバックと呼ぶ。
  • 変更後データ
    • トランザクションをコミットした場合、変更されたデータを確実に保証するためには、変更後データをログデータとして使用する必要がある。
    • この変更後データをREDO(リデゥ)ログデータと呼ぶ。
    • REDOログデータを使用して、DBの内容をコミット状態に変更する動作をロールフォワードと呼ぶ。
  • チェックポイントの開始と終了
    • チェックポイント処理は瞬時に終了するわけではない。よって、チェックポイント処理が開始された時点でコミットしているトランザクションを検出するために、チェックポイントの開始をログデータとして使用する。
    • また、チェックポイント処理が終了したことを記録するために、チェックインとの終了もログデータとして保存する。

参考文献

  • 『RDBMS解剖学』