PG10.3 配置主从同步流复制:1主+1从,主从节点的的参数wal_keep_segments = 10 。 主节点频频插入数据,在从节点的pg_wal目录下有时候会有40多个WAL文件。rest
主节点作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文件持续增长。命名
包含不少状况,每一种状况下有不一样的计算公式。 这里举例一种状况,该状况会保留不少的WAL文件。数据
处理逻辑举例: wal_keep_segments = 10 #默认保留10个WAL文件。 max_wal_size = 1GB #转换到WAL文件数:1G/16M=64个WAL文件文件
checkpoint_old.redo表示主节点上次checkpoint时候,已经落盘的数据对应的LSN+1, checkpoint_old.redo对应的WAL文件保留,更早的WAL文件称做“可删除WAL文件”,被删除或重用。poi
每个WAL文件都有一个惟一的序号,PG内部使用这个序号。给定的LSN,计算LSN/16M(取模),获得WAL文件序号。序号最终会对应到WAL文件名。new
若是从节点当前最新的WAL文件序号是cur_no, checkpoint_old.redo对应的WAL文件序号是old_no,那么old_no-1以及以前的WAL文件通通删掉/重用。保留的文件数量是keep_num=cur_no - old_no + 1,这个数可能会很大。若是keep_num < wal_keep_segments,例如:keep_num=5, wal_keep_segments=10,则old_no-6以及以前的WAL文件被删掉或重用。参数
也是有几种不一样的状况,每一种状况下,其计算方式不一样。
简单的一种状况: 比old_no-1老的10个“可删除WAL文件”被重命名成10个将来的WAL文件,剩余的“可删除WAL文件”删掉。
一种复杂的计算方式是: max_wal_size=1G, 转换成WAL文件数量: max_num = max_wal_size/16M = =64 若是 reuse_num =(old_no + max_num ) - cur_no, 若是reuse_num>0, 则要把reuse_num个“可删除WAL文件”重命名为将来的WAL文件,其它的“可删除WAL文件”删掉。
在主节点,pg_wal目录下的WAL文件数量遵循相似的规律,也会有多于wal_keep_segments个文件。