首页 > 解决方案 > 相同 wal_keep_segments 的等效 WAL 保留变化很大

问题描述

我们使用 postgresql 10 并用于pg_basebackup --pgdata=- -X fetch --format=tar备份。取决于我们的数据库大小,备份可能需要几个小时。因此,我们通过运行检查我们的备份花了多长时间以及我们的wal_keep_segments参数的等效 WAL 保留时间是多少SELECT max(modification)-min(modification) FROM pg_ls_waldir()

然而,相同的等效 WAL 保留wal_keep_segments有很大差异,而 WAL 保留下降得太低,我们的备份由于 WAL 段被删除而失败。

pg_basebackup: could not get write-ahead log end position from server:
ERROR:  requested WAL segment 000000010001DDE200000034 has already been removed

有没有办法直接配置 WAL 保留而不是 WAL 段的数量?还有什么可能导致这个问题?

这是我们数据库的 WAL 保留图。一些步长增加是由于增加了 wall_keep_segments,但波动模式不是。

在此处输入图像描述

标签: postgresql

解决方案


最好的方法是使用--wal-method=stream而不是--wal-method=fetch. 这实际上是从 PostgreSQL 10 开始默认启用的。

pg_basebackup --format=tar --wal-method=stream --gzip --compress=9 --pgdata=.

您将在输出目录中获得 2 个文件 - base.tar.gz 和 pg_wal.tar.gz。但是您将失去使用更好的压缩程序或轻松通过网络传输数据的能力。

或者,您可以在备份中禁用 wal 归档,并实际使用archive_command. 您需要在恢复备份时设置相应restore_command的 for 。recovery.conf这也将允许您使用可以证明非常有用的时间点恢复。


推荐阅读