我在设置PostgreSQL hot_standby时遇到了麻烦。当尝试在运行pg_basebackup之后启动数据库时,我在postgresql.log中接收到FATAL: could not receive data from WAL stream: ERROR: requested WAL segment 00000001000006440000008D has already been removed。在IRC中进行了简短的讨论之后,我了解到错误很可能源于我的编写密集型数据库的wal_keep_segments设置太低。
如果可能的话,如何计算wal_keep_segments的适当设置?此设置的可接受值是什么?
我的工作是:
发布于 2015-06-19 18:33:14
wal_keep_segments可以估计为pg_xlog目录中每分钟新的WAL段的平均数量乘以希望安全的分钟数。请记住,在wal_level从其默认值minimal更改为archive或hot_standby后,预期利率会增加。唯一的成本是磁盘空间,默认情况下,每段磁盘空间为16 MB。
我通常使用2的幂作为值。以每分钟1段的速度计算,256的值给我大约4小时的时间来设置待机时间。
您也可以考虑在pg_basebackup中使用WAL流。这是它的--xlog-method=stream选项。不幸的是,至少在2013年,根据关于PostgreSQL邮件列表的讨论,可能仍然建议将wal_keep_segments设置为非零值--这是为了防止流无法跟上。但是,如果您确实使用了pg_basebackup,也不要忘记--checkpoint=fast。
https://stackoverflow.com/questions/28162021
复制相似问题