【问题标题】:PostgreSQL 9.6 wals managementPostgreSQL 9.6 wals管理
【发布时间】:2017-11-20 08:44:08
【问题描述】:

我正在尝试了解我在 PostgreSQL 环境中的 wals 行为。我的 wal 设置是:

wal_keep_segments = 200
max_wal_size = 3GB
min_wal_size = 80MB
archive_command = 'cp %p /PostgreSQL-wal/9.6/pg_xlog/wal_archives/%f' 
archive_timeout = 10
#checkpoint_flush_after = 256kB
#checkpoint_completion_target = 0.5

我的 wals 目录是 /PostgreSQL-wal/9.6/pg_xlog/,我的档案目录是 PostgreSQL-wal/9.6/pg_xlog/wal_archives。昨晚我的 wals 目录存储已满(存档目录也是因为它们在同一个文件系统上)。

我的 wals 目录中现在有 211 个 wals:

ls -l /PostgreSQL-wal/9.6/pg_xlog/ | wc -l
212

唯一在夜间运行的只是从我们的监控代理中选择的。我猜想 wal 是因为 archive_timeout 非常低而创建的,而它们被删除是因为 wal_keep_segments 高。

今天早上,我将 wal_keep_segments 设置为 100,并将 archive_timeout 设置为 6 分钟。现在,在设置这些设置并启动集群 wals 开关后工作正常,我没有看到创建了很多 wals。但是,不应该自动删除旧的wals吗?我可以安全地删除档案吗?

【问题讨论】:

    标签: postgresql wal


    【解决方案1】:

    max_wal_size 不是硬限制。

    当超出限制时,PostgreSQL 将在下一个检查点删除而不是回收旧的 WAL 段。所以pg_xlog 仍然可以增长到下一个检查点。

    您的 3 GB 设置对应于 192 个 WAL 段,低于您的 wal_keep_segments 设置。所以 PostgreSQL 甚至不会开始回收或删除 WAL 段,直到它们达到 3.125 GB。

    您应该降低这些设置或增加 WAL 存档的磁盘空间。

    您可以等到数据库活动导致切换到新的 WAL 段或调用pg_switch_wal() 函数手动执行此操作。然后等待检查点或手动运行CHECKPOINT。然后你会看到 WAL 段的数量减少了。

    【讨论】:

    • 我将 wal_keep_segments 设置为 100。现在我有 212 wals,这意味着 3.360G。那么,它不应该开始删除一些 wals 吗?关于档案,如果我暂时不打算恢复数据库,删除它们是否安全?
    • 你不应该删除pg_xlog中的文件,它会损坏你的数据库。我已添加说明如何减小 pg_xlog 的大小。
    • 你没听懂我的意思。我说的是档案 - 使用 archive_command 创建的文件。
    • 您始终可以删除 WAL 存档,但即使缺少一个所需的 WAL 存档,您也无法恢复数据库。我会在删除 WAL 档案之前备份数据库。注意有用的实用程序pg_archivecleanup
    猜你喜欢
    • 2012-12-18
    • 1970-01-01
    • 2021-07-29
    • 2018-04-04
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多