Baza danych SQL Server 2017 Enterprise CU16 14.0.3076.1
Niedawno próbowaliśmy przejść z domyślnych zadań konserwacyjnych Index Rebuild do Ola Hallengren IndexOptimize. Domyślne zadania przebudowy indeksu działały przez kilka miesięcy bez żadnych problemów, a zapytania i aktualizacje działały z akceptowalnymi czasami wykonania. Po uruchomieniu IndexOptimizew bazie danych:
EXECUTE dbo.IndexOptimize
@Databases = 'USER_DATABASES',
@FragmentationLow = NULL,
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE',
@FragmentationLevel1 = 5,
@FragmentationLevel2 = 30,
@UpdateStatistics = 'ALL',
@OnlyModifiedStatistics = 'Y'
wydajność bardzo się pogorszyła. Instrukcja aktualizacji, która wcześniej zajęła 100 ms, IndexOptimizezajęła później 78 000 ms (przy użyciu identycznego planu), a zapytania były również gorsze o kilka rzędów wielkości.
Ponieważ nadal jest to testowa baza danych (migrujemy system produkcyjny z Oracle), przywróciliśmy kopię zapasową i wyłączono, IndexOptimizea wszystko wróciło do normy.
Chcielibyśmy jednak zrozumieć, co IndexOptimizeróżni się od „normalnego”, Index Rebuildco mogło spowodować ten ekstremalny spadek wydajności, aby mieć pewność, że unikniemy go po przejściu do produkcji. Wszelkie sugestie dotyczące tego, czego szukać, byłyby bardzo mile widziane.
Plan wykonania instrukcji aktualizacji, gdy jest ona wolna. tj.
po IndexOptimize
Rzeczywisty plan wykonania (jak najszybciej)
Nie byłem w stanie dostrzec różnicy.
Zaplanuj to samo zapytanie, gdy jest szybkie
Rzeczywisty plan wykonania








