MVCC ve Vacuum - Veritabanı Eski Satırları Neden Saklıyor?
MVCC'nin snapshot isolation sağlarken eski row version'larını neden tuttuğunu ve vacuum ihtiyacını açıklıyoruz.
Hakan E. · · Akademi

MVCC, okuyucuların ve yazıcıların birbirini mümkün olduğunca az bloke etmesini sağlamak için aynı satırın birden fazla versiyonunu tutabilir. Transaction başladığında belirli bir snapshot görür. Daha sonra başka transaction satırı değiştirse bile eski versiyon snapshot için bir süre yaşamaya devam eder. Böylece SELECT işlemi herkesin önüne sandalye çekip yazma işlemini durdurmaz.
Fakat eski tuple'lar sonsuza kadar kalırsa tablo giderek şişer. Vacuum mekanizması artık hiçbir aktif transaction tarafından görünemeyecek dead tuple'ları temizlenebilir hale getirir ve alanın yeniden kullanılmasını sağlar. Uzun süren transaction'lar bu cleanup sürecini geciktirebilir. Bir adet unutulmuş session bütün tablonun geçmişe duygusal bağ kurmasına neden olabilir.
İleri seviyede transaction ID wraparound, visibility map, freeze ve autovacuum threshold ayarları önem kazanır. Vacuum yalnızca disk temizliği değildir, veritabanının transaction görünürlüğünü sürdürülebilir tutan temel mekanizmalardan biridir.