Skip to main content

RDB Log

Overview

本番運用や障害復旧、レプリケーションなどに関わるなら「常識」レベル。 どのRDBでも似たような概念があります。

  • PostgreSQL → WAL(Write-Ahead Logging)
  • Oracle → Redo Log、Archive Log
  • SQL Server → Transaction Log
  • MySQL → Binlog(論理ログ) + Redo Log(InnoDBの物理ログ)

Binlog/Redo Log/WAL比較

用語正体対象DB主な用途
BinlogSQLレベルの変更記録MySQLレプリケーション / PITR(復元)
Redo Log物理レベルの変更記録MySQL(InnoDB), Oracleクラッシュ復旧
WALRedo Logと同義(PostgreSQL用語)PostgreSQLクラッシュ復旧、整合性維持
種類属する層主な目的永続化のタイミング代表的なDB
Binlog論理ログ(SQL層)レプリケーション、PITR(時間指定復元)トランザクション確定後MySQL(InnoDB以外のエンジンも対象)
Redo Log物理ログ(ストレージエンジン層)クラッシュリカバリ(障害復旧)書き込み直後(先行書き)MySQL(InnoDB)、Oracle、PostgreSQL
WAL物理ログ(PostgreSQL専用用語)Redo Logと同様:データ変更の信頼性確保書き込み直後(先行書き)PostgreSQL

WAL(Write-Ahead Logging)

WALは、「先にログ(変更内容)を書き出してから実際のデータファイルを更新する」という信頼性重視の仕組み。

処理の流れ

  1. ユーザーが UPDATE を投げる
  2. 変更内容がまずWAL(ログ)としてディスクに書き込まれる
  3. その後、実際のテーブルファイルに反映される

メリット

  • クラッシュ時でもログを使って「直前の状態まで正確に戻せる」
  • 一貫性(ACID)を保ちやすい
tip

PostgreSQLではWALがRedo Log相当の役割を担っています。

Redo Log

InnoDBのRedo Logの仕組み(図つき)

        +------------------+
| クエリ実行 |
+------------------+
|
v
+-----------------------+
| Redo Log に書き込む | ←★ 先にログを残す(WAL的な処理)
+-----------------------+
|
v
+-----------------------------+
| Buffer Pool(メモリ上のページ)|
+-----------------------------+
|
v(後で)
+---------------------+
| データファイルに反映 |
+---------------------+

補足ポイント

  • Redo Logは2つの領域に分かれる
  • ログバッファ(メモリ上、一時的)
  • ログファイル(ib_logfile0 など、ディスク上)
  • クラッシュ時はログファイルから復元され、データの一貫性が保たれる

MySQLのbinlogとredo logについて

MySQLのbinlogとredo logについて