MVCC (Multi Version Concurrency Control)
Çoklu Sürüm Eşzamanlılık Kontrolü

Veritabanları milyarlarca satır kaydın olduğu ve çoklu oturumlardan hem okuma hem
yazma işlemlerinin yapıldığı sistemlerdir. Aynı satıra hem güncelleme hem de okuma
işlemi eş zamanlı gelebilmektedir. Postgresql eş zamanlı erişimlerde tutarlılığı sağlamak
için 32 bit uzunluğundaki transaction ID’ler ile MVCC metodu kullanılır.
Örnek ;
auto commit off iken (\set AUTOCOMMIT off)
- oturumda (session) ekip tablosuna 1 satır insert ediliyor. Ama commit edilmiyor.
- ve 3. oturumlarda ekip tablosu sorgulandığında insert edilen satır görülememektedir.
- oturumda ne zaman commit edilirse diğer oturumlar da yeni kayıt görülmeye başlar.
Update işleminde, üzerine yazmak yerine, satırın eski halini saklar.
Yeni hali de yeni bir kayıt olarak oluşturulur. Commit edilene kadar, diğer oturumlar satırın eski halini görürler (read consistency).
commit verildikten sonra güncel hali diğer sessionlar tarafından sorgulanabilir. Ve eski
hali silinebilir (dead tuple/row) olarak işaretlenir. Dead row’ların temizliği de vacuum
prosesi tarafından yapılır (Detay bölüm 8’de).
MVCC sayesinde okuma ve yazma işlemleri birbirlerini etkilemezler.
# Session A # 4. satır insert edilir ama commit edilmez. erp_db=# INSERT INTO ekip VALUES (4, ‘Ahmed Kul’); erp_db=*# SELECT xmin, xmax, * FROM ekip; xmin | xmax | id | ad -------+------+----+-------------- 45966 | 0 | 1 | Ahmed Kul 45967 | 0 | 2 | Ömer Muhacir 45992 | 0 | 3 | Ahmed Kul 45993 | 0 | 4 | Ahmed Kul (4 rows) # Session B erp_db=# SELECT xmin, xmax, * FROM ekip; xmin | xmax | id | ad -------+------+----+-------------- 45966 | 0 | 1 | Ahmed Kul 45967 | 0 | 2 | Ömer Muhacir 45992 | 0 | 3 | Ahmed Kul (3 rows)
Versiyonlamaları tablolardan sorgulamak mümkündür.
(xmin insert leri , xmax delete işlemlerini gösterir.)
Oturum A’ da (4, ‘Ahmed Kul’) satırı insert edilir, commit edilmez.
Oturum A’ da yeni kayıt ve transaction_id‘si görülürken,
Oturum B’ de bu kayıt görülemez. Ancak commit verildikten sonra görülebilir.
