所以我继承了这个数据库。一开始,pg_wal
.
然后,几周后,我计算了一下SELECT COUNT(*) FROM pg_ls_dir('pg_wal') WHERE pg_ls_dir ~ '^[0-9A-F]{24}';
,结果是:8182个文件。
查看目录上文件的时间戳pg_wal
,我看到正在创建一些新文件,但文件数量保持不变。我怀疑发生了轮换。
然后我观察pg_stat_archiver
:archived_count = **2**; failed_count = 0
大约 3 小时后,我再次数数SELECT COUNT(*) FROM pg_ls_dir('pg_wal') WHERE pg_ls_dir ~ '^[0-9A-F]{24}';
结果:8183。显然会创建一个新文件。
然后我做pg_stat_archiver
:archived_count = **3**; failed_count = 0
archived_count last_archived_wal last_archived_time failed_count last_failed_wal last_failed_time
3 000000010000009B00000083 22-09-13 13:14:20. 0
stats_reset
2022-09-13 08:14:19
这个数据库很低,一点也不忙。有时没有人访问它。但是有逻辑复制,每天一次将大约 300 条记录同步到另一台服务器。
这是我的设置:
max_wal_size : 1024 Mb
min_wal_size : 2048 Mb
wal_keep_segment : 0
wal_rotation : ON
wal_level : logical
wal_compression : ON
archive_on : ON
archive_mode : test ! -f /Archive/%f && cp %p /Archive/%f
archive_timeout : 900
问题 :
- 为什么第二个计数
pg_wal
增加?我预计它会减少,因为存档数量会增加。 - 如果
wal_keep_segment = 0
,为什么 WAL 的数量pg_wal
从不为 0?在文档中,它说:
如果 wal_keep_segments 为零(默认值),系统不会为备用目的保留任何额外的段,
- 为什么在低谷期间 WAL 的最小数量不=
min_wal_size
+wal_keep_segment
?
请赐教。
太感谢了
首先,
CHECKPOINT
在主节点上运行 a 并查看是否删除了一些 WAL 段(检查点无论如何都会定期发生)。可能,这不会摆脱 WAL 段。然后,检查 PostgreSQL 保留 WAL 的已知原因:
wal_keep_size
(或wal_keep_segments
旧版本):您已经检查过存档问题(查看
pg_stat_archiver
):您也已经这样做了过时的复制槽:
查找插槽在哪里
active
并且FALSE
LSN 是旧的。