Indexfragmentierung bei SQL Server beheben

 

Grundlegendes zur SQL Server-Indexfragmentierung

Indizes spielen eine entscheidende Rolle für die Leistung von SQL Server-Anwendungen. Indizes werden in Spalten in Tabellen oder Ansichten erstellt und stellen eine schnelle Möglichkeit dar, Daten basierend auf den Werten dieser Spalten nachzuschlagen. Ein Index ist eine Struktur auf der Festplatte, die aus Schlüsseln besteht, die auf eine oder mehrere Spalten in der Tabelle oder Ansicht verweisen. Indizes werden auf der Festplatte in einer B-Strukturdarstellung gespeichert. Wenn Sie einen Index für eine Spalte erstellen und dann anhand der Werte im Index nach einer Zeile suchen, findet SQL Server diesen Wert zunächst im Index und verwendet dann den Index, um die Zeilendaten in der Datenbank schnell zu finden. Ohne den Index müsste SQL Server die Tabelle durchsuchen, um die Zeilendaten zu finden, was erheblich mehr E/A erfordern würde und viel langsamer wäre.

Indexfragmentierung kann die Leistung beeinträchtigen

Indizes sind für die Leistung relationaler Datenbanken sehr hilfreich. Fragmentierung tritt auf, wenn die Reihenfolge der Seiten in einem Index nicht mit der physischen Reihenfolge in der Datendatei übereinstimmt. Bei der ersten Erstellung eines Index gibt es keine Fragmentierung. Wenn die Datenbank jedoch verwendet wird und Daten eingefügt, aktualisiert und gelöscht werden, werden die Indizes fragmentiert, was die Leistung beeinträchtigen kann. Es gibt zwei Arten von Indexfragmentierung:

 

Interne Fragmentierung

Interne Fragmentierung tritt auf, wenn auf Datenseiten zu viel freier Speicherplatz vorhanden ist. Wenn Sie Daten in eine Tabelle einfügen und die Daten unter der Datenseitengröße von SQL Server liegen, weist SQL Server eine Seite zum Speichern dieser Daten zu. Andernfalls weist SQL Server mehrere Seiten zu, um die Daten zu speichern, und diese Datenseiten sind oft nicht voll. Löschvorgänge führen zu interner Fragmentierung, da sie leeren Speicherplatz auf der Datenseite hinterlassen. Wenn eine Tabelle zum Beispiel mit 1.000 Datenseiten beginnt, die zu 100 % gefüllt sind, gibt es keine Indexfragmentierung. Nach ausgiebiger Nutzung könnte diese Tabelle jedoch vielleicht 1.200 Datenseiten aufweisen, die nur zu 80 % gefüllt sind. Wenn SQL Server den Index durchsucht, muss 20 % mehr Arbeit geleistet werden, da 1.200 Seiten statt der ursprünglichen 1.000 Seiten durchsucht werden. Nicht vollständig gefüllte Datenseiten erhöhen auch die Cachegröße von SQL Server, da die Zwischenspeicherung auf Seitenebene stattfindet.

Externe Fragmentierung

Externe Fragmentierung tritt auf, wenn die Datenseiten in der falschen Reihenfolge vorliegen. Dies kann auf einen Einfügevorgang oder eine Aktualisierung zurückzuführen sein, wodurch ein vorhandener Datensatz länger wird, eine Indexblattseite voll ist und mehr Speicherplatz benötigt wird. SQL Server führt dann einen Seitenteilungsvorgang durch, bei dem eine neue Seite erstellt und 50 % der Zeilen von der vollen Seite zur neuen Seite verschoben werden. Dies führt zu einer logischen Fragmentierung, da die neue Seite in der Regel physisch nicht an die ursprüngliche Seite anschließt. Externe Fragmentierung führt zu erhöhter E/A nach dem Zufallsprinzip, bei der SQL Server Indexdaten von vielen Stellen lesen muss, anstatt die Daten sequenziell lesen zu können.

Indexfragmentierung beheben

Wenn bei einer Tabelle mit Indizes Einfüge-, Aktualisierungs- und Löschvorgänge durchgeführt werden, werden die Indizes der Tabelle immer stärker fragmentiert. Eine regelmäßige Wartung ist notwendig, um zu verhindern, dass die SQL Server-Indexfragmentierung die Leistung beeinträchtigt. Sie können die Indexfragmentierung beheben, indem Sie den Index neu erstellen oder defragmentieren. Bei einem geringen Fragmentierungsgrad können Sie den Index defragmentieren. Bei einem hohen Fragmentierungsgrad sollten Sie den Index neu erstellen.

Sie können SQL Server Management Studio (SSMS) oder T-SQL verwenden, um mit der Verwaltung der Indexfragmentierung zu beginnen. Um mittels SSMS auf Indexfragmentierung zu prüfen, öffnen Sie den Objekt-Explorer und navigieren Sie zu dem Index, den Sie prüfen möchten. Klicken Sie mit der rechten Maustaste auf den Index und klicken Sie auf „Eigenschaften“ und „Fragmentierung“, um die Prozentsätze für Fragmentierung und Seitenfüllung anzuzeigen. Sie können zudem die Systemfunktion sys.dm_db_index_physical_stats verwenden, um die Fragmentierung von Daten und Indizes für eine bestimmte Tabelle oder Ansicht anzuzeigen.

Viele Unternehmen verwenden Wartungspläne, um regelmäßige Index-Defragmentierungen oder ‑Neuerstellungen durchzuführen. Dieser Ansatz führt jedoch oft zu einer Verschwendung von Ressourcen und einem Anstieg der Transaktionsprotokollgröße, da in der Regel jeder Index in der Datenbank neu erstellt oder defragmentiert wird, unabhängig davon, ob dies erforderlich ist. Es ist besser, einen detaillierteren Ansatz zu verwenden, bei dem Sie Indizes nur defragmentieren oder neu erstellen, wenn sie einen bestimmten Fragmentierungsgrad erreichen.

SQLsentry

SolarWinds SQL Sentry

Mit SQL Sentry, unserer installierten Softwarelösung, können Sie Ihre gesamte Datenbankumgebung effektiv überwachen, diagnostizieren und optimieren.

Kostenlose 14-Tage-Testversion herunterladen

 

Schlüsselfunktionalität für ein Leistungsüberwachungstool, das die Defragmentierung von SQL Server-Indizes unterstützt

Obwohl Sie die Indexfragmentierung manuell mit SSMS oder T-SQL überprüfen können, können spezialisierte Tools für das Datenbank-Leistungsmanagement diese Aufgabe wesentlich einfacher und effizienter gestalten. Dies sind einige der wichtigsten Index-Wartungsfunktionen, die ein Tool benötigt:

  • Automatische und manuelle Multi-Server-Indexdefragmentierung
  • Benutzerdefinierte Wartungspläne für SQL Server-Instanzen, Datenbanken und Indizes
  • Richtlinienbasierte Neuorganisations- und Neuerstellungsvorgänge
  • Festlegung von Indexgrößen-Grenzwerten und Auffüllungsprozentsätzen
  • Festlegung der Höchstdauer von Indexwartungsvorgängen
  • Durchführung von gleichzeitiger Defragmentierung und Möglichkeit der Festlegung von Gleichzeitigkeitsstufen
  • Meldung von Indexfragmentierungswerten

 

Fundiertere Entscheidungen zu Defragmentierungsvorgängen

Die SQL Server-Fragmentierung muss nicht unbedingt viel Zeit und Ressourcen in Anspruch nehmen. SQL Sentry Fragmentation Manager ermöglicht es Ihnen, die optimalen Entscheidungen darüber zu treffen, wann und wie Ihre Indizes defragmentiert werden sollten. Erstellen Sie einen Zeitplan für Ihre gesamte Umgebung, um Indexdefragmentierungsvorgänge zu automatisieren. Passen Sie den Zeitplan an Ihre Bedürfnisse für bestimmte Instanzen, Tabellen, Datenbanken und deren Indizes an. Mit gleichzeitigen Vorgängen können Sie die Indexdefragmentierung schneller und produktiver durchführen.

Ermitteln Sie die teuersten Operatoren bei der Optimierung von SQL-Abfragen mit aufschlussreicher Farbcodierung. Konzentrieren Sie sich auf die Betriebskosten bestimmter Ressourcen nach E/A oder CPU.

Mit Fragmentation Manager können Sie außerdem Zeit bei der Defragmentierung Ihrer Indizes sparen, indem Sie die Wartungsfensterzeiten reduzieren und gleichzeitige Defragmentierungsvorgänge durchführen.

Sehen Sie sich dieses Video an, um sich einen Überblick über die Registerkarte „Indexes“ (Indizes) im SentryOne Performance Analysis Dashboard zu verschaffen sowie eine Anleitung zu erhalten, wie Sie Fragmentation Manager für die Durchführung automatischer Indexwartungsaktivitäten konfigurieren.

Erfahren Sie, wie SolarWinds SQL Sentry bei der Behebung von Indexfragmentierung hilf

 

Testversion downloaden