postgresql - 相同 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,但波动模式不是。
解决方案
最好的方法是使用--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
这也将允许您使用可以证明非常有用的时间点恢复。
推荐阅读
- android - ML Kit 人脸检测 ML 模型大小在 Android 上
- benchmarking - 如何在堆栈的 package.yaml 中指定每个基准参数?
- django - 如果导入未设置为全局,Django shell 上的 Python 脚本看不到导入?
- php - 处理注册请求的路由返回 404
- c++ - 指针和类,输出
- c++ - 带有模板的结构和函数
- c# - 如何断言已将扩展名更改为 csv 的 exe 文件实际上是 csv 文件 c#
- python - 如何从whatsapp web 上抓取数据
- javascript - 如何从 JS 浏览器客户端使不可流式传输的 mp4 流式传输?
- r - R - 评估存储在 data.table 列中的函数