wal_keep_segments:用于指定pg_wal目录中保存的过去的wal文件(wal 段)的最小数量,以防备用服务器在进行流复制时需要。

(参数解释见:https://postgresqlco.nf/doc/zh/param/wal_keep_segments/)


每个wal文件通常为16兆字节。如果连接到发送服务器的备用服务器滞后超过wal_keep_segment个文件,发送服务器可能会删除备用服务器仍然需要的WAL段,在这种情况下流复制连接将被终止。因此,下游连接最终也会失败。(但是,如果使用了WAL归档,备用服务器可以通过从归档中获取段来恢复。)



前面说到,wal_keep_segments这只设置了pg_wal中保留的最小数目;  WHY?


因为系统可能需要为WAL归档或者checkpoint(wal_keep_size)保留更多的段。如果wal_keep_segments为0(默认值),系统不会备用服务器流复制保留任何额外的段,所以备用服务器可用的旧WAL段的数量取决于前一个检查点的位置和WAL归档状态。



注意:postgresql 13.0中,将wal_keep_segments重命名为wal_keep_size,让用户指定WAL大小,而不是WAL文件个数。在PG内核不断演进的过程中,PostgreSQL开发者在逐渐弱化wal段数量(wal文件个数)的概念,并强调wal的size,之前就有checkpoint_segments改变为max_wal_size的先例。

https://github.com/postgres/postgres/commit/c3fe108c025e4a080315562d4c15ecbe3f00405e

https://mp.weixin.qq.com/s/yztFMreNTLwktw9QZ6KDKA