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



1197

被折叠的 条评论
为什么被折叠?



