DBAtlas · Atlas de operações de banco de dados

Monitorar o WAL retido por replication slots e remover com segurança um slot abandonado

PostgreSQLReplicação

Comando

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;

O que faz

Mostra quanto WAL cada slot retém no primário, o wal_status (reserved/extended/unreserved/lost), a margem segura restante sob max_slot_wal_keep_size (safe_wal_size) e os valores xmin/catalog_xmin que seguram o VACUUM; a segunda consulta remove o slot apenas se ele não estiver em uso.

Quando usar

Quando o diretório pg_wal cresce, em um alerta de disco e no monitoramento de rotina; para limpeza de slots após um standby ou subscriber ter sido removido definitivamente.

Atenção

Um slot inativo retém WAL sem limite e pode encher o disco e parar o primário; um slot que segura xmin/catalog_xmin também bloqueia a limpeza de dead tuples e cria risco de bloat/wraparound. Remover um slot impede que seu standby/subscriber continue de onde parou (é preciso reconstruir); verifique o dono antes de remover. Execute no primário (pg_current_wal_lsn() falha em um standby).

Abrir no DBAtlas →

Relacionados