Używam skryptu Ola Hallengrens do obsługi indeksu. Zanim to zrobiłem, użyłem następującego zapytania, aby zobaczyć, które indeksy są najbardziej pofragmentowane:
SELECT dbschemas.[name] as 'Schema',
dbtables.[name] as 'Table',
dbindexes.[name] as 'Index',
indexstats.avg_fragmentation_in_percent,
indexstats.page_count
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
ORDER BY indexstats.avg_fragmentation_in_percent desc
W moim przypadku avg_fragmentation wyniosło ponad 70% dla 15 indeksów i ponad 30% dla 28 indeksów.
Tak więc odbudowuję każdy indeks, korzystając z rozwiązania Oli Hallengren. Gdy ponownie uruchomiłem zapytanie, był to wynik:
Fragmentacja powyżej 70% dla 12 indeksów, ponad 30% dla 15 indeksów.
Pomyślałem, że powodem jest to page_count
, że było niższe niż 1000 dla każdego z indeksów, które wciąż były bardzo rozdrobnione. Na przykład jeden z indeksów o
page_count
wartości 967 ma procent fragmentacji wynoszący 98,98% ! Wydaje mi się, że warto odbudować ten indeks! Zrobiłem to, a potem fragmentacja wyniosła 0% . Również wskaźnik z page_count
132 spadł z 95% do 0%
Więc moje pytanie brzmi: jakie byłyby powody, by NIE odbudowywać tych indeksów? Jednym z powodów może być to, że odbudowa kosztuje czas i zasoby, ale ponieważ indeksy są małe, czy nie oznacza to, że kosztuje stosunkowo niewiele zasobów i nadal byłoby korzystne przy odbudowie?
Na tej stronie znajduje się wiele powiązanych pytań, ale wszystkie z nich odpowiadają na pytanie, dlaczego indeks nie byłby defragmentowany lub jeśli indeksy są nadal przydatne, jeśli są małe i nie defragmentuje się ich, podczas gdy tutaj instrukcja MNIE zmniejsza fragmentację, z pytanie brzmi: dlaczego i tak tego nie zrobić?
źródło
Odpowiedzi:
Wskazówki dotyczące minimalnej liczby stron są nieco arbitralne . Największe korzyści wynikające z ograniczenia fragmentacji to:
Oba te czynniki są z definicji mniej ważne w przypadku małych indeksów.
Kontrargumentem dotyczącym odbudowy małych indeksów jest zasadniczo:
To powiedziawszy, przebudowa / reorganizacja nie jest darmowa. W niektórych przypadkach warto unikać dodatkowego wysiłku i generowania dzienników (na przykład, jeśli dziennik jest wysyłany / kopiowany przez sieć WAN z dowolnej liczby możliwych przyczyn - dublowanie, grupy dostępności, replikacja ...). Ponadto, chyba że (lub nawet w niektórych przypadkach) przebudowujesz online, przebudowa może wpłynąć na inne równoległe procesy poprzez blokowanie. Wreszcie w przypadku małych indeksów przebudowa może nawet nie zmniejszyć fragmentacji ze względu na przydziały z mieszanych zakresów (chyba że korzystasz z włączonej flagi śledzenia 1118 ).
Jeśli nadal czujesz się szczęśliwszy przy przebudowywaniu tych małych indeksów i nie masz nic przeciwko konsekwencjom, to zdecydowanie zmień wartość
@PageCountLevel
parametru przekazanego do procedury Oli.Zobacz nagranie PASS TV z prezentacji Paula Randala na temat fragmentacji indeksu, aby poznać wszystkie szczegóły.
Możesz także zobaczyć, jak Brent Ozar mówi o tym, dlaczego fragmentacja indeksu nie ma znaczenia w SQL Server.
źródło