DBAtlas · Veritabanı operasyon atlası

VACUUM'un dead tuple temizlemesini engelleyen xmin horizon tutucularını bul

PostgreSQLBakım

Komut

SELECT 'session' AS source, pid::text AS id, usename::text AS owner, state AS detail,
       age(backend_xmin) AS xmin_age
FROM pg_stat_activity
WHERE backend_xmin IS NOT NULL AND pid <> pg_backend_pid()
UNION ALL
SELECT 'prepared_xact', gid, owner::text, prepared::text, age(transaction)
FROM pg_prepared_xacts
UNION ALL
SELECT 'replication_slot', slot_name::text, slot_type, active::text,
       greatest(age(xmin), age(catalog_xmin))
FROM pg_replication_slots
WHERE xmin IS NOT NULL OR catalog_xmin IS NOT NULL
UNION ALL
SELECT 'standby_feedback', application_name, usename::text, state, age(backend_xmin)
FROM pg_stat_replication
WHERE backend_xmin IS NOT NULL
ORDER BY xmin_age DESC NULLS LAST;

Ne yapar?

Dead tuple temizliğini engelleyebilecek dört kaynağı (snapshot tutan oturumlar, prepared transaction'lar, replication slot'lar, hot_standby_feedback gönderen standby'lar) tek listede xmin yaşına göre sıralar.

Ne zaman kullanılır?

VACUUM VERBOSE 'dead row versions cannot be removed yet' raporladığında, bloat sürekli artıyor ve XID yaşı düşmüyorsa.

Dikkat

En yaşlı xmin temizleme sınırını belirler; replication slot'lar ve standby feedback tüm veritabanlarını etkiler. Prepared transaction'lar restart sonrasında da kalır; sahibini doğrulayıp COMMIT PREPARED / ROLLBACK PREPARED '<gid>' ile kapat. Kullanılmayan bir slot'u silmek downstream'i (standby, CDC) bozar; önce sahibini doğrula. Standby'da çalıştırılırsa yalnızca o standby'daki oturumları gösterir.

DBAtlas'ta aç →

İlgili