postgresql - 为 PostgreSQL hot_standby 设置 wal_keep_segments

标签 postgresql postgresql-9.3

我在设置 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 更改为 archivehot_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/

相关文章:

sql - 将查询从 Firebird 转换为 PostgreSQL

database - 在 Django 中,如果使用原始 SQL 添加行,是否会使用列的默认值?

MySQL -> Postgres

sql - 每天查询数周内有日期限制的计数

postgresql - Ubuntu 中数据库 PostgreSQL 9.3 的密码验证失败

postgresql - 如何使用 PostGIS 升级 PostgreSQL?

performance - 删除 id 不在另一个表中的非常大的表记录

sql - 如何计算postgresql中的空值?

sql - 使用 LIKE 查询数组的 Postgres

postgresql - 调用聚合函数 JOOQ 的别名列结果