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 IndexOptimizeauf 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 IndexOptimize100 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, IndexOptimizeund alles ist wieder normal.
Wir möchten jedoch verstehen, was IndexOptimizeanders als das "normale" Index RebuildVerhalten 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








