- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- PostgreSQL/解析/WAL へ行く。
- 1 (2019-10-03 (木) 06:46:45)
- 2 (2019-10-03 (木) 08:21:51)
- 3 (2019-11-07 (木) 06:45:26)
- 4 (2019-11-07 (木) 06:46:54)
WAL(Write Ahead Logging) †
- Write Ahead Loggingの略で、トランザクションログのことである。
- データベースでは、一般にデータの書き込みの前にログに変更内容を書き出す。
これにより、データベースが何らかの異常でダウンしても、WALログから障害発生前の状態まで復旧することができる。
WALの構造 †
PostgreSQLでは、データベースクラスタの下のpg_wal(ver10以降、以前はpg_xlog)にWALログがかかれる。
論理構造 †
- WALは、通常16MBのファイルで管理される。
- WALレコードは、タイムライン+ログID+ログID内のオフセットで決まる。
WALファイル名は、これらの値で構成される。項目 サイズ tli(タイムラインID) 4byte xlogid(ログID) 4byte xrecoff(オフセット) 4byte タイムラインID:1 セグメント0 00000001 00000000 00000000 start xlogid=0 セグメント1 00000001 00000000 00000001 セグメント2 00000001 00000000 00000002 ... セグメント255 00000001 00000000 000000FE end xlogid=0 セグメント256 00000001 00000001 00000001 start xlogid=1 ... -- ログIDごとのセグメント数 XLogSegmentsPerXLogId(wal_segsz_bytes) = 256 -- WALファイル名 例:タイムライン = 1、LSN = 0/14000028 の時 xlogid = 0 xrecoff = 335544360 オフセットNO = 335544360 - 1 / 16MB = 20 = 0x14 ファイル名 = 000000010000000000000014
参考
- access/xlog_internal.h - https://git.postgresql.org/gitweb/?p=postgresql.git;a=shortlog;h=refs/heads/REL_10_STABLE
- Write Ahead Logging — WAL - on http://www.interdb.jp/pg/pgsql09.html
WALログ内部構造 †
参考リンク †
- 学習用に便利なWALの中身をSQLで出力する拡張機能