Problem mit der Indexfragmentierung nach Deaktivierung der Sperre auf Seitenebene für einen Index

7

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, Reorganizeden Index zu erstellen , aber ich glaubte, dass ich in der Lage sein würde, rebuildden 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 deadlocksfür diesen Index in dieser bestimmten Tabelle erhalten. Dieser Tisch war eine Art Faktentabelle, an der insert, update and deletejeden Moment etwas passierte. Und es gibt eine foreign keyBeziehung 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 maintenanceund 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.

user9516827
quelle
Es gibt eine varbinary(max)Spalte, die LOB ist, aber nicht Teil des Index ist.
user9516827

Antworten:

13

Die Antwort auf Ihre Frage ist in einigen Dokumentationen vergraben :

Die Online-Indexwiederherstellung kann die Fragmentierung erhöhen, wenn sie mit den Optionen MAX DOP> 1 und ALLOW_PAGE_LOCKS = OFF ausgeführt werden darf.

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:

  • offline neu erstellen
  • Wiederaufbau bei MAXDOP 1
Josh Darnell
quelle