与相同的wal_keep_segments等效的WAL保留差异很大

时间:2019-01-11 19:31:56

标签: postgresql

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

然而,相同wal_keep_segments的等效WAL保留差异很大,而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的增加,但是挥舞的方式不是。

enter image description here

1 个答案:

答案 0 :(得分:1)

最好的方法是使用--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实际归档所有wal文件。恢复备份时,您需要为restore_command设置一个相应的recovery.conf。这也将允许您使用时间点恢复,这可能会非常有用。