PostgreSQL 9.6 wals管理

uklbhaso  于 12个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(101)

我正在尝试理解我的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/,我的archives目录是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不应该被自动删除吗?我可以安全地删除档案吗?

nzk0hqpo

nzk0hqpo1#

max_wal_size不是硬限制。
当超过限制时,PostgreSQL将触发一个检查点,在检查点结束时,它将删除而不是回收旧的WAL段。因此,pg_xlog(新版本中的pg_wal)仍然可以增长,直到下一个检查点。
您的3 GB设置对应于192个WAL段,低于您的wal_keep_segments设置(对应于新版本中的wal_keep_size)。所以PostgreSQL甚至不会开始回收或删除WAL段,直到有3.125 GB的WAL段。
您应该降低wal_keep_segments或增加pg_xlog的磁盘空间。降低wal_keep_segments后,等待检查点或手动运行CHECKPOINT。然后你会看到WAL段的数量减少。

相关问题