如何启用 pg_xlog 的自动清理

Ggi*_*ann 5 postgresql wal postgresql-9.6

我正在尝试配置 PostgreSQL 9.6 数据库以限制 pg_xlog 文件夹的大小。我已经阅读了很多关于这个问题或类似问题的主题,但我尝试过的任何内容都没有帮助。

我为我的 Postgresql 9.6 服务实例编写了一个安装脚本。它执行 initdb,注册 Windows 服务,启动它,创建一个空数据库并将转储恢复到数据库中。脚本完成后,数据库结构很好,数据在那里,但 xlog 文件夹已经包含 55 个文件 (880 mb)。

为了减小文件夹的大小,我尝试将 wal_keep_segments 设置为 0 或 1,将 max_wal_size 设置为 200mb,减少 checkpoint_timeout,将 archive_mode 设置为 off 和 archive_command 为空字符串。当我查询 pg_settings 时,我可以看到属性设置正确。

然后我通过 SQL 强制检查点,清空数据库,重新启动 Windows 服务并尝试 pg_archivecleanup,没有任何效果。我的 xlog 文件夹缩小到 50 个文件(800 mb),远不及我在配置中设置的 200 mb 限制。

我不知道还有什么可以尝试的。如果有人能告诉我我做错了什么,我将不胜感激。如果需要更多信息,我很乐意提供。

非常感谢

Lau*_*lbe 5

PostgreSQL 不会主动删除max_wal_size默认值 1GB时已经分配的 WAL 段。

每当 WAL 段已满并需要回收时,减少将逐渐发生。然后 PostgreSQL 将决定是否删除该文件(如果max_wal_size超过)或将其重命名为新的 WAL 段以备将来使用。

如果您不想等待那么久,您可以通过调用该pg_switch_xlog()函数来强制执行多个 WAL 切换,这应该会减少pg_xlog.