In den meisten Fällen werden Sie tun wollen eine FILLFACTOR
von 100. Nur in besonderen Fällen würden Sie diesen Wert senken möchten. Aktualisierungen verursachen nur Seitenaufteilungen, wenn sie die Größe der Zeile erhöhen, sodass sie nicht mehr auf dieselbe Datenseite passt. Löschungen hier und da sollten in beiden Fällen keine Rolle spielen. In allen Fällen müssen Sie eine regelmäßige Indexpflege und REBUILD
den Clustered-Index durchführen, wenn die Fragmentierung einen bestimmten Grenzwert überschreitet. Beim erneuten Erstellen werden alle Daten in der idealen Reihenfolge neu sortiert, sodass Lücken gefüllt werden, die durch DELETE
Vorgänge und UPDATE
Vorgänge entstanden sind, die zu Seitensplits geführt haben, bei denen auf den alten und / oder neuen Datenseiten noch Speicherplatz verfügbar ist.
Viele Löschvorgänge können leere Seiten und damit eine gewisse Fragmentierung hinterlassen, aber die Verwendung eines niedrigeren FILLFACTOR
wird dort nicht helfen. Abhängig davon, welche Zeilen gelöscht werden, können Sie die Fragmentierung leerer Seiten erhöhen, da sich auf jeder Datenseite zunächst weniger Zeilen befinden.
Aber denken Sie daran:
- Die Verwendung
FILLFACTOR
von a bedeutet nicht, dass 100% des Speicherplatzes belegt sind. Zeilen werden in die Datenseite eingepasst, solange Platz für die gesamte Zeile vorhanden ist. Wenn Sie noch 100 Bytes übrig haben und eine 105-Byte-Zeile hinzufügen müssen, kann diese dort nicht passen. Es ist jedoch noch Platz für eine Aktualisierung einer Spalte variabler Länge, um sie um 50 Byte zu erhöhen.
- Wenn Sie
FILLFACTOR
weniger als 100 festlegen , reservieren Sie Speicherplatz auf allen Datenseiten, nicht nur auf den Seiten, die aktualisiert werden. Warum sollten Sie Speicherplatz auf Datenseiten reservieren, die "ältere" Zeilen enthalten, die nicht aktualisiert werden, es sei denn, Sie haben ein Verwendungsmuster, das Aktualisierungen gleichmäßig über den gesamten Bereich der Tabelle / des Index verteilt? Dies verlangsamt nur die Abfragen im gesamten Index / in der gesamten Tabelle in der Hoffnung, dass einige der neueren Datenseiten (dh Zeilen, die mit größerer Wahrscheinlichkeit aktualisiert werden) nicht so früh wie bei Verwendung einer FILLFACTOR
100 geteilt werden.
Berücksichtigen Sie die Größe Ihrer Zeilen und wie viele auf eine Datenseite passen, wenn sie FILLFACTOR
100 sind, und wie viele auf eine Datenseite mit einem niedrigeren FILLFACTOR
Wert wie 90 oder sogar 80 passen . Wenn Sie breite Zeilen mit 500 bis 1000 Byte haben, Der Unterschied zwischen verschiedenen FILLFACTOR
Werten kann nur eine oder wenige Zeilen betragen. Welche Arten von Updates finden statt? Wenn Aktualisierungen an Spalten fester Länge vorgenommen werden, ist dies nicht einmal ein Problem. Können Spalten mit variabler Länge um 100 bis 500 Byte vergrößert werden?
Es gibt mehrere Faktoren, die hier als wirklich pragmatisch zu betrachten sind: Wenn im Laufe eines Tages oder einer Woche (wie lange zwischen den REBUILD
Vorgängen?) Aufeinanderfolgende UPDATE
Vorgänge in Zeilen, die nahe beieinander sortiert sind, an Größe zunehmen und mehrere Seitenaufteilungen verursachen, dann Verschiebt diese Seite um mehrere Stunden oder einen Tag, was sich wirklich lohnt, wenn der Speicherplatz in der gesamten Tabelle / im gesamten Index so reserviert wird, dass mehr Speicherplatz belegt wird, Speicherplatz im Speicher (dh Pufferpool), Backups größer werden und länger dauern von der Festplatte in den Pufferpool lesen, länger brauchen, um die Indexpflege durchzuführen usw.?
- Die Fragmentierung wirkt sich nachteilig auf Bereichsabfragen aus, nicht auf Singleton-Abfragen. Wenn Sie einzelne Zeilen abrufen (oder Zeilen finden, die aktualisiert oder gelöscht werden sollen), werden Sie die Auswirkungen der Fragmentierung wahrscheinlich nicht sehen, zumindest nicht, bis sie wirklich schlecht ist, aber möglicherweise überhaupt nicht.
Wie bei vielen / den meisten technischen Entscheidungen gibt es verschiedene technische Aspekte, die den "besten" oder "optimalen" Ansatz beeinflussen. Sie müssen also wirklich die maximale Größe der Zeile berücksichtigen, wenn die Aktualisierungen für Spalten variabler Länge erfolgen, wenn die Aktualisierungsaktivität hauptsächlich über die Tabelle / den Index verteilt oder auf ein "neueres" Segment davon beschränkt sein soll usw. Ich habe an Orten gearbeitet, an denen die Richtlinie für alle Tabellen FILLFACTOR
einen Wert von 80 hatte, und es war eine verrückte (und unverantwortliche) Praxis, da wir IDENTITY
selten Spalten für die Clustered-Indizes (normalerweise PKs) und "ältere" Daten verwendeten wurde jemals aktualisiert. Wiederherstellungsvorgänge dauern länger!) und haben mehr Speicherplatz gekaut, wodurch entweder zwischengespeicherte Pläne zum Löschen oder zwischengespeicherte Datenseiten erzwungen werden (dh die Lebenserwartung der Seiten war recht niedrig).
ERGO: Beginnen Sie mit 100 und experimentieren Sie mit dem Verringern in kleinen Mengen, WENN / WENN Sie glauben, dass eine Optimierung gerechtfertigt sein könnte (dh wenn Sie feststellen, dass die Fragmentierung einer bestimmten Tabelle zwischen den Neuerstellungen auf ein höheres Niveau ansteigt UND dies auch zu Leistungseinbußen führt!).