PostgreSQL hakkında en nefret ettiğimiz şey
- PostgreSQL, son 5 yılda internette en çok sevilen DBMS haline geldi. Bunun nedeni güvenilirliği, işlevselliği, ölçeklenebilirliği ve çoğu operasyonel iş yükü için uygun olmasıdır.
- Ancak PostgreSQL'in çok sürümlü eşzamanlılık denetimi (MVCC) uygulama biçimi, diğer ilişkisel DBMS'lere kıyasla en kötü olarak değerlendiriliyor.
Çok sürümlü eşzamanlılık denetimi nedir?
- MVCC'nin amacı, birden fazla sorgunun veritabanını aynı anda okuyup yazabilmesini sağlayarak birbirlerini engellememesidir.
- DBMS, mevcut satırların üzerine yazmak yerine birden fazla sürümü korur ve sorgular isteği karşılamak için uygun sürümü seçer.
- Bu yaklaşım, açık kayıt kilitlerine ihtiyaç bırakmadan sorguların veritabanının bir anlık görüntüsünü gözlemlemesini sağlar.
PostgreSQL'in çok sürümlü eşzamanlılık denetimi
- PostgreSQL, mevcut bir satırı güncellerken değişiklikleri uygulamak için yeni bir sürüm oluşturan append-only sürüm depolama yöntemini kullanır.
- Bu yöntem çeşitli karmaşık sorunlara yol açar.
Çoklu sürüm depolama
- PostgreSQL, tüm satır sürümlerini aynı depolama alanında saklar.
- Güncelleme sırasında yeni bir sürüm yuvası ayırır, mevcut sürümü kopyalar ve değişiklikleri uygular.
- PostgreSQL, sürümler arasındaki ilişkiyi kaydetmek için version chain kullanır.
Sürüm temizleme
- PostgreSQL, eski sürümleri kaldırmak için vacuum prosedürünü kullanır.
- Autovacuum düzenli olarak çalışır, süresi dolmuş sürümleri kaldırır ve alanı yeniden kullanır.
PostgreSQL'in MVCC'si neden en kötüsü?
- PostgreSQL'in MVCC uygulaması 1980'lerin tasarımına dayanır ve modern log-structured sistem kalıplarıyla uyuşmaz.
- PostgreSQL MVCC'sinde ortaya çıkan dört temel sorun açıklanıyor.
Sorun 1: Sürüm kopyalama
- PostgreSQL, tüm sütunları yeni sürüme kopyalayarak veri tekrarını ve depolama gereksinimini artırır.
- MySQL ve Oracle, delta saklayarak bu sorundan kaçınır.
Sorun 2: Tablo şişmesi
- PostgreSQL'de süresi dolmuş sürümler yer kaplar; autovacuum bunları temizleyemezse veritabanı büyümeye devam eder.
- Bu da sorgu performansını düşürür.
Sorun 3: İkincil indeks bakımı
- PostgreSQL, her güncellemede tüm indeksleri güncellemek zorundadır.
- Bu da sorgu performansını düşürür.
Sorun 4: Vacuum yönetimi
- PostgreSQL'in performansı büyük ölçüde autovacuum'un ne kadar etkili çalıştığına bağlıdır.
- Autovacuum düzgün çalışmazsa performans sorunları ortaya çıkar.
GN⁺ özeti
- PostgreSQL hâlâ çok sevilen bir DBMS olsa da MVCC uygulama biçimi modern değil.
- PostgreSQL'in MVCC sorunlarını çözmek için çok zaman ve emek gerekir.
- PostgreSQL'in autovacuum ayarlarını optimize ederek performans iyileştirilebilir.
- PostgreSQL'in MVCC sorunlarına alternatif olarak MySQL ve Oracle değerlendirilebilir.
1 yorum
Hacker News görüşleri
OrioleDB, sorunu yeni bir depolama motoruyla çözmeye çalıştı
COPY FROMkullanılarak bu aşılabiliyorPostgreSQL’in tasarımı her açıdan kötü değil
git, diff saklamıyor; PostgreSQL’e benzer şekilde nesnenin tamamını saklıyorOracle ve MySQL’in MVCC uygulaması, yeni sürümün fiziksel adresini saklamıyor
MySQL’de tek bir satırı güncellerken
SELECT id WHERE something; UPDATE what WHERE id=idçok daha hızlı2010’larda MongoDB, dayanıksız yazmalar nedeniyle "webscale" olarak algılanıyordu
pg_repackhakkındaki açıklamaya katılmıyorumVACUUM FULLağırdır, ancak repack daha hızlı ve daha hafif bir alternatiftirPostgreSQL’in popülerlik kazanma nedenleri şunlardı
PostgreSQL’in tüm yeni satır-tuple sürümlerini saklamasının varsayılan depolama motorunun bir özelliği olup olmadığına dair bir soru var
Makale iyi yazılmıştı; okunması ve anlaşılması kolaydı