DBAtlas · 数据库运维图谱

监控复制槽保留的 WAL 并安全删除被遗弃的复制槽

PostgreSQL复制

命令

SELECT slot_name, slot_type, database, active, active_pid, wal_status,
       pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained_wal,
       pg_size_pretty(safe_wal_size) AS safe_wal_size,
       xmin, catalog_xmin
FROM pg_replication_slots
ORDER BY pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) DESC NULLS LAST;
-- Safe drop: drops only if not active (returns 0 rows if active)
SELECT pg_drop_replication_slot(slot_name) FROM pg_replication_slots WHERE slot_name = '<slot>' AND NOT active;

作用

显示每个复制槽在主库上保留了多少 WAL、wal_status(reserved/extended/unreserved/lost)、max_slot_wal_keep_size 下剩余的安全余量(safe_wal_size),以及阻碍 VACUUM 的 xmin/catalog_xmin 值;第二个查询只在复制槽未被使用时删除它。

适用场景

当 pg_wal 目录增长、出现磁盘告警以及例行监控时;在备库或订阅者被永久移除后清理复制槽。

注意

非活动的复制槽会无限制地保留 WAL,可能填满磁盘并使主库停止;持有 xmin/catalog_xmin 的复制槽还会阻止死元组清理,造成膨胀/回卷风险。删除复制槽后,其备库/订阅者将无法从中断处继续(需要重建);删除前请核实其所有者。请在主库上运行(pg_current_wal_lsn() 在备库上会失败)。

在 DBAtlas 中打开 →

相关内容