Wann sollte ich die Indizes in meiner relationalen Datenbank (SQL Server) neu erstellen?
Gibt es Gründe für die regelmäßige Neuerstellung von Indizes?
sql-server
index-maintenance
Nick Chammas
quelle
quelle
Antworten:
In meiner Antwort gehe ich davon aus, dass Sie regelmäßig einen Indexpflegeprozess durchführen sollten. Bei der Indexpflege sollten jedoch nur die Indizes neu erstellt / organisiert werden, für die dies ausdrücklich erforderlich ist.
Dies wirft die Frage auf: Wann muss ein Index neu erstellt oder organisiert werden? Rolando hat das schön angerührt. Auch hier riskiere ich, extrem breit zu sein. Ein Index muss gewartet werden, wenn der Fragmentierungsgrad die Leistung beeinträchtigt. Dieser Fragmentierungsgrad kann je nach Größe und Zusammensetzung des Index variieren.
Wenn ich für SQL Server spreche, wähle ich in der Regel eine Indexgröße und eine Indexfragmentierungsstufe, ab der ich mit der Indexwartung beginne. Wenn ein Index weniger als 100 Seiten enthält, führe ich keine Wartung durch.
Wenn ein Index zwischen 10% und 30% fragmentiert ist, werde ich
REORGANIZE
den Index undUPDATE
die Statistik. Wenn ein Index zu mehr als 30% fragmentiert ist, werde ichREBUILD
den Index - mit neinUPDATE STATISTICS
, da dies von derREBUILD
. Beachten Sie jedoch, dass bei einer Neuerstellung nur das Statistikobjekt aktualisiert wird, das direkt mit dem Index verknüpft ist. Andere Spaltenstatistiken müssen separat gepflegt werden.Diese Antwort ist wirklich nur ein langer Weg zu sagen: Ja, Sie sollten eine routinemäßige Indexpflege durchführen, jedoch nur für die Indizes, die dies benötigen.
quelle
Sie sollten Indizes neu erstellen, wenn sie durch besondere Ereignisse stark fragmentiert werden. Beispielsweise führen Sie eine große Datenmenge in eine indizierte Tabelle aus.
Was ist, wenn Ihre Indizes aufgrund regelmäßiger Aktivitäten regelmäßig fragmentiert werden? Sollten Sie regelmäßige Wiederherstellungen einplanen? Wie oft sollten sie rennen?
Tom Kyte empfiehlt in diesem klassischen Ask Tom-Thread :
Die Logik hier ist solide, aber sie ist gegen ein leselastiges Lastprofil vorgespannt.
Ein "fetter" Index (dh ein Index mit vielen Lücken) bietet in der Tat ausreichend Platz für neue und verschobene Zeilen, wodurch Seitenteile reduziert und das Schreiben beschleunigt werden. Wenn Sie jedoch aus diesem Fettindex lesen, müssen Sie mehr Seiten lesen, um die gleichen Daten zu erhalten, da Sie jetzt mehr leeren Raum durchsuchen. Dies verlangsamt das Lesen.
In Datenbanken mit hohem Lesezugriff möchten Sie Ihre Indizes regelmäßig neu erstellen oder organisieren. (Wie oft und unter welchen Bedingungen? Matt M hat bereits eine konkrete Antwort auf diese Frage.) In Datenbanken mit ungefähr gleichwertigen Lese- und Schreibaktivitäten oder in Datenbanken mit hohem Schreibaufwand können Sie die Leistung Ihrer Datenbank wahrscheinlich beeinträchtigen, indem Sie Indizes neu erstellen regelmäßig.
quelle
Die meisten Leute bauen sie regelmäßig um, damit sie nie fragmentiert werden. Wann Sie sie neu erstellen müssen, hängt davon ab, wie schnell sie fragmentiert werden. Einige Indizes müssen häufig neu erstellt werden, andere im Grunde nie. Schauen Sie sich das Skript an, das SQLFool zusammengestellt hat und das viele Aufgaben für Sie erledigt.
quelle
Wie in der akzeptierten Antwort von Matt M erwähnt, lautet eine allgemeine Faustregel, dass Indizes, die zu mehr als 30% fragmentiert sind, neu erstellt werden sollten.
Mithilfe dieser Abfrage können Sie herausfinden, wie viele Indizes zu mehr als 30% fragmentiert sind (bei einigen sollten Sie sie neu erstellen):
quelle
Wenn der Prozentsatz der Indexfragmentierung mehr als 30% beträgt.
Es gibt keinen solchen Fall, aber im Allgemeinen ist die einmal wöchentliche Indexpflege über das Wochenende die beste Methode, um die Umgebung stabil zu halten.
Ich würde die Verwendung von Wartungsskripten von Ola Hallengren (beste Wartungsskripten) empfehlen, die Skripten an Ihre Umgebung anpassen und für die Ausführung über das Wochenende planen.
https://ola.hallengren.com/
Hinweis: Vergessen Sie nicht, die Statistiken nach dem Neuerstellen der Indizes zu aktualisieren, da beim Neuerstellen der Indizes nicht alle Statistiken aktualisiert werden.
quelle
Wie bei den meisten Dingen in der IT kommt es darauf an. Welches Problem versuchen Sie zu beheben, indem Sie Indizes neu erstellen? Können Sie zeigen, dass es das Problem tatsächlich behebt? Wenn ja, passen Sie die Zahlen an, bis Sie den geringsten Wartungsaufwand haben, den Sie zur Behebung des Problems benötigen.
Wenn sich das Problem dadurch nicht beheben lässt oder Sie es nur tun, um eine von Ihnen überwachte Kennzahl zu beruhigen, da dies möglicherweise zu einer Verbesserung der Situation führt, brennen Sie lediglich CPU und E / A und verschlimmern möglicherweise Ihr Problem.
Es gibt ein Argument, dass das Reparieren der Fragmentierung für Ihren Server keinen Unterschied macht. Lohnt es sich also überhaupt, dies regelmäßig zu tun?
https://www.brentozar.com/archive/2017/12/index-maintenance-madness/
http://brentozar.com/go/defrag
quelle