Indexwartung · Teil 3 von 3

Wenn der Index ohne Wartung wächst

Warum eine stabile Seitendichte keine Ruhe im Index bedeutet – und wie sich die Kosten des Eingreifens und Abwartens vergleichen lassen.

8. Oktober 2026 · ca. 10 Minuten

Plateau SQL Server 2022Leerstart-Kontrolle 2022/2025Gewachsen bis 3,6 Mio. ZeilenMitraten 10 Fragen ↓

Der Befund in 30 Sekunden

  1. Ohne Wartung stabilisierte sich die mittlere Seitendichte in unserem Versuch um 68 %, bei beiden getesteten Startzuständen.
  2. Das ist kein Ruhezustand: Im Plateau entstanden weiter rund 225 Split-Logrecords je 10.000 Inserts.
  3. Abwarten kostet Platz: Nach 60 simulierten Tagen belegte der ungewartete Index 24 % mehr Blattseiten als einer mit frühem REBUILD. Eingreifen kostet ebenfalls; welche Rechnung aufgeht, entscheidet die Last.
  4. Bei aufsteigenden Schlüsseln hilft die beim REBUILD angelegte Reserve frisch angehängten Zeilen nicht, wenn diese später wachsen.

Abwarten ist auch eine Strategie

Eine mögliche Wartungsstrategie ist, zunächst gar nicht einzugreifen. Was passiert dann bei fortgesetzten zufällig verteilten Inserts? In unseren Versuchen stabilisiert sich die mittlere Seitendichte, während weitere Split-Logrecords entstehen. Daraus ergibt sich die praktische Frage: Ist dieser Zustand für die eigene Arbeitslast akzeptabel, oder lohnt ein gezielter Eingriff?

Das ist Teil 3 einer Reihe. Teil 1 erklärt Seiten, Splits und Reserve mit Bildern. Teil 2 vergleicht REORGANIZE und REBUILD bei gleicher Ausgangslage.

Der Aufbau

Eine GUID als Clustering-Key plus 100 Byte Nutzdaten, 123 Byte je Zeile. Die Schlüssel stammen aus einer reproduzierbaren, breit verteilten Hashfolge.

  • Zwei dichte Starts: 100.000 Zeilen, einmal mit Fillfactor 100 aufgebaut, einmal mit Fillfactor 81. Danach dieselben zufällig verteilten Inserts, einzeln, ohne jede Index- oder Statistikwartung. Gemessen nach jedem Schritt: Seitendichte über alle Blattseiten, Fragmentierung, Split-Logrecords (LOP_DELETE_SPLIT, wie in Teil 2 erklärt).
  • Plateaukriterium, vorab festgelegt: Über die letzte Million eingefügter Zeilen schwankt die Dichte um höchstens einen Prozentpunkt und steigt oder fällt um höchstens 0,5 Prozentpunkte je Million. Wir lassen mindestens bis 3,1 Millionen Zeilen wachsen und dann so lange, bis das mit mindestens elf Messpunkten erfüllt ist.
  • Gegenkontrolle: die ungewarteten Läufe aus Teil 2, leer gestartet, auf SQL Server 2022 und 2025.

Die dichten Starts liefen nur auf SQL Server 2022, die Gegenkontrolle auf beiden Versionen.

Das Plateau

Grafik 1

Die Seitendichte kommt zur Ruhe, die Split-Logrecords laufen weiter

Zwei dichte Starts mit 100.000 Zeilen, danach nur zufällig verteilte Einzelinserts. SQL Server 2022.

Start FF100Start FF81SQL Server 2022, ohne jede WartungSeitendichte über alle Blattseiten (Achse ab 50 %)Plateaufenster FF100Plateaufenster FF8150 %60 %70 %80 %90 %100 %Referenz Leerstart 2022/2025: 68,24 %, kein Grenzwert98,8 % beim Start (FF100)54,0 % nach 10.000 Inserts81,8 % beim Start (FF81)68,48 %68,20 %00,511,522,533,5Split-Logrecords je 10.000 neue Zeilen (volle Skala)04008001.2001.6001.593 im ersten Schritt (FF100)00,511,522,533,5Zeilen im Index (Mio.)Detailansicht Plateau: ab 1 Mio. Zeilen, eigene AchsenPlateaufenster FF100Plateaufenster FF8166 %67 %68 %69 %70 %Split-Logrecords je 10.000 (Achse bis 300)0100200300Plateau: 226,4 (FF100) und 223,1 (FF81)11,522,533,5 Start FF100Start FF81SQL Server 2022, ohne jede WartungSeitendichte über alle BlattseitenAchse ab 50 %FF100FF8150 %75 %100 %Leerstart 2022/2025: 68,24 %98,8 % beim Start (FF100)54,0 % nach 10.000 Inserts81,8 % beim Start (FF81)68,48 %68,20 %0123Split-Logrecords je 10.000neue Zeilen (volle Skala)08001.6001.593 im ersten Schritt (FF100)0123Zeilen im Index (Mio.)Detailansicht Plateau:ab 1 Mio. Zeilen, eigene AchsenFF100FF8166 %68 %70 %Split-Logrecords je 10.000 (Achse bis 300)0100200300Plateau: 226,4 (FF100) und 223,1 (FF81)123
Oben die mittlere Seitendichte nach jedem Messschritt, darunter die Split-Logrecords des Schritts je 10.000 neue Zeilen (volle Skala bis 1.600; der erste Schritt nach Start FF100 liegt bei 1.593). Die Detailansicht zeigt den Bereich ab 1 Mio. Zeilen mit eigenen Achsen; oben je Start das Plateaufenster (letzte Million Zeilen). Je Start eine deterministische Trajektorie, SQL Server 2022. Gestrichelte Referenz: Endwert der leer gestarteten Läufe aus Teil 2 (SQL Server 2022 und 2025). Das Plateau ist eine Beobachtung in diesem Versuchsfenster, kein Grenzwert und kein Wartungsziel. Quelle: Eigene Messung, LAB-12 Plateau-Gegenprobe, SQL Server 2022, 06.10.2026; Leerstart-Kontrolle SQL Server 2022/2025, 05.10.2026
Daten zur Grafik
Zeilen (Mio.)FF100 DichteFF100 Split-Logrecords je 10.000FF81 DichteFF81 Split-Logrecords je 10.000
0,1098,78 %–81,82 %–
0,1153,96 %1.59389,20 %22
0,1258,70 %971,28 %696
0,1363,59 %058,27 %846
0,1468,48 %058,06 %282
0,1573,12 %1161,23 %60
0,1677,05 %3965,09 %13
0,1778,30 %14668,94 %12,0
0,1876,22 %29972,57 %22
0,1972,04 %42775,37 %63
0,2067,30 %51576,77 %130
0,2164,36 %44976,37 %229
0,2262,66 %38574,58 %309
0,2362,00 %30971,34 %424
0,2462,36 %21468,16 %459,0
0,2563,40 %14665,68 %440
0,2664,69 %119,064,12 %384,0
0,2766,37 %7763,20 %339
0,2868,10 %6863,07 %260
0,2969,82 %6863,32 %216
0,3071,18 %96,063,92 %175,0
0,4067,83 %260,472,45 %129
0,5065,63 %266,567,23 %296,5
0,6069,86 %150,865,75 %261,8
0,7070,20 %215,068,93 %159,8
0,8067,84 %281,670,12 %195,2
0,9066,56 %267,369,09 %250,2
1,0066,81 %224,767,50 %276,4
1,1068,13 %182,766,86 %253,5
1,2069,06 %191,967,05 %224,9
1,3069,53 %204,367,70 %201,8
1,4069,31 %23468,69 %184,4
1,5068,72 %251,669,23 %198,8
1,6068,12 %256,969,26 %222,6
1,7067,63 %254,768,95 %241,2
1,8067,33 %247,668,56 %247,1
1,9067,34 %23068,21 %248
2,0067,61 %211,467,90 %247,4
2,1067,83 %214,667,68 %243,7
2,2068,09 %210,567,54 %239,6
2,3068,38 %204,767,56 %227,6
2,4068,74 %198,167,73 %214,8
2,5068,97 %208,967,90 %215,8
2,6068,99 %222,868,09 %213,3
2,7068,97 %225,668,32 %206,9
2,8068,91 %230,368,51 %208,7
2,9068,79 %236,568,65 %213,6
3,0068,53 %250,968,70 %221,9
3,1068,37 %24268,76 %220,4
3,2068,20 %244,368,70 %230,5
3,30––68,69 %226,1
3,40––68,65 %230,8
3,50––68,65 %226,2
3,60––68,48 %245,8

Erste 20 Schritte zu je 10.000 Inserts, danach Schritte zu 100.000. Split-Logrecords je 10.000 = Split-Logrecords des Schritts, umgerechnet auf 10.000 neue Zeilen. Plateaufenster: die letzte Million Zeilen je Start (11 Messpunkte).

Seitendichte der beiden dichten Starts ohne Wartung, SQL Server 2022
StartDichte am AnfangZeilen am EndeDichte am EndeDichte in der letzten Million
FF10098,8 %3,2 Mio.68,20 %68,09–68,99 %
FF8181,8 %3,6 Mio.68,48 %68,09–68,76 %

Im ersten Schritt ist die Splitaktivität beim dicht gebauten Index besonders hoch; die Dichte fällt in den ersten 10.000 Inserts von 98,8 % auf 54,0 %. Danach schwingt sie sich ein. Ab etwa 1,4 Millionen Zeilen liegen beide Kurven höchstens gut einen Prozentpunkt auseinander, bei 3,2 beziehungsweise 3,6 Millionen Zeilen ist unser Plateaukriterium über die jeweils letzte Million erfüllt. Der Startzustand verliert sich.

Die leer gestarteten Läufe aus Teil 2 enden auf SQL Server 2022 und 2025 bei 68,24 %. Das ist eine gerundete Übereinstimmung zweier verschiedener Versuche, kein Genauigkeitsnachweis. Die 68 % sind eine Beobachtung in diesem Versuch: weder ein universeller Grenzwert noch ein Wartungsziel.

Die Splits hören nicht auf

Ein stabiler Durchschnitt klingt nach Ruhe. Das ist er nicht. Im Plateau entstehen bei Start FF100 226,4 und bei Start FF81 223,1 Split-Logrecords je 10.000 Inserts. Die leer gestarteten Läufe zeigen dasselbe: 4.559 Split-Logrecords in den letzten 200.000 Zeilen, also rund 228 je 10.000.

Dichte und Splitrate beantworten verschiedene Fragen. Die Dichte beschreibt den Zustand: Wie voll sind die Seiten im Mittel? Die Splitrate beschreibt die Veränderung: Wie viel wird umgebaut, damit es so bleibt? Ein stabiler Mittelwert sagt auch nicht, dass alle Seiten ähnlich voll sind. Frisch geteilte, halb volle Seiten und fast volle Seiten gleichen sich im Durchschnitt aus. Der Durchschnitt steht still, weil der Umbau gleichmäßig weiterläuft.

Abwarten gegen Eingreifen

Ohne Wartung fallen keine Wartungskosten an. Dafür zahlt der Index an zwei anderen Stellen: mit wiederkehrenden Splits bei einem Teil der Inserts und mit mehr Blattseiten.

Grafik 2

Nach 60 Tagen ohne Wartung: mehr Blattseiten und mehr Split-Logrecords

600.000 Zeilen, 10.000 Inserts je Tag, SQL 2022 und 2025 identisch.

Blattseiten am Ende des Labversuchs+24 %mehr ohne WartungKeine Wartung13.574Früher REBUILD FF8010.962Kumulierte Split-Logrecords3,2×so viele ohne WartungKeine Wartung13.631Früher REBUILD FF804.199Gegenrechnung: Wartungsaufwand der REBUILD-Strategie (SQL 2022, offline unter SIMPLE)Früher REBUILD FF80: 20 REBUILDs, 4,4 s, 4,3 MiB Log · Keine Wartung: kein Wartungsaufwand Blattseiten am Ende des Labversuchs+24 %mehr ohne WartungKeine Wartung13.574Früher REBUILD FF8010.962Kumulierte Split-Logrecords3,2×so viele ohne WartungKeine Wartung13.631Früher REBUILD FF804.199Gegenrechnung: Wartungsaufwandder REBUILD-Strategie (SQL 2022, offline)20 REBUILDs, 4,4 s, 4,3 MiB LogKeine Wartung: kein Wartungsaufwand
Grau: keine Wartung. Blau: früher REBUILD mit Fillfactor 80 (ab 1 % Fragmentierung). Gleiche Skala in beiden Paaren; Einheiten: Blattseiten am Ende des Labversuchs und kumulierte Split-Logrecords über 60 simulierte Tage. Darunter der Wartungsaufwand der REBUILD-Strategie. Lesezeiten haben wir nicht gemessen; aus 24 % mehr Seiten folgen nicht 24 % langsamere Abfragen. Quelle: Eigene Messung, LAB-12, SQL Server 2022/2025, 05.10.2026
Daten zur Grafik
StrategieBlattseiten 2022Blattseiten 2025Dichte am EndeSplit-Logrecords 2022Split-Logrecords 2025REBUILD / REORGANIZE
Keine Wartung13.57413.57468,2 %13.63113.6310 / 0
Früher REBUILD FF8010.96210.96284,5 %4.1994.19920 / 0

Tag 60 nach 600.000 Einzelinserts, leerer Start, GUID plus 100 Byte. Der letzte REBUILD lief an Tag 57; die Dichte des REBUILD-Index ist der Stand 3 Tage danach.

Keine Wartung gegen frühen REBUILD nach 60 simulierten Tagen
Strategie (60 Tage)Blattseiten am EndeDichte am EndeSplit-LogrecordsWartungsaufwand (SQL 2022)
Keine Wartung13.57468,2 %13.631–
Früher REBUILD FF8010.96284,5 %4.19920 REBUILDs, 4,4 s, 4,3 MiB Log

Der ungewartete Index belegt am Ende des Versuchs 24 % mehr Blattseiten und hat gut dreimal so viele Split-Logrecords erzeugt. Ein Scan über denselben Bestand muss bei geringerer Dichte mehr Blattseiten anfassen; Seiten, die schon im Buffer Pool liegen, verursachen dabei keine erneute Leseoperation von der Platte. Für Punktzugriffe spielt die Seitenzahl kaum eine Rolle. Aus 24 % mehr Seiten folgen deshalb nicht 24 % langsamere Abfragen; Lesezeiten haben wir hier nicht gemessen.

Die Gegenrechnung gehört dazu: Die REBUILD-Strategie brauchte 20 Eingriffe. Unsere Wartungszahlen gelten für diesen synthetischen Einzelindex, offline unter SIMPLE, gemessen als erzeugte Logrecord-Bytes. Ein Online-REBUILD schreibt deutlich mehr Log (Teil 2: 34 statt 1,6 MiB im eingefrorenen Vergleich), und ein Offline-REBUILD kann den Zugriff auf die Tabelle für die Dauer blockieren. Bei einem großen Produktionsindex verschieben sich diese Kosten erheblich. Keine routinemäßige Wartung kann deshalb die bessere Gesamtentscheidung sein.

Wann sich Eingreifen lohnen kann

Für einen Index mit zufällig verteilten Inserts lässt sich die Frage „abwarten oder eingreifen?“ an vier Punkten festmachen:

  • Wie schreiblastig ist er? Je mehr Inserts in bestehende Bereiche, desto mehr zählen die wiederkehrenden Splits.
  • Wie wird er gelesen? Viele Scans über große Bereiche profitieren von höherer Dichte; Punktzugriffe kaum.
  • Was kostet der Eingriff? Größe des Index, Recovery-Modell, Online- oder Offline-Betrieb, Wartungsfenster.
  • Was zeigt die Messung? Dieselbe Last vor und nach einem Probeeingriff, einschließlich der Zeit bis zum nächsten.

Vertiefung: Ein Jahr mit Reserve

Wie oft muss ein früher REBUILD laufen? Wir haben die Reservestrategie über 365 simulierte Tage verlängert, jeden Tag 10.000 Inserts, REBUILD sobald die Fragmentierung 1 % überschreitet. Ein simulierter Tag ist eine feste Insertmenge, kein Kalendertag.

Grafik 3

Die Abstände zwischen zwei REBUILDs werden mit wachsendem Index länger

Früher REBUILD mit Fillfactor 70 und 80, 365 simulierte Tage, SQL 2022. SQL 2025 identisch.

Fillfactor 70Fillfactor 80offen am JahresendeTage seit dem vorherigen REBUILD (je Tag 10.000 Inserts)0102030405060060120180240300365offen: 9 Tage58 Tage, Tag 298–356offen: 24 Tage32 Tage, Tag 309–341Simulierter Tag des REBUILD Fillfactor 70Fillfactor 80offen am JahresendeTage seit dem vorherigen REBUILD(je Tag 10.000 Inserts)02040600120240365offen: 958 Tageoffen: 2432 TageSimulierter Tag des REBUILD
Jeder Punkt ist ein REBUILD: waagerecht der simulierte Tag, an dem er lief, senkrecht die Tage seit dem vorherigen REBUILD (je Tag 10.000 Inserts). Hohle Rauten ohne Linie: das am Jahresende noch offene Intervall, kein abgeschlossener Wert. REBUILD ab 1 % Fragmentierung, offline unter SIMPLE. Ein simulierter Tag ist eine Insertmenge, keine Kalenderplanung. Quelle: Eigene Messung, LAB-12, SQL Server 2022/2025, 05.10.2026
Daten zur Grafik
REBUILD Nr.FF70 TagFF70 AbstandFF80 TagFF80 Abstand
15erster5erster
26161
38271
410281
512291
6153101
7183122
8224142
9275162
10336182
11407202
12488233
135810263
147012293
158414334
1610117374
1712120414
1814625465
1917428515
2020834576
2124941636
2229849707
2335658777
24––858
25––949
26––10410
27––11511
28––12712
29––14013
30––15515
31––17116
32––18918
33––20819
34––23022
35––25424
36––28026
37––30929
38––34132
Jahresende365offen: 9365offen: 24

Der erste REBUILD lief in beiden Läufen an Tag 5, sobald der Index 1.000 Blattseiten überschritt und die Fragmentierung über 1 % lag. Abstand = Tage seit dem vorigen REBUILD. SQL Server 2025: dieselben REBUILD-Tage.

Früher REBUILD über 365 simulierte Tage, Fillfactor 70 und 80
FillfactorREBUILDs im JahrLängstes abgeschlossenes IntervallSplit-LogrecordsWartung gesamt (SQL 2022)Blattseiten am Ende
702358 Tage5.32719,5 s · 19,8 MiB77.392
803832 Tage8.80529,8 s · 29,4 MiB65.592

Die Intervalle werden mit der Zeit länger. Jeden Tag kommen gleich viele Zeilen dazu, aber der Index wird größer. Dieselben 10.000 Zeilen verteilen sich auf immer mehr Seiten, und die Reserve jeder einzelnen Seite reicht länger. Ein Intervall vom Jahresende sagt deshalb nichts über einen jungen oder kleinen Index und ist keine Kalenderplanung.

Auch zwischen zwei REBUILDs entstehen Split-Logrecords, nur wenige: Im längsten FF70-Intervall, von Tag 298 bis Tag 356, kamen bei 580.000 neuen Zeilen 539 zusammen. Hochgerechnet mit der Plateau-Rate wären es ohne Wartung rund 13.000 gewesen; das ist eine Hochrechnung, kein eigener Kontrolllauf für dieses Intervall.

FF70 brauchte weniger Eingriffe als FF80 und erzeugte weniger Split-Logrecords, belegte am Jahresende aber 18 % mehr Seiten. Dieser Endzustand hängt auch davon ab, wie lange der letzte REBUILD jeweils zurücklag. Welcher Wert besser ist, hängt davon ab, was teurer ist: Schreiben oder Lesen.

Wachsende Zeilen bei aufsteigenden Schlüsseln

Bei IDENTITY oder NEWSEQUENTIALID landen neue Zeilen im einfachen Fall am Ende des Index. Neue Seiten werden dort angehängt und voll gefüllt. Der Fillfactor eines früheren REBUILD wirkt auf diese neuen Seiten nicht: Er galt nur für die Seiten, die beim REBUILD schon existierten.

Das wird sichtbar, wenn Zeilen nach dem Einfügen wachsen. Wir haben 90.000 Zeilen mit FF70 oder FF100 aufgebaut, 10.000 angehängt und danach 333 der neu angehängten Zeilen um je 100 Byte vergrößert.

Grafik 4

Wachsende Updates auf neuen Seiten: gleiche Split-Logrecords bei FF70 und FF100

Je Schlüsseltyp und Fillfactor, Median aus drei Läufen, SQL 2022 und 2025 identisch.

…Updates nur hierBestand nach REBUILD(FF70: mit Reserve)neu angehängt(voll gefüllt)Anhängen von 10.000 Zeilen333 wachsende UpdatesUpdates ausschließlich im neu angehängten Bereich.050100150IDENTITYFillfactor 701145IDENTITYFillfactor 1000145NEWSEQUENTIALIDFillfactor 700162NEWSEQUENTIALIDFillfactor 1000162Split-Logrecords (LOP_DELETE_SPLIT) Anhängen von 10.000 Zeilen333 wachsende UpdatesUpdates ausschließlich im neuangehängten Bereich.…Updates nur hierBestand nach REBUILD(FF70: mit Reserve)neu angehängt(voll gefüllt)050100150IDENTITY · FF701145IDENTITY · FF1000145NEWSEQUENTIALID · FF700162NEWSEQUENTIALID · FF1000162Split-Logrecords (LOP_DELETE_SPLIT)
Updates ausschließlich im neu angehängten Bereich. Grau: 10.000 Zeilen am Indexende angehängt. Orange: danach 333 dieser neuen Zeilen um je 100 Byte vergrößert. Einheit: Split-Logrecords (LOP_DELETE_SPLIT), Werte 0 und 1 sind als Zahl beschriftet. Über Updates auf älteren, beim REBUILD vorhandenen Seiten sagt dieser Versuch nichts. Quelle: Eigene Messung, LAB-12, SQL Server 2022/2025, 05.10.2026
Daten zur Grafik
SchlüsselFillfactorSeiten vorhernach Anhängennach UpdatesDichte nach AnhängenSplit-Logrecords AnhängenSplit-Logrecords Updates
IDENTITY701.8371.9822.12772,9 %1145
IDENTITY1001.3051.4501.59599,7 %0145
NEWSEQUENTIALID702.0462.2072.36872,2 %0162
NEWSEQUENTIALID1001.4521.6131.77398,8 %0162

Median aus drei Läufen; alle drei Läufe und beide Versionen liefern dieselben Zahlen. Die neuen Seiten am Indexende werden voll gefüllt, unabhängig vom Fillfactor des Altbestands.

Split-Logrecords beim Anhängen und bei 333 wachsenden Updates im neu angehängten Bereich
SchlüsselFillfactorSplit-Logrecords beim AnhängenSplit-Logrecords bei 333 Updates
IDENTITY701145
IDENTITY1000145
NEWSEQUENTIALID700162
NEWSEQUENTIALID1000162

In diesem Versuch wachsen nur frisch angehängte Zeilen. Die beim REBUILD angelegte Reserve im älteren Bereich hilft ihnen nicht: FF70 und FF100 ergeben dieselben Zahlen. Wachsen dagegen Zeilen auf den bereits neu aufgebauten Seiten, kann der dortige freie Platz relevant sein; das haben wir hier nicht gemessen. Für die Entscheidung muss man deshalb prüfen, wo und um wie viel Zeilen wachsen. Hotspots am Indexende unter vielen gleichzeitigen Schreibern und das Verhalten von NEWSEQUENTIALID nach Neustarts haben wir nicht untersucht.

Vertiefung: Warum ungefähr zwei Drittel?

Ein Split hinterlässt zwei etwa halb volle Seiten. Danach füllen sie sich, bis sie wieder voll sind und erneut geteilt werden. Bei zufällig verteilten Inserts sind die Seiten deshalb über viele Füllstände verstreut, und der Mittelwert liegt deutlich unter „voll“. Andrew Yaos Analyse zufällig wachsender B-Bäume hoher Ordnung liefert dafür mit ln 2 ≈ 69 % eine theoretische Orientierung (Acta Informatica 9, 1978). SQL-Server-Seiten mit ganzen Zeilen, Verwaltungsfläche und konkretem Splitverhalten sind damit nicht gleichgesetzt. Dass unsere Beobachtung in derselben Gegend liegt, ist eine Orientierung, keine Herleitung.

Was das für die Wartung heißt

Der Zustand ohne Wartung ist kein Ziel und keine Schwelle. Er zeigt, wohin ein Index mit zufällig verteilten Inserts ohne Eingriff läuft: im Mittel etwa zwei Drittel voll, mit gleichmäßig weiterlaufenden Splits. Ob das ein Problem ist, entscheidet die Arbeitslast.

Die Leitlinie der Reihe:

Indexwartung braucht ein messbares Ziel. Entscheidend ist, ob ihre Wirkung auf die Arbeitslast die Kosten und die Beeinträchtigung des Betriebs rechtfertigt.

Für die Muster aus dieser Reihe, als Ausgangspunkt für die eigene Prüfung:

Muster, Verhalten ohne Wartung und Prüfkandidat
MusterWas ohne Wartung passiertPrüfkandidat
Zufällig verteilte Inserts, schreiblastigPlateau um zwei Drittel Dichte, Splits laufen weiterREBUILD mit Reserve, Intervall und Fillfactor messen
Zufällig verteilte Inserts, leselastig mit vielen ScansMehr Blattseiten für jeden ScanREBUILD mit höherem Fillfactor, seltener
Aufsteigende Schlüssel, Zeilen bleiben unverändertSeiten werden voll angehängtkaum routinemäßige physische Wartung
Aufsteigende Schlüssel, frisch eingefügte Zeilen wachsenSplits auf den neuen Seiten am EndeDatenmodell, Zeilenwachstum und dessen Zeitpunkt prüfen
Wachsende Updates auf älteren ZeilenSplits im bestehenden Bereichzusätzlich lokale Reserve und Fillfactor prüfen
Kaum Änderungennichtskeine routinemäßige physische Wartung; Statistiken nur bei begründetem Bedarf aktualisieren

Keine Zeile dieser Tabelle ist eine Regel. Jede ist eine Hypothese, die an der eigenen Last vorher und nachher gemessen wird.

Herkunft und weiterführende Arbeiten

Die Versuchsideen und Gegenproben dieser Reihe greifen insbesondere Jeff Modens Arbeiten zur Indexwartung auf. In seinem Vortrag „Black Arts“ Index Maintenance #1 stellt er eine Jahressimulation ohne Wartung neben mehrere Wartungsstrategien und gibt für die ungewartete Kurve eine mittlere Seitendichte von 68,24 % an. Diese Vergleichskurve ohne Wartung bezeichnet er als „Brent Line“, nach Brent Ozar; gemeint ist eine Referenzkurve, keine SQL-Server-Funktion und keine Wartungsschwelle. Den Namen verwendet er mindestens seit 2020 auf SQLServerCentral. Den Test mit dicht aufgebautem Start hat er uns im Austausch auf LinkedIn vorgeschlagen. Folien und Skripte stellt er für Lernzwecke frei zur Verfügung. Wir danken ihm für die Anregungen. Unsere Messwerte stammen aus dem PSG-Lab; ihre Bedingungen und Grenzen sind jeweils angegeben.

Grenzen der Messung
  • Synthetische Daten, ein Clustered Index ohne Nebenindizes, feste Zeilenbreite, keine Deletes, keine Kompression, keine Partitionen.
  • Je Startzustand eine deterministische Trajektorie; kein Streuungsmaß über verschiedene Zufallsfolgen. Das Plateau ist eine begrenzte Beobachtung nach unserem Kriterium, kein Beweis eines dauerhaften Grenzwerts.
  • Die dichten Starts liefen nur auf SQL Server 2022 (16.0.4295.3); die leer gestarteten Kontrollen und die Jahresläufe auf 2022 und 2025 (17.0.5005.3). Wartungszeiten und Logmengen in den Tabellen sind SQL-2022-Werte; auf 2025 weichen sie leicht ab, Seiten, Split-Logrecords und Intervalle sind identisch.
  • Serielle Last, MAXDOP 1, keine gleichzeitigen Schreiber. Wartung offline unter SIMPLE; Sperrwirkung und Online-Kosten im Jahreslauf nicht gemessen.
  • Lesekosten nur über die Seitenzahl abgeleitet; Scans und Lesezeiten haben wir nicht gemessen.
  • Ein simulierter Tag ist eine Insertmenge, keine Kalenderprognose.
  • Geprüft am 05. und 06.10.2026. Die Versuchsbedingungen sind dokumentiert; zu einem öffentlichen Reproduktionspaket informieren wir gesondert.
Quiz · 10 Fragen

Was macht Ihr Index, wenn niemand ihn wartet?

Jede Antwort wird sofort aufgelöst, mit Verweis auf die Stelle im Beitrag. Am Ende gibt es eine Einordnung und einen Link zum Teilen. Ohne Cookies.

Weiterlesen