DBAtlas · Veritabanı operasyon atlası

Transaction ID wraparound riskini ölç (veritabanı ve tablo bazında XID yaşı)

PostgreSQLBakım

Komut

-- Veritabanı bazında: autovacuum_freeze_max_age'e ve ~2^31 sınırına uzaklık
SELECT datname,
       age(datfrozenxid) AS xid_age,
       mxid_age(datminmxid) AS mxid_age,
       round(100.0 * age(datfrozenxid) / current_setting('autovacuum_freeze_max_age')::int, 1) AS pct_of_freeze_max_age,
       round(100.0 * age(datfrozenxid) / 2147483647, 1) AS pct_of_wraparound
FROM pg_database
ORDER BY age(datfrozenxid) DESC;

-- Bağlı olunan veritabanında en yaşlı tablolar (TOAST dahil)
SELECT c.oid::regclass AS table_name,
       greatest(age(c.relfrozenxid), age(t.relfrozenxid)) AS xid_age,
       mxid_age(c.relminmxid) AS mxid_age,
       pg_size_pretty(pg_total_relation_size(c.oid)) AS total_size,
       s.last_autovacuum,
       s.last_vacuum
FROM pg_class c
LEFT JOIN pg_class t ON t.oid = c.reltoastrelid
LEFT JOIN pg_stat_all_tables s ON s.relid = c.oid
WHERE c.relkind IN ('r', 'm')
ORDER BY 2 DESC
LIMIT 20;

Ne yapar?

Her veritabanının en eski unfrozen XID ve multixact yaşını, autovacuum_freeze_max_age eşiğine ve wraparound sınırına oranla; bağlı olunan veritabanında ise TOAST dahil en yaşlı tabloları boyut ve son vacuum zamanıyla gösterir.

Ne zaman kullanılır?

Rutin izlemede (tipik alarm eşiği pct_of_wraparound %50 uyarı / %75 kritik), loglarda 'must be vacuumed within N transactions' uyarısı görüldüğünde ve freeze çalışmasını önceliklendirmek için.

Dikkat

pct_of_freeze_max_age 100'ü geçen tablolar için autovacuum zorunlu (anti-wraparound) vacuum başlatır; bu vacuum yoğun I/O üretir ve sonlandırılsa da yeniden başlar. Yaş düşmüyorsa sebep neredeyse her zaman xmin horizon'u tutan bir şeydir (uzun transaction, prepared transaction, replication slot, hot_standby_feedback); önce onu çöz, aksi halde VACUUM FREEZE de yaşı düşüremez. Sınıra yaklaşıldığında sunucu önce uyarı verir, son birkaç milyon XID kala yeni XID atamayı (yazmayı) reddeder. Hedefli freeze için: VACUUM (FREEZE, VERBOSE) <tablo>;

DBAtlas'ta aç →

İlgili