Index Rebuild MS SQL Server

Aus HB9FDZ
Zur Navigation springen Zur Suche springen

SQL Server: Index‑Wartung (Standard Edition)

Diese Dokumentation beschreibt, wie in einer Microsoft SQL Server Standard Edition die Indizes einer Datenbank gewartet werden. Da die Standard Edition keine Online‑Rebuilds unterstützt, müssen Rebuilds außerhalb der Betriebszeiten durchgeführt werden.

1. Fragmentierung prüfen

Um festzustellen, wie stark die Indizes fragmentiert sind:

SELECT 
    dbschemas.[name] AS 'Schema',
    dbtables.[name] AS 'Table',
    dbindexes.[name] AS 'Index',
    indexstats.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, 'LIMITED') 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
WHERE indexstats.avg_fragmentation_in_percent > 5
ORDER BY indexstats.avg_fragmentation_in_percent DESC;

Interpretation:

5–30 % → REORGANIZE

>30 % → REBUILD (offline in Standard Edition)

2. Statistiken aktualisieren (empfohlen vor jedem Rebuild)

Kann jederzeit im laufenden Betrieb ausgeführt werden.

EXEC sp_updatestats;

3. Index‑Rebuild aller Tabellen (Standard Edition, offline)

Dieser Schritt sollte außerhalb der Betriebszeiten ausgeführt werden, da Tabellen während des Rebuilds gesperrt werden.

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql = @sql + 
    'ALTER INDEX [' + i.name + '] ON [' + s.name + '].[' + t.name + '] REBUILD WITH (ONLINE = OFF);' + CHAR(13)
FROM sys.indexes i
JOIN sys.tables t ON i.object_id = t.object_id
JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE i.type_desc <> 'HEAP'
  AND i.is_disabled = 0;

EXEC sp_executesql @sql;

Hinweise:

HEAP‑Tabellen (ohne Clustered Index) werden übersprungen.

Während des Rebuilds sind Tabellen exklusiv gesperrt.

Dauer bei 200k–1 Mio Zeilen meist nur Sekunden bis wenige Minuten.