PostgreSQL之WAL段文件管理

在前面我们了解了PG数据库的故障恢复依赖于在启动时通过回放WAL段文件中的XLOG记录来完成,这篇我们学习一下PG数据库中WAL段文件是怎么管理的。
首先,我们需要知道WAL段文件是保存在pxg_xlog(PG V10版本以前,在PG V10版本以后变成 pg_wal)子目录下,如果一个WAL段文件写满后就会切换到一个新的段文件。总的WAL段文件个数由几个配置参数决定的。此外,对于WAL段文件的管理机制在PG 9.5版本得到了提升。

WAL段的切换

WAL段会在以下几种情况下发生切换:

  1. 一个WAL段文件被写满。
  2. 调用pg_switch_xlog函数。
  3. 开启archive_mode,且设置的archive_timeout达到超时时间。

被切换的文件经常会被回收(重命名并重新使用),不过如果不是必要的话也有可能被删除。

WAL段管理

当一个checkpoint开始时,数据库会评估并准备这一次checkpoint过程需要的WAL段文件个数。这个评估是根据之前checkpoint使用的文件数做出来的。他们从包含前一个REDO point的段开始算,值需要在min_wal_size(默认80MB,如5个文件)和max_wal_size(1GB,如64个文件)。当checkpoint开始,必要的文件会被保留或回收,不必要的文件会被删除。
以下是一个具体的例子。假如checkpoint开始前有6个WAL段文件,WAL_3包含上一个REDO point(在PG11及后面版本就是REDO point,因为已经没有prior REDO point),数据库在checkpoint开始时评估需要5个文件。此时,WAL_1会被重命名为WAL_7回收利用而WAL_2会被删除。
在这里插入图片描述
如果评估需要更多的文件,新的文件会被创建出来,总的WAL文件大小不能超过max_wal_size。比如下面例子,如果WAL_7被写满,WAL_8就会被创建出来。
在这里插入图片描述
根据服务的活跃情况WAL文件的个数会自适应地变化。如果WAL数据会持续的写并一直增长,那么评估出来的WAL段文件以及WAL文件的总尺寸也会相应的增长。相反,他们就会下降。
如果总的WAL文件大小超过了max_wal_size,就会开始一个checkpoint动作。通过checkpoint,一个新的REDO point被创建,然后上一个REDO point变成之前的,之后不必要的老的文件就会被回收。通过这种方式,PG总能够持有数据库恢复所需要的WAL段文件。
在这里插入图片描述配置参数wal_keep_size(在PG 12或早期称为wal_keep_segments)也会影响WAL段文件的个数。

连续归档及归档日志

连续归档(Continuous Archiving)是一个新功能,在WAL段进行切换的时候将WAL段文件拷贝到归档路径,通过后台archiver进程来执行。被复制的文件也被称为archive log。这个功能经常会被用于物理备份以及PITR时间点恢复

归档路径由参数archive_command控制,如:

archive_command = 'cp %p /home/postgres/archives/%f'

在这里插入图片描述
如上图所示,当WAL_7切换时,这个文件就会归档到归档目录下面,即Archive log 7。
在PG 14或早期版本,连接归档只能使用shell命令。在PG 15中,PG支持了一个可加载库功能来归档日志。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值