Replication slot'ların tuttuğu WAL'ı izle ve terk edilmiş slot'u güvenle sil
PostgreSQLReplikasyonKomut
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;
-- Güvenli silme: yalnızca aktif değilse siler (aktifse 0 satır döner)
SELECT pg_drop_replication_slot(slot_name) FROM pg_replication_slots WHERE slot_name = '<slot>' AND NOT active;Ne yapar?
Her slot'un primary'de ne kadar WAL tutturduğunu, wal_status (reserved/extended/unreserved/lost) ve max_slot_wal_keep_size'a göre kalan güvenli payı (safe_wal_size), ayrıca VACUUM'u engelleyen xmin/catalog_xmin değerlerini gösterir; ikinci sorgu slot'u yalnızca kullanılmıyorsa siler.
Ne zaman kullanılır?
pg_wal dizini büyüdüğünde, disk alarmında ve düzenli izlemede; standby veya subscriber kalıcı olarak kaldırıldıktan sonra slot temizliğinde.
Dikkat
Aktif olmayan bir slot WAL'ı sınırsız biriktirir ve diski doldurarak primary'yi durdurabilir; xmin/catalog_xmin tutan slot ayrıca dead tuple temizliğini engeller ve bloat/wraparound riski yaratır. Slot'u silmek, ona bağlı standby/subscriber'ın kaldığı yerden devam etmesini imkansız kılar (yeniden kurulum gerekir); silmeden önce sahibini doğrula. Primary'de çalıştır (standby'da pg_current_wal_lsn() hata verir).