10/21/2005

SQL Server - Indexlerde FillFactor Kullanimi

Sql Server verilerimiz page(sayfa) adı verilen 8KB lik bölümler halinde harddiskimizde yer edinir. Page density(sayfa yoğunluğu), Fill Factor ile doğru orantilidir.

Saniyede 100 input/output işlemi yapabilen bir disk üzerinde çalıştığımızı farzedelim.

Veritabanımızda 100,000 satır içeren bir tablomuz bulunsun. Eğer database sayfalarımız(page'ler) çok boş olduğu takdirde, örneğin 1 sayfada 1 değer bulunsun;

1 değer/sayfa ==> 100000 sayfamız bulunmakta
100000/ 100 (io/saniye) = 1000 saniye (Bize query sonuçlarlarının geri dönerken harcıyacağı zaman)

Gördüğümüz gibi, sayfaların çok boş olması veritabanı performansı açısından çok kötü sonuçlar doğurabiliyor. Peki FillFactor'u(sayfa doluluğunu) nasıl ve neye göre ayarlamalıyız?

Fillfactor, index yaratım esnasında SQL Server 2000 database sayfalarınızın ne kadar dolu olmasını istediğinizi belirttiğiniz bölümdür. Sadece ve sadece index yaratım esnasında belirtilebilir. Geçerli değerler 1 ile 100 % arasındadır.

Fill Factor değerini seçerken SQL Server tablonuza ne kadar yeni değer girileceğini göz önünde bulundurmalısınız. Eğer tablonuz sadece read only bir tablo olacaksa, fill factoru 100 e olabildiğince yakın yapın. Eğer tablonuza yüklü miktarda yeni veri girişi yapılacaksa, bu değeri daha düşük tutmanız mantıklı olacaktir. Aksi takdirde database performansını arttırmaya çalışayım derken sayfa bölünmelerine sebep olarak büyük performans düşüşüne sebep olabilirsiniz.

Fill Factor Kullanımı
CREATE CLUSTERED INDEX urunler_inx
ON urunler(urunId, kategoriId)
WITH FILLFACTOR = 50