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, und damit, wieviel Speicherplatz für zukünftige Vergrößerungen reserviert werden soll. 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 nicht am Seitenende, sondern zwischen den Indexzeilen der einzelnen Seiten reserviert.
Beim Füllfaktorwert handelt es sich um einen Prozentwert zwischen 1 und 100. Der serverweite Standardwert von 0 ist jedoch in den meisten Situationen am besten geeignet. Wenn der Füllfaktor auf 0 festgelegt wird, wird die Blattebene vollständig aufgefüllt.
Hinweis: |
---|
Die Füllfaktorwerte 0 und 100 sind in jeder Hinsicht identisch. |
Verwenden Sie die CREATE INDEX- oder ALTER INDEX-Anweisung, um den Füllfaktorwert für einzelne Indizes festzulegen. Verwenden Sie die gespeicherte Prozedur sp_configure, um den serverweiten Standardwert zu ändern. Verwenden Sie die Katalogsicht sys.indexes, um den Füllfaktorwert eines Indexes bzw. mehrerer Indizes anzuzeigen.
Wichtig: |
---|
Die Füllfaktoreinstellung wird nur verwendet, wenn der Index erstellt oder neu erstellt wird. SQL Server 2005-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 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
Seitenteilungen
Mit einem richtig ausgewählten Füllfaktor kann das Risiko von Seitenteilungen verringert werden, indem genug Speicherplatz für Indexerweiterungen bereitgestellt wird, während der dem Index zugrunde liegenden Tabelle Daten hinzugefügt werden.
Wenn einer vollen Indexseite eine neue Zeile hinzugefügt wird, verschiebt Datenbankmodul ungefähr die Hälfte der Zeilen auf eine neue Seite, um Platz für die neue Zeile bereitzustellen. 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 Indexes die Seitenteilung reduzieren; der Index erfordert dann jedoch mehr Speicherplatz, was die Leseleistung verringern kann. Selbst bei Anwendungen, die auf eine Vielzahl an Einfüge- und Aktualisierungsvorgängen ausgerichtet sind, übersteigt die Zahl der Datenbanklesevorgänge die Anzahl der Schreibvorgänge um das fünf- bis zehnfache. Daher kann die Verwendung eines anderen Füllfaktors als des Standardwerts dazu führen, dass sich die Schreibleistung der Datenbank umgekehrt proportional zur Füllfaktoreinstellung verschlechtert. Ein Füllfaktorwert von 50 Prozent kann z. B. dazu führen, dass die Dauer von Datenbanklesevorgängen verdoppelt wird. Die Leseleistung verringert sich, da 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 kann zur Leistungsverbesserung beitragen, wenn die neuen Daten in der Tabelle gleichmäßig verteilt werden. Wenn jedoch alle Daten am Tabellenende hinzugefügt werden, wird der freie Speicherplatz nicht aufgefüllt. Wenn es sich bei der Indexschlüsselspalte z. B. um eine IDENTITY-Spalte handelt, wird der Schlüssel für neue Zeilen stets erhöht, und die Zeilen werden logischerweise am Tabellenende hinzugefügt. In diesem Fall verursachen Seitenteilungen keinen Leistungsabfall. Es sollte der Standardfüllfaktor von 0 verwendet oder ein Füllfaktor von 100 angegeben werden, damit die Blattebene aufgefüllt wird.
Siehe auch
Konzepte
Erstellen von Indizes (Datenbankmodul)
fill factor (Option)
Andere Ressourcen
ALTER INDEX (Transact-SQL)
CREATE INDEX (Transact-SQL)
sys.indexes (Transact-SQL)
sp_configure (Transact-SQL)