Richtlinien zum Ausführen von Onlineindexvorgängen

Für das Ausführen von Onlineindexvorgängen gelten die folgenden Richtlinien:

  • Gruppierte Indizes müssen offline erstellt, neu erstellt oder gelöscht werden, wenn die zugrunde liegende Tabelle LOB-Datentypen (Large Object) enthält: image, ntext, text, varchar(max), nvarchar(max), varbinary(max) und xml.

  • Nicht eindeutige, nicht gruppierte Indizes können online erstellt werden, wenn die Tabelle LOB-Datentypen enthält, keine dieser Spalten jedoch in der Indexdefinition als Schlüssel- oder Nichtschlüsselspalte (eingeschlossene Spalte) verwendet wird. Nicht gruppierte Indizes, die mit LOB-Datentypen definiert wurden, müssen offline erstellt oder neu erstellt werden.

  • Indizes für lokale temp-Tabellen können nicht online erstellt, neu erstellt oder gelöscht werden. Diese Einschränkung gilt nicht für Indizes für globale temp-Tabellen.

HinweisHinweis

Online-Indexvorgänge sind nur in der SQL Server Enterprise, Developer und Evaluation Edition verfügbar.

Die folgende Tabelle zeigt die Indexvorgänge, die online ausgeführt werden können, und nennt die Indizes, die aus diesen Onlinevorgängen ausgeschlossen sind. Zusätzliche Einschränkungen werden ebenfalls aufgeführt.

Onlineindexvorgang

Ausgeschlossene Indizes

Andere Einschränkungen

ALTER INDEX REBUILD

Deaktivierter gruppierter Index oder deaktivierte indizierte Sicht

XML-Index

Index für eine lokale temp-Tabelle

Die Angabe des ALL-SchlüsselwOrts kann bewirken, dass die Operation einen Fehler erzeugt, wenn die Tabelle einen ausgeschlossenen Index enthält.

Weitere Einschränkungen zum Neuerstellen deaktivierter Indizes gelten ebenfalls. Weitere Informationen finden Sie unter Richtlinien zum Deaktivieren von Indizes.

CREATE INDEX

XML-Index

Eindeutiger gruppierter Ausgangsindex für eine Sicht

Index für eine lokale temp-Tabelle

 

CREATE INDEX WITH DROP_EXISTING

Deaktivierter gruppierter Index oder deaktivierte indizierte Sicht

Index für eine lokale temp-Tabelle

XML-Index

 

DROP INDEX

Deaktivierter Index

XML-Index

Nicht gruppierter Index

Index für eine lokale temp-Tabelle

Es können nicht mehrere Indizes in einer einzigen Anweisung angegeben werden.

ALTER TABLE ADD CONSTRAINT (PRIMARY KEY oder UNIQUE)

Index für eine lokale temp-Tabelle

Gruppierter Index

Es ist nur jeweils eine Unterklausel gleichzeitig zulässig. Sie können z. B. PRIMARY KEY- oder UNIQUE-Einschränkungen nicht in der gleichen ALTER TABLE-Anweisung hinzufügen oder löschen.

ALTER TABLE DROP CONSTRAINT (PRIMARY KEY oder UNIQUE)

Gruppierter Index

 

Die zugrunde liegende Tabelle kann nicht geändert, abgeschnitten oder gelöscht werden, während ein Onlineindexvorgang ausgeführt wird.

Die beim Erstellen oder Löschen eines gruppierten Indexes angegebene Einstellung für die Onlineoption (ON oder OFF) wird auf alle nicht gruppierten Indizes angewendet, die neu erstellt werden müssen. Wenn der gruppierte Index z. B. online mithilfe von CREATE INDEX WITH DROP_EXISTING, ONLINE=ON erstellt wird, werden alle zugeordneten nicht gruppierten Indizes ebenfalls online neu erstellt.

Wenn Sie einen UNIQUE-Index online erstellen oder neu erstellen, versuchen die Indexerstellung und eine gleichzeitige Benutzertransaktion möglicherweise, den gleichen Schlüssel einzufügen. Dies verletzt die Eindeutigkeit. Wenn eine von einem Benutzer in den neuen Index (Ziel) eingegebene Zeile eingefügt wird, bevor die ursprüngliche Zeile aus der Quelltabelle in den neuen Index verschoben wird, schlägt der Onlineindexvorgang fehl.

Obwohl der Fall nicht häufig auftritt, kann der Onlineindexvorgang aufgrund von Benutzer- oder Anwendungsaktivitäten einen Deadlock bewirken, wenn sie mit den Datenbankaktualisierungen interagiert. In diesen seltenen Fällen wählt SQL Server Database Engine (Datenbankmodul) die Benutzer- oder Anwendungsaktivität als Deadlockopfer aus.

Sie können gleichzeitige Onlineindex-DDL-Operationen für die gleiche Tabelle oder Sicht nur dann ausführen, wenn Sie mehrere neue, nicht gruppierte Indizes erstellen oder nicht gruppierte Indizes neu organisieren. Alle anderen gleichzeitig durchgeführten Onlineindexvorgänge erzeugen einen Fehler. Sie können z. B. keinen neuen Index online erstellen, während Sie einen vorhandenen Index für die gleiche Tabelle online neu erstellen.

Überlegungen zum Speicherplatz

Im Allgemeinen gelten für Online- und OfflineIndexvorgänge die gleichen Speicherplatzanforderungen. Eine Ausnahme bildet der zusätzliche Speicherplatz, der für den temporären Zuordnungsindex erforderlich ist. Dieser temporäre Index wird in Onlineindexvorgängen verwendet, die einen gruppierten Index erstellen, neu erstellen oder löschen. Das Löschen eines gruppierten Indexes online benötigt den gleichen Speicherplatz wie das Erstellen eines gruppierten Indexes online. Weitere Informationen finden Sie unter Speicherplatzanforderungen für Index-DDL-Vorgänge.

Überlegungen zur Leistung

Zwar ermöglichen Onlineindexvorgänge gleichzeitige Benutzeraktualisierungsaktivitäten, die Indexvorgänge benötigen jedoch mehr Zeit, wenn die Aktualisierungsaktivitäten umfangreich sind. In der Regel sind Onlineindexvorgänge langsamer als die entsprechenden OfflineIndexvorgänge, und zwar unabhängig davon, in welchem Umfang gleichzeitige Aktualisierungsaktivitäten ausgeführt werden.

Da sowohl die Quell- als auch die Zielstrukturen während des Onlineindexvorgangs verwaltet werden, kann die Ressourcenverwendung für Einfüge-, Aktualisierungs- und Löschtransaktionen bis um das Doppelte zunehmen. Dieser Vorgang kann einen Leistungsabfall und erhöhte Ressourcenverwendung (insbesondere CPU-Zeit) während des Indexvorgangs bewirken. Onlineindexvorgänge werden vollständig protokolliert.

In der Regel werden Onlinevorgänge empfohlen, Sie sollten jedoch Ihre Umgebung sowie besondere Anforderungen berücksichtigen. Es kann vorteilhafter sein, Indexvorgänge offline auszuführen. Dabei besitzen Benutzer während der Operation nur eingeschränkten Zugriff auf die Daten, der Vorgang wird jedoch schneller abgeschlossen und verwendet weniger Ressourcen.

Auf Multiprozessorcomputern, auf denen SQL Server Enterprise ausgeführt wird, werden für Indexanweisungen unter Umständen mehr Prozessoren verwendet, um Scan- und Sortierungsvorgänge auszuführen. Dies geschieht in gleicher Weise wie für andere Abfragen. Mithilfe der MAXDOP-Indexoption können Sie festlegen, wie viele Prozessoren für den Onlineindexvorgang verwendet werden. Auf diese Weise können Sie die Ressourcen, die vom Indexvorgang verwendet werden, mit den Ressourcen gleichzeitiger Benutzer ausgleichen. Weitere Informationen finden Sie unter Konfigurieren von Parallelindexvorgänge.

Da eine Sperre des Typs S- oder Sch-M in der Abschlussphase des Indexvorgangs aktiviert wird, sollten Sie Vorsicht walten lassen, wenn Sie einen Onlineindexvorgang innerhalb einer expliziten Benutzertransaktion ausführen, z. B. in einem BEGIN TRANSACTION...COMMIT-Block. In diesem Fall bleibt die Sperre aktiviert, bis die Transaktion beendet ist, und beeinträchtigt daher die Benutzerparallelität.

Überlegungen zum Transaktionsprotokoll

Umfangreiche Indexvorgänge, die offline oder online ausgeführt werden, können große Datenlasten generieren, die das Transaktionsprotokoll schnell füllen können. Damit sichergestellt wird, dass für den Indexvorgang ein Rollback ausgeführt werden kann, kann das Transaktionsprotokoll erst abgeschnitten werden, nachdem der Indexvorgang abgeschlossen wurde; das Protokoll kann jedoch während des Indexvorgangs gesichert werden. Aus diesem Grund muss das Transaktionsprotokoll für die Dauer des Indexvorgangs genügend Speicherplatz zum Speichern der Transaktionen des Indexvorgangs sowie ggf. der gleichzeitigen Benutzertransaktionen aufweisen. Weitere Informationen finden Sie unter Transaktionsprotokollspeicherplatz für Indexvorgänge.