Die Grundidee ist, dass Ihre Seiten so voll wie möglich sein sollen. Je mehr Zeilen in eine Datenseite gepackt werden, desto weniger Seiten müssen Sie lesen und in Ihrem Pufferpool aufbewahren.
Letztendlich möchten Sie also, dass alle Ihre Seiten zu 100% mit Daten gefüllt sind.
Jedoch:
Wenn alle Ihre Seiten voll sind, treten einige Probleme auf:
- Einfügungen außerhalb der Indexreihenfolge. Diese Einträge müssen zwischen Daten platziert werden. Da die Seite voll ist, werden andere Datensätze auf eine neue Seite gezwungen.
- Sie haben ein Tabellenschema, bei dem ein großer Teil der Zeile vom variablen Datentyp ist. Aktualisierungen, die die Zeilengröße ändern, können zu Seitenteilen führen
- Das Aktualisieren von Indexschlüsseln und das Verschieben von Einträgen im Index führt zu Seitenteilungen.
- Bei der Snapshot-Versionierung wird der Zeile ein 14-Byte-Tag hinzugefügt. Dies kann zu Seitenteilen führen.
Es gibt andere Ursachen für Seitenteile, aber dies sind die größten.
All dies führt zu einer Fragmentierung. Das ist schlecht, aber auf seltsame Weise gut. Denn das ist ungefähr das einzige, was Ihnen bei der Entscheidung über den richtigen Füllfaktor helfen kann. Ich werde erklären warum.
Was Sie tun, ist:
Überprüfen Sie, ob einer der oben genannten Punkte zutrifft. Gehen Sie für die Indizes wie folgt vor.
- Beginnen Sie mit einem Füllfaktor von 90% (wir müssen irgendwo anfangen).
Bauen Sie in Ihren Indexverwaltungsverfahren ein, dass Sie verfolgen, wie schnell Ihre Indizes Fragmentierung aufbauen. (sagen wir 30% in einer Woche)
- Verringern Sie jetzt bei Ihrer nächsten Wiederherstellungsroutine den Füllfaktor geringfügig. sagen 80%. Überprüfen Sie, ob Ihre Fragmentierung in den nächsten 7 Tagen weniger als 30% beträgt.
- Fahren Sie so fort, bis entweder die Fragmentierung nicht abnimmt oder die Fragmentierung sehr gering geworden ist.
Denken Sie daran, dass Sie dies im Laufe der Zeit bewerten sollten. Ihre Arbeitslast (Datenmod) kann sich im Laufe der Zeit ändern.
Denken Sie auch an Ihre aktuellen Probleme. Seitenplits verursachen eine zusätzliche Belastung der Protokolldatei (möglicherweise viel). Zusätzliche Schreibvorgänge in die Datendateien (höhere Prüfpunktspitzen). Und Vorauslesen wird aufgrund der Fragmentierung weniger effektiv. Niedrige Füllfaktoren verbrauchen jedoch Pufferplatz und erhöhen die Leselast.
Eine Sache, bei der man sehr vorsichtig sein muss, ist, dass die Zähler für Seitensplits / Sek. Nicht wirklich zuverlässig sind. Sie verfolgen alle Seitenteile. (SQL 2012 ist besser) Was ich damit meine alles ist , dass , wenn Sie Einfügen eines Datensatzes in der sehr eines Index beenden, effektiv müssen Sie eine neue Seite in den Index aufgenommen , um fortzufahren. Das Hinzufügen der neuen Datenseite wird ebenfalls als Seitenaufteilung gezählt. Aber in Wirklichkeit ist nichts gespalten. In der Reihenfolge haben Einfügungen in einen Cluster-Index immer noch Seitenaufteilungen, wenn Sie sich den Zähler für Seitenaufteilung / Sek. Betrachten, aber sie sind nicht schlecht. Betrachten Sie diesen Zähler also nur in Bezug auf andere Fakten. Zum Beispiel: Unerklärlich hohe Trans-Log-Last zusammen mit hohen Inserts außerhalb der Reihenfolge zusammen mit hohen Seitensplits / Sek.
Ein letztes Wort der Warnung. Besonders auf großen Tischen. Überprüfen Sie immer die aktuelle Seitendichte Ihres Index und berechnen Sie die Auswirkungen auf die Größe, wenn Sie den Index mit einem anderen Füllfaktor neu erstellen. (Durch die Neuerstellung eines Index mit einer Seitendichte von 100% und einem neuen Füllfaktor von 50% wird die Größe des Index effektiv verdoppelt.)