#author("2019-10-02T14:21:51+00:00","default:haikikyou","haikikyou")
[[PostgreSQL/解析]]
#contents


* WAL(Write Ahead Logging)[#v52df659]

- Write Ahead Loggingの略で、トランザクションログのことである。
- データベースでは、一般にデータの書き込みの前にログに変更内容を書き出す。~
これにより、データベースが何らかの異常でダウンしても、WALログから障害発生前の状態まで復旧することができる。

* WALの構造 [#mfab8c81]

PostgreSQLでは、データベースクラスタの下のpg_wal(ver10以降、以前はpg_xlog)にWALログがかかれる。

** 論理構造 [#d74f22b3]

- WALは、通常16MBのファイルで管理される。
- WALレコードは、タイムライン+ログID+ログID内のオフセットで決まる。~
|~項目|~サイズ|h
|tli(タイムラインID)|4byte|
|xlogid(ログID)|4byte|
|xrecoff(オフセット)|4byte|
WALファイル名は、これらの値で構成される。
#geshi{{{
タイムライン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
}}}

&label(warn){参考};
- [[access/xlog_internal.h>https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/access/xlog_internal.h;h=7453dcbd0eb26e809586ef25877a124dfe65381a;hb=7ca35472cbf36bb822fe56b40cd5af1031e5081a]] - &size(11){&color(gray){https://git.postgresql.org/gitweb/?p=postgresql.git;a=shortlog;h=refs/heads/REL_10_STABLE};};
- [[Write Ahead Logging — WAL>http://www.interdb.jp/pg/pgsql09.html]] - &size(11){&color(gray){on http://www.interdb.jp/pg/pgsql09.html};};
** WALログ内部構造 [#w4b2dee3]


* 参考リンク [#x2cc3c2f]

- 学習用に便利なWALの中身をSQLで出力する拡張機能
-- [[walreader >https://github.com/moritetu/walreader]] - &size(11){&color(gray){on https://github.com/moritetu/walreader};};

トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
目次
ダブルクリックで閉じるTOP | 閉じる
GO TO TOP