DBAtlas · Veritabanı operasyon atlası

Subscription'ı kaldır ve publisher'da sahipsiz logical slot'u temizle

PostgreSQLLogical Replication

Komut

-- Subscriber: publisher erişilemezken DROP SUBSCRIPTION uzak slot'u silemeyip hata verir; önce slot bağını kopar:
ALTER SUBSCRIPTION sub_app DISABLE;
ALTER SUBSCRIPTION sub_app SET (slot_name = NONE);
DROP SUBSCRIPTION sub_app;
-- Publisher: sahipsiz kalan logical slot'ları (tablesync slot'ları pg_<suboid>_sync_<relid>_<sysid> dahil) bul ve sil:
SELECT slot_name, active, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained_wal FROM pg_replication_slots WHERE slot_type = 'logical' AND NOT active;
SELECT pg_drop_replication_slot('sub_app');

Ne yapar?

Subscription'ı uzak slot'a dokunmadan siler (slot_name = NONE); ardından publisher'da artık tüketicisi olmayan logical slot'ları ve kalan tablesync slot'larını bulup kaldırır.

Ne zaman kullanılır?

Publisher erişilemezken subscription kaldırılması gerektiğinde, migrasyon bittikten sonra veya publisher'da active = false bir logical slot WAL biriktirirken.

Dikkat

Sahipsiz logical slot hem WAL'ı hem catalog_xmin'i tutar: disk dolar ve sistem kataloglarında bloat oluşur. Ancak slot'u silmek o subscription'ın kaldığı yerden devamını imkansız kılar; silmeden önce hiçbir subscriber'ın (başka bir sunucudaki dahil) bu slot'u kullanmadığını doğrula. Aktif slot silinemez; önce bağlı walsender'ı sonlandırmak gerekir.

DBAtlas'ta aç →

İlgili