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ć?