问题描述
PG10.3 配置主从同步流复制:1主+1从,主从节点的的参数wal_keep_segments = 10 。
主节点频频插入数据,在从节点的pg_wal目录下有时候会有40多个WAL文件。
背景
主节点做checkpoint时,会把checkpoint的信息也写到WAL日志中。其中的checkpoint.redo记录了当时的LSN,执行checkpoint操作的目的就是保证checkpoint.redo之前的数据改动都落盘。
从节点端读取WAL,做数据恢复时,会记录从WAL中读到的最近两次checkpoint:
– checkpoint_new表示最近的一次
– checkpoint_old表示比checkpoint_new更早的一次
从节点端在做恢复时,也会做checkpoint,内部叫做restartpoint, 即把数据落盘,但是不会在WAL中产生新的checkpoint记录。
从节点只有做checkpoint时才会删掉/重用已有的WAL文件,如果不做checkpoint,则WAL文件持续增加。
从节点做checkpoint时,保留多少个WAL文件呢?
包含很多情况,每一种情况下有不同的计算公式。 这里举例一种情况,该情况会保留很多的WAL文件。
处理逻辑举例:
wal_keep_segments = 10 #默认保留10个WAL文件。
max_wal_size = 1GB #转换到WAL文件数:1G/16M=64个WAL文件
checkpoint_old.redo表示主节点上次checkpoint