自动清理pg_xlog

Ily*_*lya 5 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
Run Code Online (Sandbox Code Playgroud)

当然我可以用bash脚本自动化它,但问题是有必要停止PotgreSQL.有没有其他方法可以在不停止PostgreSQL的情况下清理它?

d1l*_*ger 4

稍微担心您要从 pg_xlog 中删除文件,它们对于恢复数据库至关重要。请不要告诉我这是生产:)

不管怎样,WAL 以这样的速度聚集有一个更根本的原因,这是由于 PostgreSQL 中新引入的“复制槽”。

复制槽将保留 WAL 日志,直到它们被应用到 DR,因此您的 WALS 不会被应用到备用数据库。如果您一直在删除 WALS,那么它们很可能永远不会被应用:),从而形成恶性循环。

您还可以通过“wal_keep_segments”参数控制该目录中的 WALS 数量,尽管我不确定这在 9.5 中的副本和复制槽中起多大作用。

无论哪种方式,您肯定需要停止删除 WAL,并使用主设备的全新同步来重建您的 DR。