Dizinlerdeki verilerin dolgu faktörüne göre davranışı


14

Varsayılan doldurma faktörünün 20 olduğu bir veritabanınız olduğunu varsayalım. Veri eklendiğinde, yalnızca% 20'ye kadar doldurulmuş sayfalar mı oluşturuyor?

Anladığım kadarıyla, veri eklendiğinde sayfalardaki verilerin yaklaşık% 20'si olacaktır. Ancak veriler güncellendiğinde, dizinin% 20'sinden fazlasına genişleyecek, doldurulacak ve bir sayfa bölünmesi oluşturulacak, değil mi?

Yanıtlar:


16

Doldurma faktörü yalnızca bir dizin oluşturulduğunda veya yeniden oluşturulduğunda devreye girer. Bu işlemler sırasında doldurulan yaprak seviyesi sayfalarının endeksi için tüketim miktarıdır. ( etkilenen sayfa düzeyleri hakkında daha fazla açıklama için aşağıdaki nota bakın )

Veri ( INSERT, UPDATEve / veya DELETE) için bir DML komutu olduğunda, ilgili etkilenen dizinlere olur. Başka bir deyişle,% 20 dolu bir sayfanız varsa ve bu sayfaya veri eklerseniz, sayfa verilerin% 20'sinden fazlasını içerir (diyelim ki% 35, örneğin sadece uğruna). Başka bir insert yapın, şimdi sayfa% 64 dolu. Dizini yeniden oluşturduğunuzda, yaprak düzeyi sayfaları artık belirttiğiniz alan yüzdesini (veya dolaylı olarak sunucu için varsayılan değeri) içerecektir.

( Not belirttiğiniz olmadığında, PAD_INDEXolmak ON, dolgu faktörü sadece yaprak düzey sayfalar uygulanır. Ama ayarladığınızda PAD_INDEX = ON, dolgu faktörü endeksinin orta düzey sayfaları için dikkate alınacaktır. VarsayılanOFF )

Doldurma faktörünü ayarlamanın nedeni (varsayılan 100/0 yerine) veri eklerken veya güncellerken sayfa bölünmelerini en aza indirgemenizdir. Ancak unutmayın, hiçbir şey ücretsiz değildir. Doldurma faktörü ne kadar düşük olursa, normalde daha fazla alan verisi kullanılır. Dizinleriniz için% 80 boş sayfa alanı tutarsanız, daha fazla okumaya neden olabilecek nispeten daha fazla disk alanı tüketir.

Anladığım kadarıyla, veri eklendiğinde sayfalardaki verilerin yaklaşık% 20'si olacaktır. Ancak veriler güncellendiğinde, dizinin% 20'sinden fazlasına genişleyecek, doldurulacak ve bir sayfa bölünmesi oluşturulacak, değil mi?

Veri eklendiğinde, uygun sayfadaki uygun dizinlere eklenir. Bu, sayfa tüketiminin doldurma faktöründen daha yüksek olmasına neden olabilir ve büyük olasılıkla çok iyi olur.

Tam dizin sayfasına yeni veriler eklendiğinde sayfa bölünmesi gerçekleşir. SQL Server daha sonra sayfayı böler ve verilerin yarısını tam sayfadan yeni bir sayfaya yerleştirir. Yine, burada doldurma faktörü devreye girmez.

Doldurma faktörünü düşürmenin meşru bir nedeni, sayfa bölünmelerini en aza indirmek, dolayısıyla dizin sayfası parçalanmasını en aza indirmek olacaktır.


3
Ayrıca, alanı büyütmek veya tahsis etmek için gereken G / Ç işlemlerini de en aza indirir.
JNK

Tamam, bu yüzden davranışların nasıl çalıştığı konusunda yanılmışım. Bu kadar ayrıntılı bir cevap için teşekkürler!
DForck42

1
@ DForck42 Sorun değil, yardımcı olmaktan memnuniyet duyarız.
Thomas Stringer

Bunu, düşük bir doldurma faktörü ayarlamanın yavaş okumalara (daha fazla sayfa), ancak hız eklerine (daha az bölme) eğilimi olacağını söyleyebilir miyiz?
Tüm Ticaretten Jon

2
@Jon: Yüksek dolgu faktörü indeksleri parçalı ve okumalar yavaşlar. Her indeks için optimal bir dolgu faktörü vardır - üstünde ve altında yavaş yazar ve okur. Optimallik, kullanım kalıplarına (günde kaç kesici uç), bakım kalıplarına (ne sıklıkta yeniden oluşturulduğuna), verilere (anahtarın ne kadar benzersiz olduğu) bağlıdır. Benzersiz olmayan dizinler daha fazla boş alan (daha düşük dolgu faktörü) gerektirir.
wqw
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.