我正在尝试理解我的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不应该被自动删除吗?我可以安全地删除档案吗?
1条答案
按热度按时间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段的数量减少。