我在设置 PostgreSQL hot_standby 时遇到问题。在运行 pg_basebackup 后尝试启动数据库时,我在 postgresql.log 中收到,致命:无法从 WAL 流接收数据:错误:请求的 WAL 段 00000001000006440000008D 已被删除
。在 IRC 中进行简短讨论后,我开始明白错误可能源于我的写入密集型数据库的 wal_keep_segments
设置太低。
如果可能的话,我该如何计算 wal_keep_segments
的正确设置?此设置的可接受值是多少?
我在做什么:
- PostgreSQL 9.3
- Debian 7.6
最佳答案
wal_keep_segments
可以估计为 pg_xlog
目录中每分钟平均新 WAL 段数乘以您希望安全的分钟数。请记住,在 wal_level
从其默认值 minimal
更改为 archive
或 hot_standby< 后,速率预计会增加
。唯一的成本是磁盘空间,如您所知,默认情况下每个段 16 MB。
我通常使用 2 的幂作为值。以大约每分钟 1 段的速率,256 的值给我大约 4 小时的时间来设置待机。
您也可以考虑将 WAL 流与 pg_basebackup
一起使用。这是根据其 --xlog-method=stream
选项。不幸的是,至少截至 2013 年,根据 discussion on a PostgreSQL mailing list ,仍然建议将 wal_keep_segments
设置为非零值 - 这是为了防止流无法跟上的风险。如果您确实使用了 pg_basebackup
,也不要忘记 --checkpoint=fast
。
关于postgresql - 为 PostgreSQL hot_standby 设置 wal_keep_segments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28162021/