有什么方法可以清理主服务器上的 postgres WAL 文件吗?从服务器没问题,但主服务器将 wal 保留段设置为 2000,这导致磁盘空间使用量增加。我正在寻找一种方法来清理主服务器上的磁盘空间而不破坏任何东西。我知道将保留段设置为 2000 很疯狂,但这不是我设置的。
答案1
解决根本原因,问题就会消失(你的根本问题是有人不知道他们在做什么并且没有阅读 Postgres 手册,并将其设置wal_keep_segments
为疯狂的值):
- 减少
wal_keep_segments
到一个合理的值。
(10 通常是合理的。100 也不是不合理的)。 - 重新启动 Postgres 服务器。
答案2
wal_keep_segments 的适当值取决于许多变量。没有人可以告诉您应该将其设置为多少。我将我们的数据库设置为 64,因为 64 是 3 小时内繁忙期间写入的 WAL 文件的平均数量。这意味着我有 3 个小时的时间来修复主服务器和备用服务器之间的任何问题。如果超过 3 个小时,我将不得不重新启用备用服务器或开始从存档目录传输 WAL 文件。
答案3
我在一台曾经备份过、但不再备份的试生产服务器上遇到了这个问题。原来配置已更改为:
archive_command = ''
archive_mode = on
...大概是删除了 rsync 命令。这导致pg_xlog
不断增长。您无法将其更改archive_mode
为关闭,这需要重新启动实例。
我通过改变解决了这个问题archive_command = '/bin/true'
,做了一个select pg_reload_conf();
并且在接下来的几个检查点清除了目录。