Füllfaktor

Die Füllfaktoroption wird zur erweiterten Leistungsoptimierung beim Speichern von Indexdaten bereitgestellt. Wenn ein Index erstellt oder neu erstellt wird, bestimmt der Füllfaktorwert den Speicherplatzanteil, der auf jeder Blattebenenseite mit Daten gefüllt werden soll. Dadurch wird der restliche Speicherplatz auf den einzelnen Seiten für zukünftige Vergrößerungen reserviert. Wenn Sie beispielsweise einen Füllfaktorwert von 80 angeben, bedeutet dies, dass 20 Prozent jeder Seite auf der Blattebene leer gelassen werden, um Speicherplatz für zukünftige Indexerweiterungen bereitzustellen, während der zugrunde liegenden Tabelle Daten hinzugefügt werden. Der freie Speicherplatz wird zwischen den Indexzeilen statt am Indexende reserviert.

Der Wert des Füllfaktors ist ein Prozentwert von 1 bis 100, und der serverweite Standardwert ist 0, d. h. die Seiten auf Blattebene werden vollständig aufgefüllt.

HinweisHinweis

Die Füllfaktorwerte 0 und 100 sind in jeder Hinsicht identisch.

Sie können die Anweisungen CREATE INDEX oder ALTER INDEX verwenden, um den Füllfaktorwert für einzelne Indizes festzulegen. Verwenden Sie die gespeicherte Prozedur sp_configure, um den serverweiten Standardwert zu ändern. Verwenden Sie sys.indexes, um den Füllfaktorwert eines Index bzw. mehrerer Indizes anzuzeigen.

Wichtiger HinweisWichtig

Die Füllfaktoreinstellung wird nur verwendet, wenn der Index erstellt oder neu erstellt wird. SQL Server Database Engine (Datenbankmodul) hält den angegebenen Prozentsatz des Speicherplatzes nicht dynamisch auf den Seiten frei. Das Aufrechterhalten des zusätzlichen Speicherplatzes auf den Datenseiten würde dem Zweck der ursprünglichen Implementierung des Füllfaktors zuwiderlaufen, da Database Engine (Datenbankmodul) Seitenteilungen vornehmen müsste, um den Prozentsatz des freien Speicherplatzes, der durch den Füllfaktor angegeben wird, weiterhin beizubehalten, wenn Daten eingegeben werden.

Leistungsaspekte

Seitenteilung

Ein ordnungsgemäß ausgewählter Füllfaktorwert kann potenzielle Seitenteilungen verringern, da ausreichend Speicherplatz für die Indexerweiterung bereitgestellt wird, wenn der zugrunde liegenden Tabelle Daten hinzugefügt werden. Wenn einer vollen Indexseite eine neue Zeile hinzugefügt wird, werden in Database Engine (Datenbankmodul) etwa die Hälfte der Zeilen auf eine neue Seite verschoben, um Platz für die neue Zeile zu schaffen. Diese Neuorganisation wird auch Seitenteilung genannt. Eine Seitenteilung schafft Platz für neue Datensätze, beansprucht jedoch Zeit und Ressourcen. Seitenteilungen können auch Fragmentierungen verursachen, die zu vermehrten E/A-Vorgängen führen. Bei häufigen Seitenteilungen kann der Index neu erstellt und dabei ein neuer oder bereits vorhandener Füllfaktor verwendet werden, um die Daten neu zu verteilen. Weitere Informationen finden Sie unter Neuorganisieren und Neuerstellen von Indizes.

Ein niedriger Füllfaktor (über 0) kann zwar beim Vergrößern des Index die Seitenteilung reduzieren. Der Index erfordert dann jedoch mehr Speicherplatz und verringert möglicherweise die Leseleistung. Selbst bei Anwendungen, die für häufige Eingabe- und Aktualisierungsvorgänge ausgelegt sind, übersteigt in der Regel die Anzahl der Datenbanklesevorgänge die Schreibvorgänge um das 5- bis 10-fache. Wenn daher ein Füllfaktor angegeben wird, der sich von der Standardeinstellung unterscheidet, kann sich die Datenbankleseleistung umgekehrt proportional zur Füllfaktoreinstellung verschlechtern. Ein Füllfaktorwert von 50 Prozent kann z. B. dazu führen, dass die Dauer von Datenbanklesevorgängen verdoppelt wird. Die Leseleistung verringert sich, weil der Index eine größere Anzahl an Seiten enthält und daher die zum Abrufen der Daten erforderlichen Datenträger-E/A-Vorgänge zunehmen.

Hinzufügen von Daten zum Tabellenende

Ein Füllfaktor ungleich 0 oder 100 kann zur Leistungsverbesserung beitragen, wenn die neuen Daten gleichmäßig in der Tabelle verteilt werden. Wenn jedoch alle Daten am Tabellenende hinzugefügt werden, wird der freie Speicherplatz auf den Indexseiten nicht aufgefüllt. Wenn die Indexschlüsselspalte z. B. eine IDENTITY-Spalte ist, wird der Schlüssel für neue Zeilen stets erhöht, und die Indexzeilen werden logischerweise am Indexende hinzugefügt. Wenn vorhandene Zeilen mit Daten aktualisiert werden, die die Größe der Zeilen verlängern, verwenden Sie einen Füllfaktor, der kleiner als 100 ist. Die zusätzlichen Bytes auf jeder Seite tragen dazu bei, durch zusätzliche Zeilenlängen verursachte Seitenteilungen zu verringern.