Bester Wert für den Füllfaktor im Index

7

Ich verwende SQL Server 2008 R2und möchte den Wert für die Füllfaktoreigenschaft in jedem Index festlegen. Ich suche nach einem Rezept, um den besten Wert für diese Eigenschaft zu berechnen (bessere Leistung beim Einfügen eines Datensatzes). Außerdem, wie ich die Abfrageleistung messen kann, indem ich den Referenzwert für diese Eigenschaft festlege.

Vielen Dank im Voraus.

mehdi lotfi
quelle
Gehen Sie diesen Artikel durch. sqlmag.com/blog/beginning-sql-server-one-step-at-a-time-blog-43/…
AnandPhadke

Antworten:

8

Es gibt keine Antwort für alle mit Füllfaktor. Dies hängt weitgehend davon ab, wie Ihre Datenänderungen datenbankweit oder in bestimmten Indizes vorgenommen werden. Die Standardeinstellung ist 0 (100), sodass auf einer Seite praktisch kein Platz bleibt. Dies bedeutet, dass ein Einfügen in die Mitte einer Seite einen Seitenteilung verursacht.

Überwachen Sie Ihren Zähler für Seitensplits / Sek. Und wenn Sie eine hohe Rate sehen, sollten Sie Ihren Füllfaktor überdenken. Stellen Sie dies jedoch nicht einfach blind ein, da Sie mehr Speicherplatz mit einem niedrigeren Füllfaktor benötigen. Und natürlich führt dies zu höheren E / A-Lesevorgängen, da mehr Seiten für die Daten vorhanden sind.

Ich empfehle Ihnen, meine Antwort hier bezüglich des Füllfaktors zu lesen . Es ist eine andere Art von Frage, aber sie sollte Ihnen eine bessere Vorstellung über den Füllfaktor und dessen Auswirkungen auf Sie geben.

Thomas Stringer
quelle
4

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:

  1. 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.
  2. 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
  3. Das Aktualisieren von Indexschlüsseln und das Verschieben von Einträgen im Index führt zu Seitenteilungen.
  4. 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.

  1. 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)
  2. 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.
  3. 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.)

Edward Dortland
quelle