Zachowanie danych w indeksach na podstawie współczynnika wypełnienia


14

Załóżmy, że masz bazę danych, w której domyślnym współczynnikiem wypełnienia jest 20. Za każdym razem, gdy dane są wstawiane, czy tworzy tylko strony wypełnione do 20%?

Z mojego zrozumienia, kiedy dane zostaną wstawione, na stronach będzie około 20% danych. Gdy dane zostaną zaktualizowane, powiększy się do ponad 20% indeksu, wypełniając go i generując podział strony, prawda?

Odpowiedzi:


16

Współczynnik wypełnienia ma zastosowanie tylko wtedy, gdy indeks jest tworzony lub przebudowywany. Jest to wielkość zużycia dla indeksu stron na poziomie liścia, które są wypełniane podczas tych operacji. ( więcej informacji na temat dotkniętych poziomów stron znajduje się w uwadze poniżej )

Gdy do danych ( INSERT, UPDATEi / lub DELETE) istnieje polecenie DML , stanie się to z odpowiednimi indeksami, których dotyczy problem. Innymi słowy, jeśli masz stronę wypełnioną w 20% i wstawiasz do niej dane, strona będzie zawierać więcej niż 20% danych (na przykład 35%). Wykonaj inną wstawkę, teraz strona jest wypełniona w 64%. Odbuduj indeks, a strony na poziomie liścia będą teraz zawierały względnie określony procent miejsca (lub domyślnie wartość domyślną dla serwera).

( Uwaga : jeśli nie określisz, PAD_INDEXże ma to być ON, współczynnik wypełnienia jest stosowany tylko do stron na poziomie liścia. Ale po ustawieniu PAD_INDEX = ONwspółczynnik wypełnienia będzie brany pod uwagę dla stron na poziomie pośrednim indeksu. Domyślnie jest toOFF )

Powodem dostosowania współczynnika wypełnienia (zamiast domyślnego ustawienia 100/0) jest minimalizacja podziałów stron podczas wstawiania lub aktualizowania danych. Pamiętaj jednak, że nic nie jest za darmo. Im niższy współczynnik wypełnienia, tym więcej miejsca zajmuje normalnie dane. Jeśli zachowasz 80% wolnego miejsca na strony dla indeksów, będą one zajmować stosunkowo większą ilość miejsca na dysku, co może prowadzić do większej liczby odczytów.

Z mojego zrozumienia, kiedy dane zostaną wstawione, na stronach będzie około 20% danych. Gdy dane zostaną zaktualizowane, powiększy się do ponad 20% indeksu, wypełniając go i generując podział strony, prawda?

Po wstawieniu danych zostaną one wstawione do odpowiednich indeksów na odpowiedniej stronie. To może i najprawdopodobniej bardzo dobrze spowoduje, że zużycie strony będzie wyższe niż współczynnik wypełnienia.

Podział strony nastąpi po dodaniu nowych danych do pełnej strony indeksu. Następnie SQL Server podzieli stronę i w przybliżeniu umieści połowę danych z całej strony na nowej stronie. Ponownie, współczynnik wypełnienia nie ma tu zastosowania.

Uzasadnionym powodem obniżenia współczynnika wypełnienia byłoby zminimalizowanie podziału strony, a tym samym zminimalizowanie fragmentacji strony indeksu.


3
Minimalizuje również operacje IO potrzebne do powiększenia lub przydzielenia przestrzeni.
— JNK

OK, więc pomyliłem się z tym, jak działało to zachowanie. Dziękuję za tak szczegółową odpowiedź!
— DForck42

1
@ DForck42 Nie ma problemu, chętnie pomogę.
— Thomas Stringer

Czy możemy to podsumować, by powiedzieć, że ustawienie niskiego współczynnika wypełnienia będzie sprzyjać powolnemu czytaniu (więcej stron), ale szybsze wstawianie (mniej podziałów)?
— Jon of All Trades

2
@Jon: Z wysokim współczynnikiem wypełnienia fragmentuje fragment i odczytuje spowolnienie. Dla każdego indeksu jest optymalny współczynnik wypełnienia - nad nim i pod nim wolno zapisuje i odczytuje. Optymalność zależy od wzorców użytkowania (liczba wkładek dziennie), wzorców konserwacji (jak często jest przebudowywana), danych (kluczem jest wyjątkowość). Nieunikalne indeksy zwykle wymagają więcej wolnego miejsca (niższy współczynnik wypełnienia).
— wqw
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.