Database SQL Server 2017 Enterprise CU16 14.0.3076.1
Wir haben kürzlich versucht, von den standardmäßigen Wartungsjobs für den Index-Neuaufbau auf den Ola Hallengren zu wechseln IndexOptimize
. Die Standardjobs für die Indexwiederherstellung liefen seit einigen Monaten ohne Probleme, und die Abfragen und Aktualisierungen arbeiteten mit akzeptablen Ausführungszeiten. Nach dem Ausführen IndexOptimize
auf der Datenbank:
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'
Leistung war extrem verschlechtert. Eine Update-Anweisung, die zuvor IndexOptimize
100 ms dauerte, dauerte danach 78.000 ms (unter Verwendung eines identischen Plans), und Abfragen führten auch zu einer Verschlechterung um mehrere Größenordnungen.
Da es sich bei dieser Datenbank immer noch um eine Testdatenbank handelt (wir migrieren ein Produktionssystem von Oracle), haben wir auf eine Sicherung zurückgegriffen und diese deaktiviert, IndexOptimize
und alles ist wieder normal.
Wir möchten jedoch verstehen, was IndexOptimize
anders als das "normale" Index Rebuild
Verhalten ist, das diesen extremen Leistungsabfall verursacht haben könnte, um sicherzustellen, dass wir ihn vermeiden, sobald wir in die Produktion gehen. Anregungen, wonach zu suchen ist, wären sehr dankbar.
Ausführungsplan für die Update-Anweisung, wenn sie langsam ist. dh
nach IndexOptimize
Ist-Ausführungsplan (so bald wie möglich)
Ich konnte keinen Unterschied feststellen.
Planen Sie für die gleiche Abfrage , wenn es schnell
Actual Ausführungsplan