17. Dezember 2010 16:11
Oh je ...
Nun, Füllfaktoren können wichtig sein, es ist aber entscheidend wo und wie man ihn einstellt. Den "
Standard Füllfaktor" auf SQL Server Instanz-Ebene zu setzen ist Quatsch - das betrifft dann
alle Tabellen/Indexe in
allen Datenbanken ...
Wenn man den FF nicht mit
Tools berechnen und individuell einstellen kann, dann sollte man einen Wartungsplan mit dem "
Index Rebuild" Task erstellen und dort den freien Speicher eintragen; also für einen FF von 90% eben "10% freier Speicher" angeben.
Letztlich kommt es beim FF auf das aufzunehmende Wachstum der DB innerhalb des Wartungszeitraumes an; heißt also: ein FF von 90% (10% frei) ist gedacht um ein durchschnittliches Wachstum vom 10% innerhalb des Wartungszeitraumes (Woche?) aufzunehmen.
Bei einer DB von 100GB+ Größe (netto?) bedeutet das, dass ein Wachstum von 10GB pro Woche angenommen wird ... ist das plausibel?
Leider wachsen auch nicht alle Indexe gleich stark, deshalb ist es nicht einfach einen optimalen "globalen FF" zu finden, aber ich würde das mal auf 95% (5% frei) ändern.
Zum "Table Optimizer": Der TO baut die Indexe stets komplett neu auf (CREATE INDEX WITH DROP EXISTING); im Gegensatz zum "Rebuild Index" (ALTER INDEX REBUILD).
Das Ergebnis des TO ist normalerweise nur marginal besser, aber sowas erzeugt natürlich super Last im System und dauer eeeeewig lange.
CREATE WITH DROP EXISTING ist etwa so, als würdest Du bei denem PC ständig FORMAT C:\ durchführen und alles neu installieren; ALTER INDEX defragmentiert eben nur (und wenn man's richtig macht mit schneller Laufzeit, minimalem Impact und sehr gutem Ergebnis).
Der FF bleibt aber auch mit dem TO erhalten, dafür sorgt der "Standard" FF ...
Mein Rat: Finger weg von dem "Table Optimizer" - der Wartungsplan macht's besser (und wie man's noch besser machen kann steht z.B.
hier)
P.S.: Über wie viel "Platzeinsparung" reden wir denn hier? Und wie lange hält die "Ersparnis" an?