Speicherplatzanforderungen für Index-DDL-Vorgänge

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Der Speicherplatz ist beim Erstellen, Neuerstellen oder Löschen von Indizes ein wichtiger Aspekt, der berücksichtigt werden muss. Unzureichender Speicherplatz kann die Leistung verringern oder sogar bewirken, dass der Indexvorgang einen Fehler erzeugt. Dieses Thema stellt allgemeine Informationen bereit, die Sie beim Ermitteln des Speicherplatzes unterstützen können, der für DDL-Vorgänge (Data Definition Language) des Indexes erforderlich ist.

Indexvorgänge, für die kein zusätzlicher Speicherplatz erforderlich ist

Für die folgenden Indexvorgänge ist kein zusätzlicher Speicherplatz erforderlich:

  • ALTER INDEX REORGANIZE; jedoch ist Speicherplatz im Protokoll erforderlich.

  • DROP INDEX, wenn Sie einen nicht gruppierten Index löschen.

  • DROP INDEX, wenn Sie einen gruppierten Index offline löschen, ohne die MOVE TO-Klausel anzugeben, und es sind keine nicht gruppierten Indizes vorhanden.

  • CREATE TABLE (PRIMARY KEY- oder UNIQUE-Einschränkung)

Indexvorgänge, für die zusätzlicher Speicherplatz erforderlich ist

Für alle anderen Index-DDL-Vorgänge ist zusätzlicher temporärer Speicherplatz erforderlich, der während des Vorgangs verwendet werden soll, sowie dauerhafter Speicherplatz, der für das Speichern der neuen Indexstruktur(en) benötigt wird.

Beim Erstellen einer neuen Indexstruktur wird Speicherplatz sowohl für die alte Struktur (Quelle) als auch für die neue Struktur (Ziel) in den jeweiligen Dateien und Dateigruppen benötigt. Die Zuordnung der alten Struktur wird erst aufgehoben, nachdem die Indexerstellungstransaktion den Commitvorgang ausgeführt hat.

Die folgenden Index-DDL-Vorgänge erstellen neue Indexstrukturen und erfordern zusätzlichen Speicherplatz:

  • CREATE INDEX

  • CREATE INDEX WITH DROP_EXISTING

  • ALTER INDEX REBUILD

  • ALTER TABLE ADD CONSTRAINT (PRIMARY KEY oder UNIQUE)

  • ALTER TABLE DROP CONSTRAINT (PRIMARY KEY oder UNIQUE), wenn die Einschränkung auf einem gruppierten Index basiert

  • DROP INDEX MOVE TO (Gilt nur für gruppierte Indizes.)

Temporärer Speicherplatz für Sortiervorgänge

Neben dem für die Quell- und Zielstrukturen benötigten Speicherplatz ist temporärer Speicherplatz für Sortiervorgänge erforderlich, es sei denn, der Abfrageoptimierer ermittelt einen Ausführungsplan, für den keine Sortierung erforderlich ist.

Wenn Sortierung erforderlich ist, findet die Sortierung für die neuen Indizes nacheinander statt. Wenn Sie z. B. einen gruppierten Index und die zugehörigen nicht gruppierten Indizes mit einer einzigen Anweisung neu erstellen, werden die Indizes nacheinander sortiert. Daher muss der zusätzliche temporäre Speicherplatz, der für die Sortierung erforderlich ist, nur so umfangreich wie der größte Index im Vorgang sein. Dies ist fast immer der gruppierte Index.

Wenn die Option SORT_IN_TEMPDB auf ON festgelegt wurde, muss der größte Index in tempdbpassen. Obwohl durch diese Option die Menge des temporären Speicherplatzes erhöht wird, die zur Indexerstellung verwendet wird, kann sich die Zeitspanne verringern, die zum Erstellen eines Indexes erforderlich ist, wenn tempdb auf einem anderen Satz von Datenträgern gespeichert ist als die Benutzerdatenbank.

Wenn SORT_IN_TEMPDB auf OFF festgelegt wurde (die Standardeinstellung), wird jeder Index einschließlich partitionierter Indizes an seinem Zielspeicherplatz sortiert; in diesem Fall ist nur der Speicherplatz für die neuen Indexstrukturen erforderlich.

Ein Beispiel zum Berechnen des Speicherplatzes finden Sie unter Index Disk Space Example.

Temporärer Speicherplatz für Onlineindexvorgänge

Wenn Sie Indexvorgänge online ausführen, ist zusätzlicher temporärer Speicherplatz erforderlich.

Wenn ein gruppierter Index online erstellt, neu erstellt oder gelöscht wird, wird ein temporärer nicht gruppierter Index erstellt, um alte Lesezeichen neuen Lesezeichen zuzuordnen. Wenn die Option SORT_IN_TEMPDB auf ON festgelegt wurde, wird dieser temporäre Index in tempdberstellt. Wurde SORT_IN_TEMPDB auf OFF festgelegt, wird die gleiche Dateigruppe oder das gleiche Partitionsschema wie für den Zielindex verwendet. Der temporäre Zuordnungsindex enthält einen Datensatz für jede Zeile in der Tabelle. Sein Inhalt ist die Vereinigung der alten und der neuen Lesezeichenspalten, einschließlich uniqueifiers und Datensatzbezeichnern sowie einer einzigen Kopie jeder Spalte, die in beiden Lesezeichen verwendet wird. Weitere Informationen zu Onlineindexvorgängen finden Sie unter Ausführen von Onlineindexvorgängen.

Hinweis

Die SORT_IN_TEMPDB-Option kann nicht für DROP INDEX-Anweisungen festgelegt werden. Der temporäre Zuordnungsindex wird immer in der gleichen Dateigruppe oder dem gleichen Partitionsschema wie der Zielindex erstellt.

Onlineindexvorgänge verwenden die Zeilenversionsverwaltung, um den Indexvorgang von den Auswirkungen der Änderungen zu isolieren, die von anderen Transaktionen vorgenommen wurden. Auf diese Weise ist es nicht erforderlich, freigegebene Sperren für Zeilen anzufordern, die gelesen wurden. Gleichzeitige Update- und Löschvorgänge durch Benutzer während Onlineindexvorgänge erfordern Speicherplatz für Versionsdatensätze in tempdb. Weitere Informationen finden Sie unter Ausführen von Onlineindexvorgängen .

Beispiel für den zum Speichern eines Indexes belegten Speicherplatz

Transaktionsprotokollspeicherplatz für Indexvorgänge

Schätzen der Größe einer Tabelle

Schätzen der Größe eines gruppierten Indexes

Schätzen der Größe eines nicht gruppierten Index

Schätzen der Größe eines Heaps

CREATE INDEX (Transact-SQL)

ALTER INDEX (Transact-SQL)

DROP INDEX (Transact-SQL)

Angeben des Füllfaktors für einen Index

Neuorganisieren und Neuerstellen von Indizes