Warum nicht Indizes mit einer Seitenzahl <1000 neu erstellen?


17

Ich benutze Ola Hallengrens Skript für die Indexpflege. Vorher habe ich die folgende Abfrage verwendet, um festzustellen, welche Indizes am meisten fragmentiert sind:

SELECT dbschemas.[name] as 'Schema',
dbtables.[name] as 'Table',
dbindexes.[name] as 'Index',
indexstats.avg_fragmentation_in_percent,
indexstats.page_count
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
ORDER BY indexstats.avg_fragmentation_in_percent desc

In meinem Fall lag die durchschnittliche Fragmentierung bei 15 Indizes über 70% und bei 28 Indizes über 30% .

Also erstelle ich jeden Index mit der Lösung von Ola Hallengren neu. Als ich die Abfrage erneut ausführte, war dies das Ergebnis:

Fragmentierung über 70% bei 12 Indizes, über 30% bei 15 Indizes.

Ich vermutete, der Grund dafür war der page_count, der für jeden der noch sehr fragmentierten Indizes unter 1000 lag. Zum Beispiel hat einer der Indizes mit a page_count von 967 einen Fragmentierungsprozentsatz von 98,98% ! Mir scheint es wert, diesen Index wieder aufzubauen! Ich tat es und danach betrug die Fragmentierung 0% . Auch ein Index mit einem page_countvon 132 ging von 95% auf 0%

Meine Frage ist also, welche Gründe es geben würde, diese Indizes NICHT neu zu erstellen. Ein Grund könnte sein, dass das Neuerstellen Zeit und Ressourcen kostet, aber weil die Indizes klein sind, bedeutet dies nicht, dass es relativ wenig Ressourcen kostet und es trotzdem nützlich wäre, es neu zu erstellen?

Es gibt mehrere verwandte Fragen auf dieser Website, aber alle beantworten die Frage, warum ein Index nicht defragmentiert wird oder ob Indizes immer noch nützlich sind, wenn sie klein sind und Sie sie nicht defragmentieren. In diesem Fall verringert die Anweisung die Fragmentierung mit die Frage ist, warum es nicht trotzdem tun?


Kleine Indizes werden wahrscheinlich im Speicher zwischengespeichert. Indizes, für die ohnehin keine E / A anfallen, profitieren nicht von der Defragmentierung. Diese 1000-Seiten-Regel ist eine Heuristik.
Usr

Antworten:


20

Die Anleitung zur Mindestanzahl der Seiten ist etwas willkürlich . Die größten Vorteile der Reduzierung der Fragmentierung sind:

  1. Es kann die Vorausleseleistung für Scans mit großem Bereich verbessern . und
  2. Es kann die Seitendichte verbessern (Anzahl der Zeilen pro Seite)

Diese beiden Faktoren sind per Definition für kleine Indizes weniger wichtig.

Das Gegenargument zur Neuerstellung kleiner Indizes lautet im Wesentlichen:

"Warum die Mühe machen? Haben Sie keine wichtigeren Sorgen?"

Der Umbau ist jedoch nicht kostenlos. In einigen Fällen kann es sich lohnen, den zusätzlichen Aufwand und die Protokollgenerierung zu vermeiden (z. B. wenn das Protokoll aus einer Reihe von möglichen Gründen (Spiegelung, Verfügbarkeitsgruppen, Replikation usw.) über ein WAN gesendet / kopiert wird). Außerdem kann sich die Neuerstellung durch Sperren auf andere gleichzeitige Prozesse auswirken, es sei denn, Sie erstellen online (oder in einigen Fällen sogar). Bei kleinen Indizes kann die Fragmentierung durch die Neuerstellung aufgrund von Zuweisungen aus gemischten Bereichen möglicherweise nicht einmal verringert werden (es sei denn, Sie führen das Ablaufverfolgungsflag 1118 aus ).

Wenn Sie immer noch zufriedener mit der Neuerstellung dieser kleinen Indizes sind und die Konsequenzen nicht beachten, ändern Sie auf jeden Fall den Wert des @PageCountLevelParameters, der an die Prozedur von Ola übergeben wird.

Alle Details finden Sie in der PASS TV-Aufzeichnung von Paul Randals Präsentation zur Indexfragmentierung .

Vielleicht möchten Sie auch Brent Ozar beim Sprechen über die Gründe für die Indexfragmentierung in SQL Server zusehen .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.