Użyłem ALTER INDEX REBUILD do usunięcia fragmentacji indeksu. W niektórych przypadkach REBUILD nie wydaje się usuwać tego fragmentacji. Jakie są powody, dla których REBUILD nie usuwa fragmentacji? Wydaje się, że dzieje się tak zwłaszcza przy małych indeksach.
30
Odpowiedzi:
Jeśli indeks jest bardzo mały (uważam, że mniej niż 8 stron) użyje różnych zakresów. Dlatego będzie wyglądać, jakby nadal istniała fragmentacja, ponieważ zasięg obudowy zawiera strony z wielu indeksów.
Z tego powodu, a także z faktu, że przy tak małym indeksie, że fragmentacja jest zwykle nieistotna, naprawdę powinieneś odbudowywać indeksy tylko z pewnym progiem strony. Najlepszą praktyką jest odbudowywanie pofragmentowanych indeksów, które mają minimum 1000 stron .
źródło
Może się to zdarzyć również przy bardzo DUŻYCH indeksach.
Miałem kilka indeksów na stole z około 700 milionami wierszy, których nie mogłem defragmentować poniżej około 30%. Problem polegał na tym, że nie było wystarczającej ilości ciągłego wolnego miejsca w bazie danych, aby porządkować indeks kolejno.
Aby obejść bardzo duży indeks, który nie będzie defragmentowany, NAJLEPSZY rozwiązaniem jest wstępne zmierzenie rozmiaru nowej bazy danych i przeniesienie wszystkich obiektów do tej bazy danych, a następnie odtworzenie tam swoich indeksów.
źródło
Walczyłem z tym przez jakiś czas i podobnie jak JNK, myślałem, że problemem jest nadal wolne miejsce i fragmentacja fizyczna na dysku. Co jednak robisz w przypadku SSD SAN?
Teraz dowiedziałem się, że dobrym pomysłem może być uwzględnienie tylko index_level = 0. Tak to się dzieje w skrypcie Oli Hallengren.
Kolejna poprawa jest do zrobienia
W ten sposób zapewniasz maksymalną poprawę.
źródło