Freigeben über


Speicherplatzanforderungen für DDL-Indexvorgänge

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-Datenbank in Microsoft Fabric

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. Dieser Artikel enthält allgemeine Informationen, die Ihnen dabei helfen können, den für DDL-Vorgänge (Index Data Definition Language) erforderlichen Speicherplatz zu ermitteln.

Indexvorgänge ohne zusätzlichen Speicherplatz

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

  • ALTER INDEX REORGANIZE; Es ist jedoch Protokollplatz erforderlich.

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

  • DROP INDEX Wenn Sie einen gruppierten Index offline ablegen, ohne die MOVE TO Klausel anzugeben und nicht gruppierte Indizes nicht vorhanden sind.

  • CREATE TABLE (PRIMARY KEY oder UNIQUE Einschränkungen)

Indexvorgänge, die zusätzlichen Speicherplatz erfordern

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 alte Struktur wird erst freigegeben, wenn die Indexerstellungstransaktion bestätigt wird.

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 zum Sortieren

Neben dem für die Quell- und Zielstrukturen erforderlichen Speicherplatz ist temporärer Speicherplatz für die Sortierung erforderlich, es sei denn, der Abfrageoptimierer findet einen Ausführungsplan, der keine Sortierung erfordert.

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 SORT_IN_TEMPDB-Option auf ON festgelegt ist, muss der größte Index in tempdb passen. Obwohl diese Option den temporären Speicherplatz erhöht, der für die Indexerstellung verwendet wird, kann die Zeit reduziert werden, die zum Erstellen eines Indexes erforderlich ist, wenn sich tempdb auf einem anderen Satz von Datenträgern als der Benutzerdatenbank befindet.

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

Ein Beispiel für die Berechnung des Speicherplatzes finden Sie im Beispiel für den Indexspeicherplatz.

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 SORT_IN_TEMPDB-Option auf ON festgelegt ist, wird dieser temporäre Index in tempdb erstellt. Wenn SORT_IN_TEMPDB auf OFF eingestellt ist, wird dieselbe Dateigruppe oder dasselbe Partitionsschema wie der 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 "Online ausführen von Indexvorgä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 Benutzeraktualisierungs- und Löschvorgänge während Onlineindexvorgängen erfordern Speicherplatz für Versionsdatensätze in tempdb. Weitere Informationen finden Sie unter Online ausführen von Indexvorgängen .