Ich habe einen nicht gruppierten, nicht eindeutigen Index für eine Fremdschlüsselspalte vom Typ bigint
. Wenn ich den Index online neu erstelle, sinkt die durchschnittliche Fragmentierung auf 3% mit 2 Fragmenten und 30 Seiten.
Wenn ich denselben Wiederherstellungsindex offline ausführe, beträgt die durchschnittliche Fragmentierung 25% mit 4 Fragmenten und 28 Seiten.
Ich denke das FILLFACTOR
ist 90. Die Datenbank ist 77GB. Ich bin kein DBA oder ähnliches, ich bin ein C # -Entwickler, daher bin ich nicht mit allen Begriffen vertraut. In dieser Tabelle gibt es keine Aktivität. Dies tritt in unserer Entwicklungsumgebung auf.
Dies ist die Abfrage mit redigierten Namen.
ALTER INDEX [IX] ON [dbo].[Table]
REBUILD WITH
(
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON,
ONLINE = ON,
SORT_IN_TEMPDB = ON
);
Was könnte diesen Unterschied verursachen? Die gleiche Situation tritt bei mehreren Tabellen auf.
Antworten:
Dies ist keineswegs eine vollständige Antwort, kann aber die Dinge ein wenig bewegen, wenn Sie etwas Ähnliches ausprobieren und Ihre Ergebnisse melden.
Ich konnte sie nicht reproduzieren. Mit der folgenden Testtabelle
Und mehrere Läufe des folgenden Skripts
Ich habe durchweg Ergebnisse wie
Online = AUS
Online = EIN
Zumindest im Test habe ich die Unterschiede zwischen den beiden in Bezug auf die Fragmentierung ausgeglichen (obwohl ich ähnlich wie bei Ihrem Test festgestellt habe, dass die Online-Neuerstellung des Index zu einer höheren Seitenzahl geführt hat).
Ich fand heraus, dass die
Online = OFF
Version immer einheitliche Ausmaße verwendete und keine einzelnen Seitenzuordnungen hatte, währendOnline = ON
die Indexstammseite und die erste Indexblattseite immer in gemischten Ausmaßen zu sein schienen.Wenn Sie die erste Indexblattseite in gemischtem Umfang und den Rest in zusammenhängenden einheitlichen Ausmaßen platzieren, wird eine Fragmentanzahl von 2 erstellt.
Die
Online = OFF
Version vermeidet das Fragment, das durch die einzelne Indexblattseite verursacht wird, aber die Kontiguität der Blattseiten wird durch die Indexstammseite unterbrochen, die dieselben Ausmaße aufweist, und auch diese hat eine Fragmentanzahl von 2.Ich habe meinen Test in einer neu erstellten Datenbank mit 1 GB freiem Speicherplatz und ohne gleichzeitige Aktivität ausgeführt. Möglicherweise ist die
Online = OFF
Version anfälliger für gleichzeitige Zuweisungen, was dazu führt, dass ihr nicht zusammenhängende einheitliche Ausmaße zugewiesen werden.quelle
Die Fragmentierung hängt von Ihrem Dateisystem ab. Lokal haben Sie möglicherweise Millionen von Dateien, die den meisten Speicherplatz beanspruchen, und es gibt einige freie Speicherplätze auf einer Festplatte, auf denen einige Daten gespeichert werden können. Wenn also ganze Indexdaten nicht in einem Raum gespeichert werden können, werden sie in mehrere Teile fragmentiert. Online haben Sie möglicherweise eine leere Festplatte mit vielen nicht zugewiesenen Speicherplatzteilen, die zum Speichern der gesamten Tabelle oder des Index oder was auch immer verwendet werden können
quelle