Eine der kritischsten Variablen für die Datenbankleistung ist die SQL-Indexfragmentierung. Wenn der Fragmentierungsgrad nicht angemessen verwaltet wird, kann es zu Blockierungen, Deadlocks, IO-Problemen und Disk-Spill-Problemen kommen. Es kann auch zu einem unpassenden Ausführungsplan führen.
DMVs
In SQL Server können wir den DMV sys.dm_db_index_physical_stats verwenden, um Informationen über den Indexfragmentierungsgrad, die Seitenzahlen und die Indextypen zu erhalten.
SSMS
Wir können auch die eingebauten SQL Server Berichte ‚Index Physical Statistics‘ in SSMS verwenden
Wir erhalten die Index Physical Statistics für die Datenbank im folgenden Format.
Wir sind darauf beschränkt, diesen Bericht auf Datenbankebene auszuführen, und wenn wir mehrere Datenbanken in der Instanz und viele Instanzen zu verwalten haben, wird es zu einer zeit- und ressourcenaufwändigen Aufgabe, die Details zu sammeln, den Status auf der Grundlage unseres Schwellenwerts zu analysieren und dann über die Neuerstellung oder Reorganisation des SQL-Index zu entscheiden.
Benutzerdefinierte Skripte
Wir können auch benutzerdefinierte Skripte verwenden, um die Fragmentierungsprobleme zu erkennen und zu beheben, aber es ist auch ein komplizierter Prozess, die Ergebnisse manuell zu erstellen und zu analysieren. Vielleicht möchten wir alle diese Informationen an einem zentralen Ort sammeln und dann die Strategie für die Indexpflege festlegen. Wir können die Befehle Alter Index verwenden, um den Fragmentierungsgrad zu entfernen. Bei kleinen Datenbanken sind die Seitenzahlen beim Wiederaufbau des Index nicht so wichtig, aber bei großen Datenbanken müssen wir auch diese berücksichtigen.
Drittanbieter-Tools
Mit ApexSQL Defrag können wir die vorhandene SQL-Indexfragmentierung leicht überwachen, analysieren und entfernen. Wir können mehrere Instanzen und Datenbanken in einem grafischen Tool verwalten. Dieses Tool bietet uns folgende Vorteile.
- Es bietet eine grafische Benutzeroberfläche, um die Indexfragmentierung zu überwachen und zu analysieren
- Wir können die Indexwartung für alle SQL Server-Instanzen und -Datenbanken durchführen
- Es bietet die Möglichkeit, die benutzerdefinierten Berichte auf der Grundlage unserer Anforderungen zu konfigurieren
- Wir können Richtlinien konfigurieren, um Indexwartungsaufgaben gemäß den benutzerdefinierten Metriken zu überprüfen und durchzuführen
- Wir können die Indexfragmentierung (schnell oder tief) analysieren, Füllfaktor festlegen, Online-Indexwartung
- Wir können die Berichte in den gewünschten Formaten (CSV oder HTML) vorbereiten
Sobald Sie das ApexSQL Defrag-Tool installiert und eine Instanz zur Überwachung konfiguriert haben, zeigt es schnell die Details des SQL-Indexfragmentierungsstatus an.
Wir sollten SQL-Index-Neuaufbau- oder Reorganisationsoperationen vermeiden, wenn sie nicht erforderlich sind. Wenn wir sehr große Indizes haben, dann kann die Analyse viel Zeit und mehr Systemressourcen in Anspruch nehmen. ApexSQL Defrag bietet die Möglichkeit, die Fragmentierung zu überprüfen.
- Begrenzt: In diesem Scan-Modus sammelt SQL Server begrenzte Informationen über die Fragmentierung. Er verursacht keine Leistungsprobleme für das System. Dies ist der Standardmodus in ApexSQL Defrag
- Sampled: In diesem Modus wird ein Teil des SQL-Indexes entnommen und die Fragmentierungsinformationen gesammelt
- Detailliert: Wir erhalten detaillierte Informationen über alle Indexseiten; dies kann einen gewissen Overhead bei den Systemressourcen verursachen, aber wir können es verwenden, wenn wir eine hohe Fragmentierung mit den oben genannten Scan-Modi beobachten
In ähnlicher Weise können wir den Fragmentierungsgrad in den Kategorien Hoch, Mittel und Niedrig einstellen.
Sie können auch Ihren eigenen Fragmentierungsschwellenwert festlegen, um die Indizes zu analysieren.
Sobald wir die Ergebnismenge analysiert haben, klicken Sie mit der rechten Maustaste auf den jeweiligen SQL-Index und Sie können mehrere Optionen auswählen.
- Analysieren (schnell)
- Analysieren (tief)
- Reorganisieren\Neubauen\Neubauen online
- Füllfaktor festlegen
- Wir können einen laufenden Auftrag für diesen Index anhalten, stoppen oder abbrechen. Es ist nützlich, wenn wir Leistungsprobleme oder Blockierungen aufgrund eines bestimmten Indexes sehen, können wir diesen Job selbst abbrechen
ApexSQL Defrag ermöglicht die Erstellung der Richtlinien aus den vordefinierten Vorlagen oder durch die benutzerdefinierten Parameter. Die Vorlage eignet sich auch für die meisten SQL-Index-Defragmentierungsanforderungen.
Mit diesen Vorlagen können wir entscheiden, ob wir alle Indizes oder Indizes auf der Grundlage von Schwellenwerten im Offline- oder Online-Modus defragmentieren möchten. Ich möchte zum Beispiel die Richtlinie erstellen, dass die 50 % der am stärksten fragmentierten Indizes über 30 % online neu erstellt werden oder dass bei einer Fragmentierung von über 10 % eine Reorganisation erfolgt.
Wir können auch die Ressourcenschwellenwerte für CPU, Speicherlast, Transaktionsprotokollnutzung und aktive Transaktionen konfigurieren. Bei der Wartung von Indizes über den Wartungsassistenten oder benutzerdefinierte Skripte ist diese Kontrolle nicht möglich.
Wenn die Ressource belegt ist, können wir auch den Zeitpunkt der Wiederholung festlegen. Ich habe die Anforderungen einiger Benutzer gesehen, die die Wartung nicht ausführen wollen, nachdem ihre magere Datenbanknutzungszeit vorbei ist. Wenn wir die Wartung durchführen, müssen wir den Job manuell stoppen, oder wir müssen einen anderen SQL-Agent-Job erstellen, um den Indexwartungsjob zu einem bestimmten Zeitpunkt zu stoppen.
ApexSQL Defrag bietet Overhead, um mehrere Jobs zu konfigurieren und zu überwachen. Wir können den Index-Wartungsjob nach einer Anzahl von N Stunden abbrechen.
Im obigen Screenshot sehen Sie, dass wir die SQL-Index-Wartung durch den Fragmentierungsgrad, die Indexgröße und die Seitenzahlen weiter anpassen können. Sie können die Verzögerung für gesperrte Objekte nach einer bestimmten Zeit festlegen. Manchmal möchten wir den Index ausschließen, bei dem die Anzahl der Indexseiten kleiner oder größer als die angegebene Anzahl ist.
Sie können die Änderungen vornehmen und sie als Vorlage zur Wiederverwendung konfigurieren. Nachdem wir die Indexpflege durchgeführt haben, erhalten Sie auf der Registerkarte Aktivitäten einen hervorragenden Überblick über die Indexfragmentierungsstatistiken vor und nach der Pflege. Es ist wichtig zu wissen, ob der Fragmentierungsgrad des Index nach der Wartung unter Kontrolle ist oder nicht. Normalerweise müssen wir den Fragmentierungsgrad erneut erfassen, aber mit diesen Informationen sparen wir uns den Overhead.
Im Abschnitt Berichte können wir die Berichte auf Serverebene, den Gesamtbericht, einsehen.
Wir können auch eine schöne Ansicht der Top 10 geclusterten und nicht geclusterten Indizes erhalten.
Wir sind auch daran interessiert, das CPU- und Speicherverhalten während der laufenden Indexwartung zu kennen. Wir können diese nützlichen Informationen erhalten und auch die Systemressourcen im Auge behalten.
Wir können alle Berichte exportieren und die Exportoption konfigurieren. Möglicherweise möchten wir begrenzte Informationen extrahieren, während wir sie untersuchen. ApexSQL Defrag gibt Ihnen die Möglichkeit zu wählen, welche Informationen angezeigt werden sollen, wie z.B. Diagramme, Statistiken, SQL-Index-Statistik-Diagramme, die wir in den Bericht aufnehmen wollen.
Fazit:
ApexSQL Defrag Tool macht es einfach für die DBA’s, die administrative Aufgabe mit einer besseren SQL-Index-Überwachung und Wartung zu tun. Sie erhalten alle Informationen in einem grafischen Tool mit benutzerdefinierten Grafiken, Richtlinien und verschiedenen informativen Berichten.