PG数据库中。事务日志文件称为 Write Ahead Log
, 在数据库恢复、高可用、流复制、逻辑复制等Postgres模块中十分重要
当数据变更时:
- change发生时:先将变更后内容计入wal buffer,再将变更后的数据写入data buffer
- commit 发生时:wal buffer中数据刷新到磁盘
- checkpoint发生时:将所有data buffer刷新到磁盘
概念
redo log
redo log称为重做日志,在写入数据文件前,每个变更都会先写入到redo log中,存储数据库的所有修改历史,用于数据库故障恢复、增量备份、PITR和复制
**
WAL segment file
为了便于管理,PG把事务日志文件划分为N个segment,每个segment称为wal segment file ,每个wal segment file大小默认为16MB
XLOG RECORD
这是一个逻辑概念,可以理解为PG中的每一个变更都对应一条XLOG RECORD,这些XLOG Record存储在WAL segment file中。PG读取这些XLOG Record进行故障恢复/PITR等操作
WAL buffer
缓冲区,不管是WAL segment file 的header还是XLOG Record都会先行写入到WAL缓存区中,在合适的时候再通过WAL writer 写入到WAL segment file中
LSN
日志序列号(uint64),在事务日志种,LSN单调递增且唯一
checkpointer
是PG的一个后台程序,周期性执行checkpoint,把XLOG Record写入到当前的WAL segment file中,该XLOG Record记录包含了最新的Redo point位置
checkpoint
检查点checkpoint由checkpointer进程执行,主要流程如下:
- 获取redo point,狗仔 redo检查点信息的XLOG Record并写入到WAL Segment file
- 刷新脏页到磁盘上
- 更新redo point等信息到pg_control文件中
REDO point
PG启动恢复的起始点,是最后一次checkpoint启动时事务日志文件的末尾即写入Checkpoint XLOG Record时的位置(偏移量)
pg_control
磁盘上的物理文件,保存检查点的基本信息