Kiedy powinienem odbudować indeksy w mojej relacyjnej bazie danych (SQL Server)?
Czy istnieje uzasadnienie dla regularnego przebudowywania indeksów?
sql-server
index-maintenance
Nick Chammas
źródło
źródło
Odpowiedzi:
Ryzykując, że w mojej odpowiedzi będę zbyt ogólny, powiem, że powinieneś regularnie przeprowadzać proces konserwacji indeksu. Jednak proces konserwacji indeksu powinien jedynie odbudowywać / reorganizować indeksy, które tego wymagają.
Rodzi to pytanie: kiedy indeks wymaga przebudowy lub reorganizacji? Rolando ładnie to poruszył. Znowu ryzykuję, że będę bardzo szeroki. Indeks wymaga konserwacji, gdy poziom fragmentacji niekorzystnie wpływa na wydajność. Ten poziom fragmentacji może się różnić w zależności od wielkości i składu wskaźnika.
Mówiąc o SQL Server, mam tendencję do wybierania rozmiaru indeksu i poziomu fragmentacji indeksu, w którym to momencie rozpoczynam konserwację indeksu. Jeśli indeks zawiera mniej niż 100 stron, nie będę wykonywać żadnych czynności konserwacyjnych.
Jeśli indeks jest podzielony między 10% a 30%, zrobię
REORGANIZE
indeks iUPDATE
statystyki. Jeśli indeks jest podzielony na ponad 30%, zrobięREBUILD
indeks - nieUPDATE STATISTICS
, ponieważ zajmuje się tymREBUILD
. Pamiętaj jednak, że przebudowa aktualizuje tylko obiekt statystyk bezpośrednio powiązany z indeksem. Pozostałe statystyki kolumn będą musiały być utrzymywane osobno.Ta odpowiedź to naprawdę długa droga do powiedzenia: tak, powinieneś rutynowo konserwować indeksy, ale tylko na indeksach, które tego potrzebują.
źródło
Powinieneś odbudować indeksy, gdy staną się bardzo rozdrobnione przez zdarzenia specjalne. Na przykład wykonujesz duże, masowe ładowanie danych do indeksowanej tabeli.
A co jeśli twoje indeksy ulegają fragmentacji z powodu regularnej aktywności? Czy powinieneś planować regularne przebudowy? Jak często powinni biegać?
Tom Kyte , w tym klasycznym wątku Ask Tom , zaleca:
Logika tutaj jest zdrowa, ale jest tendencyjna w stosunku do profilu obciążenia dużego do odczytu.
Indeks „gruby” (tj. Z dużą ilością przerw) rzeczywiście zapewnia sporo miejsca na nowe i przeniesione wiersze, zmniejszając w ten sposób podziały stron i przyspieszając pisanie. Jednak gdy czytasz z tego indeksu tłuszczu, musisz przeczytać więcej stron, aby uzyskać te same dane, ponieważ teraz przesiewasz więcej pustej przestrzeni. Spowalnia to twoje odczyty.
Tak więc w bazach danych z dużą ilością danych chcesz regularnie odbudowywać lub reorganizować swoje indeksy. (Jak często i pod jakimi warunkami? Matt M ma już konkretną odpowiedź na to pytanie.) W bazach danych, które wykazują w przybliżeniu równoważną aktywność odczytu i zapisu, lub w bazach danych, które są obciążone zapisem, prawdopodobnie szkodzisz wydajności bazy danych poprzez odbudowę indeksów regularnie.
źródło
Większość ludzi przebudowuje je regularnie, aby nigdy się nie rozpadły. Kiedy trzeba je odbudować, zależy to od tego, jak szybko ulegną fragmentacji. Niektóre indeksy będą musiały być często przebudowywane, inne w zasadzie nigdy. Sprawdź skrypt, który przygotował SQLFool, który radzi sobie z rozwiązywaniem tych problemów .
źródło
Jak zauważono w przyjętej odpowiedzi Matta M., powszechną zasadą jest, że indeksy, które są podzielone na ponad 30%, powinny zostać odbudowane.
To zapytanie pomoże ci ustalić, ile indeksów masz podzielonych na ponad 30% (jeśli masz, powinieneś je odbudować):
źródło
Gdy procent fragmentacji indeksu jest większy niż 30%.
Nie ma takiego przypadku, ale ogólnie rzecz biorąc, wykonywanie indeksu konserwacji raz w tygodniu, w weekend jest najlepszą praktyką w celu utrzymania stabilności środowiska.
Polecam używanie skryptów konserwacyjnych Ola Hallengren (najlepsze skrypty konserwacyjne), dostosowywanie skryptów w zależności od środowiska i planowanie ich uruchamiania w weekend.
https://ola.hallengren.com/
Uwaga: nie zapomnij zaktualizować statystyk po przebudowaniu indeksów, ponieważ przebudowanie indeksów nie aktualizuje wszystkich statystyk.
źródło
Tak jak w przypadku większości rzeczy w IT, to zależy. Jaki problem próbujesz rozwiązać poprzez przebudowanie indeksów? Czy możesz pokazać, że to naprawia problem? Jeśli tak, zmieniaj liczby, aż znajdziesz najmniejszą liczbę czynności konserwacyjnych, które musisz zrobić, aby rozwiązać problem.
Jeśli to nie rozwiąże problemu, lub powodem, dla którego to robisz, jest po prostu złagodzenie niektórych wskaźników, które monitorujesz, ponieważ może to poprawić, wtedy wszystko, co robisz, to spalanie procesora i operacji we / wy i prawdopodobnie pogorszenie problemu.
Istnieje argument, że naprawienie fragmentacji nie zrobi żadnej różnicy na twoim serwerze, więc czy w ogóle warto to robić regularnie?
https://www.brentozar.com/archive/2017/12/index-maintenance-madness/
http://brentozar.com/go/defrag
źródło