自动清理pg_xlog

时间:2016-09-16 07:26:48

标签: postgresql

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

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的情况下清理它?

1 个答案:

答案 0 :(得分:4)

稍微担心您要从pg_xlog中删除文件,他们必须恢复您的数据库。请不要告诉我这是生产:)

无论如何,还有一个更为根本的原因,就是为什么WAL会以这种速度聚集,这是由于新推出的"复制插槽"在PostgreSQL中。

复制插槽将保留WAL日志,直到它们已应用于DR,因此您的WALS不会应用于备用数据库。如果您已经删除了WALS,那么它们将永远不会被应用:)因此可能会出现这种有意义的循环。

您还可以通过" wal_keep_segments"的参数控制该目录中的WALS数量。虽然我不确定它在副本和复制槽中的作用有多大。

无论哪种方式,您当然需要停止删除WAL并使用主人的全新同步重建DR。