七叶笔记 » 数据库 » Postgresql中xlog生成和清理逻辑操作

Postgresql中xlog生成和清理逻辑操作

1.1 不开启归档时

文件数量受下面几个参数控制,通常不超过

checkpoint_segments + wal_keep_segments + 1个文件。

如果一个旧段文件不再需要了会重命名然后继续覆盖使用,如果由于短期的日志输出高峰导致了超过

3 * checkpoint_segments + 1个文件,直接删除文件。

1.2 开启归档时

文件数量:删除归档成功的段文件

抽象来看一个运行的PG生成一个无限长的WAL日志序列。每段16M,这些段文件的名字是数值命名的,反映在WAL序列中的位置。在不用WAL归档的时候,系统通常只是创建几个段文件然后循环使用,方法是把不再使用的段文件重命名为更高的段编号。

当且仅当归档命令成功时,归档命令返回零。 在得到一个零值结果之后,PostgreSQL将假设该WAL段文件已经成功归档,稍后将删除段文件。一个非零值告诉PostgreSQL该文件没有被归档,会周期性的重试直到成功。

2 PG源码分析

2.1 删除逻辑

触发删除动作

wal_keep_segments判断(调用这个函数修改_logSegNo,然后再传入RemoveOldXlogFiles)

删除逻辑

2.2 归档逻辑

2.3 ready生成逻辑

2.4 总结

ready文件只要满足archive_mode=on和wal_lever>=archive,就总会生成(XLogWrite函数调用生成)

因为archive_command设置空,所以ready文件的消费完全由外部程序控制

done文件的处理由PG完成,两个地方会触发done文件处理,检查点和重启点

处理多少done文件受wal_keep_segments和replication_slot控制(KeepLogSeg函数)

3 WAL段累积的原因(长求总?)

注意:无论如何注意不要手动删除xlog文件

注意:checkpoint产生的日志回不立即生成ready文件,是在下一个xlog后一块生成的

3.1 ReplicationSlot

打开流了复制槽

删除

删除后PG会在下一个checkpoint清理xlog

3.2 较大的wal_keep_segments

检查参数配置,注意打开这个参数会使xlog和ready有一定延迟

3.3 回收出现问题

如果不使用PG自动回收机制,数据库依赖外部程序修改.ready文件,需要检测回收进程

3.4 检查点间隔过长

检查参数配置

以上为个人经验,希望能给大家一个参考,也希望大家多多支持七叶笔记。如有错误或未考虑完全的地方,望不吝赐教。

相关文章