Postgresql MVCC Nedir?

Postgresql MVCC Nedir?,MVCC açılımı Multi Version Concurrent Control şeklindedir. MVCC eş zamanlı olarak okuma yazma işlemlerinin sorunsuz yapılabilmesi için geliştirilmiştir.   MVCC postgresql in  eş zamanlı okuma ve yazma yapabilmesi için kullandığı veritabanı modelidir.
Bu model  sayesinde read işlemleri write işlemlerini ,write işlemleri read işlemlerini locklamamaktadır.  Tamamen lock yok demek kesinlikle imkansızdır. Aynı anda iki transaction başlattıysanız ilk sırayı alan diğerini beklemek zorunda kalacaktır ya da tablo değişikliklerinde  üzerinde değişiklik yapmak istediğiniz de sorgularınız locklanacak ve sorgularınız ilgili işlemler yapılana kadar cevap dönmeyecektir.

PostgreSQL update işlemlerinde değiştirilmek istenen veriyi önceki verilerin üzerine yazmak yerine  değiştirilmek istenen datayı silindi olarak işaretleyerek görünürlüğünü(visibilty)  kapatır( pg_visibility ile görebilirsiniz). Bu şekilde versiyonlamaları yapar ve her gelen transactionın görebileceği dataları bu sayede gösterir. PostgreSQL de transcationlar genel adı  TID olarak adlandırılır ve 32  bit olarak tutulmasından dolayı transactionlar 4 milyar farklı değer üretebilmektedir. Bu değer limitine erişildiği zaman postgresql kendini sıfırlar ve tekrardan 0 dan başlayarak transcaction üretmeye başlar. Transaction sınırına ulaşan ve yeniden ID almaya çalışan postgresql sıfırlanacağından dolayı görünürlüğü kapatılarak versiyonlanmış verileri kaybedecektir.

Yukarıda bahsedilen versiyonlamalar tabloların veri yapısında depolanır ve bunlar iki sutün olarak sıralanmaktadır. Bunlar.

 

Xmin : Insert Transaction ID bilgisi (insert yapılan işlemlerde)

Xmax: Delete Transaction ID bilgisi (delete yapılan işlemler)

 

 

PostgreSQL diğer veritabanlarına göre locklama konusunda diğer veritabanlarına göre biraz daha insaflıdır. Bunun sebebi MVCC yapısını kullanmasından kaynaklanmaktadır. Bunun avantajı hız olsa da dezavantajı bloat alanlardır. Bloat alanları kısaca açıklayacak olursak update,delete işlemlerinde postgresql veriyi silmez sadece silindi olarak işaretler bunlar vacuum ile temizlenir.

Temizlenmediği durumda performans kayıplarına ve fazladan disk maliyetlerine sebebiyet vermektedir. Buna çözüm olarak  çok fazla update,delete işlemleri  yapıldığında bunlardan sonra oluşan bloat dataları vacuum ile temizlemek  gerekmektedir.  Sürekli manuel olarak vacuum çalıştırmak  zor olacağından dolayı postgresql in bize sunduğu autovacuum özelliğini kullanabilirsiniz.

 

AutoVacuum ve Vacuum ile ilgili daha detaylı bilgiler için isimli yazılarıma bakabilirsiniz.

 

VACUUM Nedir?

AutoVacuum Nedir? AutoVacuum Parametreleri Nelerdir?

Loading