Ana Sayfa

PostgreSQL'de Rastgele I/O Maliyetinin Gerçek Yüzü

1 dk okuma

PostgreSQL'deki random_page_cost parametresi, yaklaşık 25 yıl önce varsayılan olarak 4.0 değeriyle tanıtıldı. Ancak o zamandan bu yana depolama teknolojileri, özellikle flash depolama birimleri, büyük ölçüde gelişti. Bu durum, varsayılan maliyet değerinin günümüz gerçekliğini yansıtmayabileceği ve rastgele I/O işlemlerinin maliyetinin daha düşük olabileceği düşüncesini ortaya çıkardı. Bazı uzmanlar, bu değeri seq_page_cost ile aynı seviyeye, yani 1.0'a çekmeyi bile önermektedir. Makale, bu sezginin doğruluğunu deneysel olarak sorguluyor.

Makale, rastgele ve sıralı sayfa okumalarının maliyetini karşılaştırmak için bir deney tasarlıyor. Deneyde, rastgele bir sütun ve dizin içeren büyük bir tablo oluşturuluyor. Ardından, tablo üzerinde sıralı bir tarama (sequential scan) ve dizin taraması (index scan) gerçekleştiriliyor. Dizin taraması, neredeyse tamamen rastgele I/O'yu simüle ediyor. Önbellekleme etkilerini en aza indirmek için shared_buffers ve effective_cache_size gibi parametreler sabit tutuluyor ve doğrudan I/O etkinleştiriliyor. Bu sayede sayfa isabetleri ve kaçırmaları daha doğru bir şekilde tahmin edilebiliyor.

Yapılan deneyler sonucunda, sıralı bir sayfa okumasının yaklaşık 1.559 mikrosaniye sürdüğü, rastgele bir sayfa okumasının ise yaklaşık 39.298 mikrosaniye sürdüğü hesaplanıyor. Bu sonuçlar, rastgele I/O'nun sıralı I/O'dan yaklaşık 25 kat daha yavaş olduğunu gösteriyor. Bu bulgu, flash depolama sistemlerinde bile rastgele I/O'nun hala önemli bir maliyeti olduğunu ve random_page_cost değerini 1.0'a düşürmenin gerçekçi olmayabileceğini ortaya koyuyor. Makale, maliyetin doğrudan zamanla eşleşmediğini belirtse de, bu basit deneyin önemli bir fikir verdiğini vurguluyor.

İçgörü

PostgreSQL'de `random_page_cost` parametresinin varsayılan değeri, modern depolama teknolojileriyle bile rastgele I/O'nun sıralı I/O'dan hala önemli ölçüde daha pahalı olduğunu gösteren deneysel veriler ışığında yeniden değerlendirilmelidir.

Kaynak