Ich habe einen Index, bei dem die Sperre auf Seitenebene deaktiviert ist, und jetzt habe ich Probleme mit der Indexfragmentierung für diesen Index.
Ich war mir bewusst, dass ich nicht in der Lage sein werde, Reorganize
den Index zu erstellen , aber ich glaubte, dass ich in der Lage sein würde, rebuild
den Index zu erstellen .
Jetzt denke ich, dass der Wiederaufbau auch nicht funktioniert. Ich verwende den Standardfüllfaktor 100. Meine Datenbank ist riesig, daher möchte ich nicht, dass die Tabellen- / Datenbankgröße durch Angabe eines Füllfaktors von 80% oder weniger erhöht wird. Wenn ich nicht arbeite, meine ich, dass die durchschnittliche Fragmentierung dieselbe bleibt, nachdem Olas Skript in der vergangenen Nacht ausgeführt wurde.
Ein kleiner Hintergrund, warum das Sperren auf Seitenebene deaktiviert ist.
Ich habe viele Transaktionen deadlocks
für diesen Index in dieser bestimmten Tabelle erhalten. Dieser Tisch war eine Art Faktentabelle, an der insert, update and delete
jeden Moment etwas passierte. Und es gibt eine foreign key
Beziehung zu einigen anderen Tabellen mit CASCADE deletes
. Also bekam ich viele Sperren / Deadlocks und nachdem ich die Sperre auf Seitenebene deaktiviert hatte, konnte ich all diese Deadlocks entfernen.
Ich habe angefangen, das Skript von Ola Hallengren für zu verwenden, Index maintenance
und ich habe Index Rebuild für alle Indizes angewendet, für die Index Reorganize nicht funktioniert. Ich habe jedoch festgestellt, dass die Indexwiederherstellung ebenfalls nicht funktioniert.
Jetzt sehe ich eine AvgPageFragmentaiton von 95,9413 und eine Seitenzahl von 1196826 für den Index, was nicht gut ist.
Zusätzliche Information:
Ich verwende das Skript von Ola Hall wie unten gezeigt.
EXECUTE dbo.IndexOptimize
@Databases = 'DB_NAME',
@FragmentationLow = NULL,
@FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE',
@FragmentationHigh = ''INDEX_REORGANIZE,INDEX_REBUILD_ONLINE'',
@FragmentationLevel1 = 5,
@FragmentationLevel2 = 30,
@SortInTempdb = 'Y',
@MaxDOP = 0,
@WaitAtLowPriorityMaxDuration = 0,
@WaitAtLowPriorityAbortAfterWait= 'NONE',
@Indexes = 'DB_NAME.[dbo].TB1,DB_NAME.[dbo].TB2'
Meine Frage ist, wie man die Fragmentierung in einem Index reduziert, wenn die Sperre auf Seitenebene für diesen Index deaktiviert ist.
quelle
varbinary(max)
Spalte, die LOB ist, aber nicht Teil des Index ist.Antworten:
Die Antwort auf Ihre Frage ist in einigen Dokumentationen vergraben :
Die Gründe hierfür werden im folgenden MSDN-Blogbeitrag ausführlich erläutert:
So funktioniert es: Online-Indexwiederherstellung - Kann zu erhöhter Fragmentierung führen
Einige Optionen zur Behebung des Problems in Ihrer Situation, in der Seitensperren für den Index deaktiviert sind, sind:
MAXDOP 1
quelle