自动清理pg_xlog

问题描述:

有谁知道如何自动清理PostgreSQL 9.5中的pg_xlog? 由于我启用了复制磁盘已经填充200G 2周。所以,我用下面的命令手动清除它:自动清理pg_xlog

sudo service portgesql stop 
sudo /usr/lib/postgresql/9.5/bin/pg_controldata /var/lib/postgresql/9.5/main/ | grep Next | grep -v Multi 
sudo -u postgres /usr/lib/postgresql/9.5/bin/pg_resetxlog -o 44842 -x 575323138 -f /var/lib/postgresql/9.5/main/ 
sudo service portgesql start 

我当然可以用bash脚本自动执行它,但这里的问题是,它必须停止PotgreSQL。有没有其他方法可以在不停止PostgreSQL的情况下进行清理?

稍微担心你从pg_xlog中删除文件,它们对恢复你的数据库势在必行。请不要告诉我这是生产:)

无论如何,还有一个更基本的原因,为什么WAL的收集速度是由于PostgreSQL中新引入的“复制槽”造成的。

复制插槽将保留WAL日志,直到它们已应用于DR,以便您的WALS不会应用于备用数据库。有机会,如果你已经删除了WALS,那么它们将永远不会被应用:)并因此进入了有趣的循环。

您还可以通过参数化“wal_keep_segments”来控制该目录中WALS的数量,虽然我不确定这个角色在9.5中有多少副本和复制插槽。

无论哪种方式,你肯定需要停止删除WAL,并让你的DR重新建立一个全新的主同步。

+0

感谢您的回答。 WAL保持段已被设置为5000,并且由于不明原因,当我清理它时,其中几乎有10000个。所以看起来这在9.5中不起作用。 – Ilya

+0

我已经重置了我的复制设置,添加了'复制插槽'并删除了'wal keep segment',现在更好了。 pg_xlog目录中只有大约10个文件,它不会长大到天空大小=)P.S.是的,这是生产,需要从pgdump恢复一些最新的数据。这并不是一个好主意:) – Ilya

+0

这是个好消息。 – d1ll1nger