4 puan yazan GN⁺ 2024-10-21 | 1 yorum | WhatsApp'ta paylaş

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

 
GN⁺ 2024-10-21
Hacker News görüşleri
  • OrioleDB, sorunu yeni bir depolama motoruyla çözmeye çalıştı

    • Esas olarak INSERT işlemleri yapılıyorsa ek alana ihtiyaç duyulmuyor
    • Bir transaction içindeki ifade sayısında sınır var, ancak COPY FROM kullanılarak bu aşılabiliyor
    • DBA açısından rollback/undo alanını ayrıca yönetmek gerekmiyor
  • PostgreSQL’in tasarımı her açıdan kötü değil

    • MySQL ve Oracle, yeni sürüm ile mevcut sürüm arasındaki sıkıştırılmış deltayı saklıyor
    • git, diff saklamıyor; PostgreSQL’e benzer şekilde nesnenin tamamını saklıyor
  • Oracle ve MySQL’in MVCC uygulaması, yeni sürümün fiziksel adresini saklamıyor

    • Bunun yerine mantıksal bir tanımlayıcı saklanıyor ve DBMS güncel sürümün fiziksel adresini buluyor
    • Bu yüzden ikincil indeks okumaları yavaşlayabiliyor, ancak başka avantajlar sayesinde ek yük azalıyor
  • MySQL’de tek bir satırı güncellerken SELECT id WHERE something; UPDATE what WHERE id=id çok daha hızlı

    • Genel işlerde bu yaklaşım kullanılmıyor ve bu da tek seferlik DML’i yavaşlatıyor
  • 2010’larda MongoDB, dayanıksız yazmalar nedeniyle "webscale" olarak algılanıyordu

    • Bu, pazarlamanın sonucuydu
  • pg_repack hakkındaki açıklamaya katılmıyorum

    • VACUUM FULL ağırdır, ancak repack daha hızlı ve daha hafif bir alternatiftir
  • PostgreSQL’in popülerlik kazanma nedenleri şunlardı

    • veri güvenliği, ACID, Oracle’a benzerlik, MVCC, SQL standardına uyum, Postgres ekibi, topluluk, veri tipleri, yüksek performans, BSD esnekliği
    • PostgreSQL sürekli gelişiyor ve topluluk burada büyük rol oynuyor
  • 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ı

    • vacuum ile ilgili sorunları anlamaya yardımcı oldu ve diyagramlar da iyiydi