Technischer Blog
Neuer Eintrag: 21.11.2024 von Thomas Hauser / IT at Service
Warum und Wieso und Wie? Gedanken zum SQL Server Index Fillfactor
Spätestens dann wenn es um das Thema Index Maintenance geht und der Wartungsscript wiederholt mehrere Stunden läuft sollte man sich das Thema "Index Fillfactor" etwas genauer ansehen. Standardmäßig füllt SQL Server die Indexseiten zu 100%, das heisst sobald es eine Änderung gibt, kann diese nicht mehr auf diesselbe Index-Seite geschrieben werden, sondern muss am Schluss des Index angefügt werden. Dies ist maßgeblich für eine Fragementierung des Index ursächlich und erzeugt Overhead, weil die SQL Server Engine die nötige Information von verschiedenen Stellen des Index lesen muss. Mit setzen des Fillfactors wird standardmäßig Platz auf jeder Indexseite freigehalten, sodass Änderungen, und damit Änderungen am Index direkt auf der jeweiligen Indexseite fortgeschrieben werden können. Dies beugt einer wiederholten zeitnahen Fragementierung vor. Mit dem setzen eines Fillfactors von z.B. 90%, bleiben 10% jeder Indexseite frei für das fortschreiben von Veränderungen. Doch vorsichtig, diese Änderung hat unmittelbare Auswirkung auf die Performance eines Index, da so Index-Informationen auf mehrere Seiten aufgeteilt und nicht mehr im ganzen gelesen werden. Brent schreibt hier (Externer Link), das ein setzen des Fillfactors von 10% eine Verschlechterung der Index-Performance von 10% zur Folge hat.
Daher ist es eine Abwägung wie sich ein fragmentierter Index oder ein niedrigerer Fillfactor auf die Index-Performance auswirken wird. Nicht akzeptabel ist jedoch auch in meinen Augen wenn das Thema Index Maintenance unübersichtlich wird. Und wenn man nie weiß was zu erwarten ist, sozusagen eine Black-Box. Eine Ausführungszeit von 25-40 Stunden pro Woche ist eine Hausnummer und wirkt sich unmittelbar auf das Produktivsystem und die Leistung aus. Um herauszufinden welcher Indizes für eine lange Laufzeit verantwortlich sind, sollte man die Ausführungszeit der Index Pflege überwachen. Die SQL Server Maintenance Solution von Ola Hallengren (Externer Link), https://ola.hallengren.com, protokolliert standardmäßig die Ausführungszeit in der Tabelle Commandlog. Um sich einen Überblick zu verschaffen werten wir diese Tabelle mit einem definierten Zeitraum aus. Ziel ist es durch das setzen des Fill-Factors eine schnelle Fragmentierung des Index zu vermeiden. Ein Beispiel Kommando um den Fillfactor zu setzen ist: Example: ALTER INDEX [IndexName] ON [dbo].[Tabelle] REBUILD WITH (FILLFACTOR = 90, SORT_IN_TEMPDB = OFF, ONLINE = OFF) Diese Abfrage hier (Externer Link) prüft dynamisch den Fillfactor und erzeugt die jeweiligen Kommandos um den Fillfactor für einen Index neu zu setzen.
Sprechen Sie mit uns!
Gerne stehen wir Ihnen bei allen Fragen rund um Ihre IT-Infrastruktur zur Seite.
Teten Sie mit uns in Kontakt und vereinbaren ein unverbindliches Beratungsgespräch.
Wir sind für Sie da!