MVCC (Multi-Version Concurrency Control), veritabanı işlemlerinin birbirini kilitlemeden eş zamanlı çalışmasını sağlayan temel mekanizmadır. mvcc görünürlük kuralları, hangi işlemin hangi veri sürümünü görebileceğini kesin biçimde tanımlar; bu kurallar yanlış anlaşıldığında phantom read, non-repeatable read veya snapshot izolasyon ihlalleri ortaya çıkar. MVCC'nin temel fikri şudur: bir satır güncellenmediğinde yerinde değiştirilmez, yeni bir sürüm eklenir. Her sürüm iki zaman damgasıyla işaretlenir: xmin (oluşturan işlem ID'si) ve xmax (silen veya değiştiren işlem ID'si). PostgreSQL'de bu bilgiler her tuple'ın system column'ları olarak saklanır. Görünürlük kuralı şu koşulların tümü sağlandığında bir tuple görünür kabul edilir: 1. xmin commit edilmiş olmalı (oluşturan işlem tamamlanmış) 2. xmin değeri snapshot'ın xmax'ından (aktif işlemlerin en büyük ID'si) küçük olmalı 3. xmin değeri snapshot'ın aktif işlem listesinde olmamalı 4. xmax ya geçersiz olmalı ya da snapshot'tan sonra başlamış bir işleme ait olmalı PostgreSQL'in snapshot mekanizması `GetSnapshotData()` çağrısıyla başlar. Bu anlık görüntü üç değer içerir: xmin (snapshot alındığında commit edilmiş en küçük aktif işlem ID'si), xmax (henüz atanmamış sonraki ID) ve xip (anlık görüntü sırasında aktif olan işlem ID listesi). mvcc görünürlük hesaplaması, her tuple kontrolünde bu üç değere karşı yapılır. İzolasyon seviyeleri MVCC görünürlük semantiğini farklı biçimde kullanır: **Read Committed:** Her sorgu yeni bir snapshot alır. Bu yüzden aynı işlem içinde iki SELECT farklı sonuç dönebilir (non-repeatable read). **Repeatable Read / Snapshot Isolation:** Snapshot işlemin başında bir kez alınır ve tüm süre sabit tutulur. Concurrent write-write çatışmaları write skew sorununu doğurabilir; PostgreSQL bu noktada Serializable Snapshot Isolation (SSI) ile tam serileştirilebilirlik sağlar. MVCC'nin bellek yönetimi açısından maliyeti, eski sürümlerin (dead tuples) birikimesidir. PostgreSQL'de VACUUM bu sürümleri temizler; uzun süre çalışan işlemler VACUUM'un ilerlemesini engeller çünkü snapshot hâlâ eski xmin değerini tutar. Bu durum `pg_stat_activity` üzerinden izlenebilir: ```sql SELECT pid, xact_start, state, query FROM pg_stat_activity WHERE state != 'idle' ORDER BY xact_start; ``` MVCC overhead'ini azaltmak için HOT (Heap Only Tuple) güncellemesi mekanizması, dizin güncellemesi gerekmediğinde aynı heap page içinde zincir oluşturur. Bu, VACUUM maliyetini kısmen azaltır. Görünürlük haritası (visibility map) ise VACUUM'un hangi sayfaların tamamen temiz olduğunu takip etmesine olanak tanır; Index Only Scan'in çalışabilmesi de bu haritanın güncel olmasına bağlıdır.