Postgresql Fillfactor

Ezgi Karahan
2 min readApr 28, 2022

--

Merhaba, bu yazımda Postgresqlde tablo özelindeki fillfactor parametresinden bahsedeceğim.

Fillfactor Nedir?

Postgresql’i başlangıçta kullanılmayan veri sayfalarında fazladan disk alanı bırakmaya yönlendiren tablo başına bir parametredir.

Bir tablonun fillfactor parametresi 10–100 arasında olmalıdır. Defaultu 100dür.

Küçük bir fillfactor belirtildiğinde insert işlemleri tabloda belirtilen yüzde kadar doldurur.Her sayfada kalan alan o sayfadaki satırlara gelen updateler için ayrılmış olur.Bu da update ile güncellenmemiş kopyayı kendisiyle aynı sayfaya yerleştirir, bu da onu farklı sayfaya koymaktan daha verimlidir.

Neden İhtiyaç Duyarız?

Yukarıda da bahsettiğim gibi, çok fazla update yapılan tablolar için fillfactor parametresini azaltarak işlem performansında kazanç sağlayabiliriz.

Updateler kendi veri bloğunda işlem yapacağı için update işlemleri hızlanacaktır.

Normal updatelerin yanı sıra Hot Update olarak bilinen başka bir özel ve hatta daha faydalı güncelleme türünü etkinleştirecektir.

HOT(Heap Only Tuples) Update Nedir?

Her satır updateinde , indexin eski satır yerine yeni satırı göstermesi gereklidir. Bunu işlemi transaction idler ile yapar. Update işlemi de delete ve insert işlemlerinin toplamına eşittir.

Hot update , update işlemi ile oluşan ölü satırların bir kısmını engeller. Hot update ile update etkisi her zaman delete + insert olmayacaktır. Eğer bir satır güncellenirse ve bu güncelleme sadece indexlenmemiş alanları içeriyorsa güncelleme işleminden sonra indexlerin de güncellenmesine gerek kalmaz .

Vacuum , hot update görmüş satırları temizler. Index hala temizdir ve index vacuuma gereksinim duymadığı için bakım gereksinimi de azalır.

Parametre Hangi Aralıkta Olmalı?

Güncellenmeyen tablolar için parametrenin 100(default) olması en iyi seçim olucaktır. Fakat yoğun güncelleme alan tablolar için bu parametre data boyutuna göre değiştirilmelidir.

Çünkü sayfalarda buffer bırakması tablonun boyutunu arttıracaktır.

Parametre burada herhangi bir sayı ile risk oluşturmaz , fillfactordaki değişiklik hemen değil, daha uzun bir süre boyunca gözlemlenebilir.Yapılan hot update ve tablonun boyutunun büyümesi ile etkisini farkedebiliriz.

Örnek bir tablo üzerinde fillfactor parametresi değişikliği için aşağıdaki sorguyu kullanabilirsiniz.

Bu sorguda , PostgreSQL’e ekleme gerçekleştirirken e1 tablosundaki her sayfanın yalnızca %70'ini doldurmasını ve böylece %30'unun sayfa içi (HOT) güncellemeler tarafından kullanılmak üzere bırakılmasını söyler.

Yapılan hot update sorgularını görmek için;

Sevgiler 💛

Referans

PostgreSQL 14 Administration Cookbook

--

--