Funktionsweise von OnlineindexvorgängenHow Online Index Operations Work

GILT FÜR: jaSQL ServerjaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

In diesem Thema werden die während eines Onlineindexvorgangs vorhandenen Strukturen definiert und die mit diesen Strukturen verbundenen Aktivitäten aufgezeigt.This topic defines the structures that exist during an online index operation and shows the activities associated with these structures.

OnlineindexstrukturenOnline Index Structures

Es werden folgende Strukturen während des Onlineindexvorgangs verwendet, um gleichzeitige Benutzeraktivitäten während eines Index-DDL-Vorgangs (Data Definition Language, Datendefinitionssprache) zu ermöglichen: Quellindizes und bereits vorhandene Indizes, Zielindizes sowie ein temporärer Zuordnungsindex zum Neuerstellen eines Heaps oder Löschen eines gruppierten Indexes im Onlinemodus.To allow for concurrent user activity during an index data definition language (DDL) operation, the following structures are used during the online index operation: source and pre-existing indexes, target, and for rebuilding a heap or dropping a clustered index online, a temporary mapping index.

  • Quellindizes und bereits vorhandene IndizesSource and pre-existing indexes

    Als Quelle werden die Daten der ursprünglichen Tabelle oder des gruppierten Indexes bezeichnet.The source is the original table or clustered index data. Bereits vorhandene Indizes sind sämtliche nicht gruppierten Indizes, die der Quellstruktur zugeordnet sind.Pre-existing indexes are any nonclustered indexes that are associated with the source structure. Wenn der Onlineindexvorgang beispielsweise einen gruppierten Index neu erstellt, dem vier nicht gruppierte Indizes zugeordnet sind, stellen die vorhandenen gruppierten Indizes die Quelle dar, und die bereits vorhandenen Indizes sind die nicht gruppierten Indizes.For example, if the online index operation is rebuilding a clustered index that has four associated nonclustered indexes, the source is the existing clustered index and the pre-existing indexes are the nonclustered indexes.

    Die bereits vorhandenen Indizes stehen den gleichzeitigen Benutzern für Auswahl-, Einfüge-, Update- und Löschvorgänge zur Verfügung.The pre-existing indexes are available to concurrent users for select, insert, update, and delete operations. Hierzu zählen auch Masseneinfügungen (wir unterstützt aber nicht empfohlen) und implizite Updates durch Trigger und Einschränkungen der referenziellen Integrität.This includes bulk inserts (supported but not recommended) and implicit updates by triggers and referential integrity constraints. Alle bereits vorhandenen Indizes sind für Abfragen und Suchvorgänge verfügbar.All pre-existing indexes are available for queries and searches. Dies bedeutet, dass sie vom Abfrageoptimierer ausgewählt und gegebenenfalls in Indexhinweisen angegeben werden können.This means they may be selected by the query optimizer and, if necessary, specified in index hints.

  • TargetTarget

    Das Ziel bzw. die Ziele stellen den neuen Index (Heap) oder eine Gruppe neuer Indizes dar, die erstellt oder neu erstellt wird.The target or targets is the new index (or heap) or a set of new indexes that is being created or rebuilt. Einfüge-, Update- und Löschvorgänge durch den Benutzer an der Quelle werden von SQL Server-Datenbank-EngineSQL Server Database Engine während des Indexvorgangs auf das Ziel angewendet.User insert, update, and delete operations to the source are applied by the SQL Server-Datenbank-EngineSQL Server Database Engine to the target during the index operation. Wenn der Onlineindexvorgang beispielsweise einen gruppierten Index neu erstellt, ist der neu erstellte gruppierte Index das Ziel, Datenbank-EngineDatabase Engine erstellt nicht gruppierte Indizes nicht neu, wenn ein gruppierter Index neu erstellt wird.For example, if the online index operation is rebuilding a clustered index, the target is the rebuilt clustered index; the Datenbank-EngineDatabase Engine does not rebuild nonclustered indexes when a clustered index is rebuilt.

    Der Zielindex wird während der Verarbeitung von SELECT-Anweisungen erst durchsucht, nachdem ein Commit für den Vorgang ausgeführt wurde.The target index is not searched while processing SELECT statements until the index operation is committed. Intern wird der Index als schreibgeschützt markiert.Internally, the index is marked as write-only.

  • Temporärer ZuordnungsindexTemporary mapping index

    Onlineindexvorgänge, die einen gruppierten Index erstellen, löschen oder neu erstellen, benötigen auch einen temporären Zuordnungsindex.Online index operations that create, drop, or rebuild a clustered index also require a temporary mapping index. Dieser temporäre Index wird von gleichzeitigen Transaktionen verwendet, um zu bestimmen, welche Datensätze in den neuen Indizes gelöscht werden sollen, die erstellt werden, wenn Zeilen in der zugrunde liegenden Tabelle aktualisiert oder gelöscht werden.This temporary index is used by concurrent transactions to determine which records to delete in the new indexes that are being built when rows in the underlying table are updated or deleted. Dieser nicht gruppierte Index wird im gleichen Schritt erstellt wie der neue gruppierte Index (oder Heap) und erfordert keinen separaten Sortiervorgang.This nonclustered index is created in the same step as the new clustered index (or heap) and does not require a separate sort operation. Gleichzeitige Transaktionen behalten zudem den temporären Zuordnungsindex in all ihren Einfüge-, Update- und Löschvorgängen bei.Concurrent transactions also maintain the temporary mapping index in all their insert, update, and delete operations.

OnlineindexaktivitätenOnline Index Activities

Während eines einfachen Onlineindexvorgangs, wie beispielsweise der Erstellung eines gruppierten Indexes für eine nicht gruppierte Tabelle (Heap), durchlaufen die Quelle und das Ziel drei Phasen: Vorbereitung, Erstellung und Endphase.During a simple online index operation, such as creating a clustered index on a nonindexed table (heap), the source and target go through three phases: preparation, build, and final.

Die folgende Abbildung zeigt den Prozess der Onlineerstellung eines anfänglichen gruppierten Indexes.The following illustration shows the process for creating an initial clustered index online. Das Quellobjekt (der Heap) weist keine anderen Indizes auf.The source object (the heap) has no other indexes. Die Aktivitäten der Quell- und Zielstrukturen werden für die einzelnen Phasen dargestellt. Außerdem werden gleichzeitige Auswahl-, Einfüge-, Update- und Löschvorgänge von Benutzern angezeigt.The source and target structure activities are shown for each phase; concurrent user select, insert, update, and delete operations are also shown. Die Vorbereitungs-, Erstellungs- und Endphase werden zusammen mit dem in der jeweiligen Phase verwendeten Sperrmodus angezeigt.The preparation, build, and final phases are indicated together with the lock modes used in each phase.

Während eines Onlineindexvorgangs ausgeführte AktionenActivities performed during online index operation

QuellstrukturaktivitätenSource Structure Activities

Die folgende Tabelle enthält die Aktivitäten in Bezug auf die Quellstrukturen während der einzelnen Phasen des Indexvorgangs und die entsprechende Sperrstrategie.The following table lists the activities involving the source structures during each phase of the index operation and the corresponding locking strategy.

PhasePhase QuellaktivitätSource activity QuellsperrenSource locks
VorbereitungPreparation

Kurze PhaseShort phase
Vorbereitung der Systemmetadaten auf die Erstellung der neuen leeren Indexstruktur.System metadata preparation to create the new empty index structure.

Es wird eine Momentaufnahme der Tabelle definiert.A snapshot of the table is defined. Das heißt, dass mithilfe der Zeilenversionsverwaltung eine Lesekonsistenz auf Transaktionsebene ermöglicht wird.That is, row versioning is used to provide transaction-level read consistency.

Gleichzeitige Schreibvorgänge an der Quelle durch Benutzer werden für einen kurzen Zeitraum gesperrt.Concurrent user write operations on the source are blocked for a short period.

Es werden mit Ausnahme der Erstellung mehrerer nicht gruppierter Indizes keine gleichzeitigen DDL-Vorgänge zugelassen.No concurrent DDL operations are allowed except creating multiple nonclustered indexes.
S (Shared) für Tabelle*S (Shared) on the table*

Beabsichtigte freigegebene Sperre (Intent Shared, IS)IS (Intent Shared)

INDEX_BUILD_INTERNAL_RESOURCE**INDEX_BUILD_INTERNAL_RESOURCE**
ErstellenBuild

HauptphaseMain phase
Die Daten werden gescannt, sortiert, zusammengeführt und in Massenladevorgängen in das Ziel eingefügt.The data is scanned, sorted, merged, and inserted into the target in bulk load operations.

Gleichzeitige Auswahl-, Einfüge-, Update- und Löschvorgänge durch Benutzer werden sowohl auf die bereits vorhandenen Indizes als auch auf sämtliche neu erstellten Indizes angewendet.Concurrent user select, insert, update, and delete operations are applied to both the pre-existing indexes and any new indexes being built.
ISIS

INDEX_BUILD_INTERNAL_RESOURCE**INDEX_BUILD_INTERNAL_RESOURCE**
EndphaseFinal

Kurze PhaseShort phase
Alle Transaktionen ohne Commit müssen abgeschlossen werden, bevor diese Phase gestartet wird.All uncommitted update transactions must complete before this phase starts. Je nach der eingerichteten Sperre werden alle neuen Lese- und Schreibtransaktionen durch Benutzer für einen kurzen Zeitraum gesperrt, bis diese Phase abgeschlossen ist.Depending on the acquired lock, all new user read or write transactions are blocked for a short period until this phase is completed.

Sie Systemmetadaten werden aktualisiert; d. h., die Quelle wurde durch das Ziel ersetzt.System metadata is updated to replace the source with the target.

Die Quelle wird gelöscht, falls dies erforderlich ist.The source is dropped if it is required. Beispielsweise nach dem erneuten Erstellen oder dem Löschen eines gruppierten Indexes.For example, after rebuilding or dropping a clustered index.
INDEX_BUILD_INTERNAL_RESOURCE**INDEX_BUILD_INTERNAL_RESOURCE**

S für die Tabelle, sofern ein nicht gruppierter Index erstellt wird.*S on the table if creating a nonclustered index.*

Schemaänderungssperre (SCH-M, Schema Modification), sofern eine Quellstruktur (Index oder Tabelle) gelöscht wird.*SCH-M (Schema Modification) if any source structure (index or table) is dropped.*

* Der Indexvorgang wartet, bis Updatetransaktionen ohne Commit abgeschlossen sind, bevor er die S- oder SCH-M-Sperre für die Tabelle einrichtet.* The index operation waits for any uncommitted update transactions to complete before acquiring the S lock or SCH-M lock on the table.

** Die Ressourcensperre INDEX_BUILD_INTERNAL_RESOURCE verhindert die Ausführung gleichzeitiger DDL-Vorgänge für die Quelle und bereits vorhandene Strukturen, während der Indexvorgang ausgeführt wird.** The resource lock INDEX_BUILD_INTERNAL_RESOURCE prevents the execution of concurrent data definition language (DDL) operations on the source and pre-existing structures while the index operation is in progress. Diese Sperre verhindert beispielsweise die gleichzeitige Neuerstellung zweier Indizes für dieselbe Tabelle.For example, this lock prevents concurrent rebuild of two indexes on the same table. Obwohl diese Ressourcensperre der Sch-M-Sperre zugeordnet ist, verhindert sie keine Datenbearbeitungsanweisungen.Although this resource lock is associated with the Sch-M lock, it does not prevent data manipulation statements.

Die vorherige Tabelle zeigt eine einzelne freigegebene Sperre (Shared, S) an, die während der Erstellungsphase eines Onlineindexvorgangs, der einen einzelnen Index einschließt, eingerichtet wurde.The previous table shows a single Shared (S) lock acquired during the build phase of an online index operation that involves a single index. Wenn gruppierte und nicht gruppierte Indizes erstellt oder neu erstellt werden, werden bei einem einzelnen Onlineindexvorgang (z. B. während der anfänglichen Erstellung eines gruppierten Indexes für eine Tabelle, die einen oder mehrere nicht gruppierte Indizes enthält) zwei kurzfristige S-Sperren gefolgt von langfristigen beabsichtigten gemeinsamen Sperren (IS-Sperren) während der Erstellungsphase eingerichtet.When clustered and nonclustered indexes are built, or rebuilt, in a single online index operation (for example, during the initial clustered index creation on a table that contains one or more nonclustered indexes) two short-term S locks are acquired during the build phase followed by long-term Intent Shared (IS) locks. Eine S-Sperre wird zunächst für die Erstellung des gruppierten Indexes eingerichtet, und wenn die Erstellung des gruppierten Indexes abgeschlossen ist, wird eine zweite kurzfristige S-Sperre für die Erstellung der nicht gruppierten Indizes eingerichtet.One S lock is acquired first for the clustered index creation and when creating the clustered index is completed, a second short-term S lock is acquired for creating the nonclustered indexes. Nachdem die nicht gruppierten Indizes erstellt wurden, wird die S-Sperre bis zur Endphase des Onlineindexvorgangs auf eine IS-Sperre herabgestuft.After the nonclustered indexes are created, the S lock is downgraded to an IS lock until the final phase of the online index operation.

ZielstrukturaktivitätenTarget Structure Activities

Die folgende Tabelle enthält die Aktivitäten in Bezug auf die Zielstrukturen während der einzelnen Phasen des Indexvorgangs und die entsprechende Sperrstrategie.The following table lists the activities that involve the target structure during each phase of the index operation and the corresponding locking strategy.

PhasePhase ZielaktivitätTarget activity ZielsperrenTarget locks
VorbereitungPreparation Neuer Index wird erstellt und auf schreibgeschützt festgelegt.New index is created and set to write-only. ISIS
ErstellenBuild Daten werden aus der Quelle eingefügt.Data is inserted from source.

Änderungen durch den Benutzer (Einfügungen, Updates, Löschungen), die auf die Quelle angewendet werden, werden angewendet.User modifications (inserts, updates, deletes) applied to the source are applied.

Diese Aktivität ist für den Benutzer sichtbar.This activity is transparent to the user.
ISIS
EndphaseFinal Indexmetadaten werden aktualisiert.Index metadata is updated.

Lese-/Schreibstatus wird für Index festgelegt.Index is set to read/write status.
SS

oderor

SCH-MSCH-M

Der Zugriff auf das Ziel durch SELECT-Anweisungen, die vom Benutzer ausgegeben werden, ist erst nach Abschluss des Vorgangs möglich.The target is not accessed by SELECT statements issued by the user until the index operation is completed.

Nach Abschluss der Vorbereitungs- und Endphase werden die im Prozedurcache gespeicherten Abfrage- und Updatepläne für ungültig erklärt.After the preparation and final phase is completed, the query and update plans that are stored in the procedure cache are invalidated. Folgeabfragen verwenden den neuen Index.Subsequent queries use the new index.

Die Lebensdauer eines Cursors, der für eine Tabelle deklariert wurde, die an einem Onlineindexvorgang beteiligt ist, wird durch die Onlineindexphasen begrenzt.The lifetime of a cursor declared on a table that is involved in an online index operation is limited by the online index phases. Updatecursor werden in den einzelnen Phasen für ungültig erklärt.Update cursors are invalidated at each phase. Schreibgeschützte Cursor werden nur nach der Endphase für ungültig erklärt.Read-only cursors are invalidated only after the final phase.

Ausführen von OnlineindexvorgängenPerform Index Operations Online

Richtlinien für OnlineindexvorgängeGuidelines for Online Index Operations