SELECT slot_name, active FROM pg_replication_slots;
SELECT pg_current_wal_lsn();
SELECT pg_drop_replication_slot('old_sub');

pg_wal 目录两天涨到 80G,复制槽列表里有一条 active 为 false,restart_lsn 停在三天前,磁盘快满了。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:逻辑复制或备库下线后槽没删,PG 会一直保留这个槽还需要的 WAL 不放手,堆到磁盘满,连 checkpoint 都推不动。

「PG 复制槽堆积」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

处理上按这个顺序:先确认这个槽对应的备库或订阅是不是还要用;确认不要了就先停掉消费端,再把这个槽删掉;还要用就修好消费端让它追上来,观察两天再说。

确认没问题再收工,pg_wal 目录回落到正常大小,槽列表里不再有长期不动的记录。

作者 9823189