限制复制槽可保留的 WAL(max_slot_wal_keep_size)
PostgreSQL复制命令
ALTER SYSTEM SET max_slot_wal_keep_size = '100GB';
SELECT pg_reload_conf();
SELECT slot_name, active, wal_status, pg_size_pretty(safe_wal_size) AS safe_wal_size FROM pg_replication_slots;作用
为复制槽在 pg_wal 中可保留的 WAL 设置上限(默认 -1 = 无限制);超过时 checkpoint 会删除旧 WAL,复制槽变为 wal_status = 'lost'。该参数通过 reload 生效。
适用场景
作为每个使用复制槽的集群的安全措施,防止断开的备库或订阅者填满主库磁盘并使整个系统停止。
注意
该限制以牺牲复制槽所有者为代价保住主库:复制槽为 'lost' 的备库必须重建,逻辑订阅必须重新创建。请选择一个低于 pg_wal 磁盘可用空间、但大于预计最长中断期间所产生 WAL 的值。如果 wal_status 为 'unreserved',复制槽即将丢失;请发出告警。