Freigeben über


Funktionsweise von Onlineindexvorgängen

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

In diesem Artikel werden die Strukturen definiert, die während eines Onlineindexvorgangs vorhanden sind, und zeigt die Aktivitäten an, die diesen Strukturen zugeordnet sind.

Onlineindexstrukturen

Um gleichzeitige Benutzeraktivitäten während eines DDL-Vorgangs (Index Data Definition Language) zu ermöglichen, werden die folgenden Strukturen während des Onlineindexvorgangs verwendet: Quelle und bereits vorhandene Indizes, Ziel und zum Neuerstellen eines Heaps oder Ablegen eines gruppierten Indexes online, einem temporären Zuordnungsindex.

  • Quelle und bereits vorhandene Indizes

    Als Quelle werden die Daten der ursprünglichen Tabelle oder des gruppierten Indexes bezeichnet. Bereits vorhandene Indizes sind alle nicht gruppierten Indizes, die der Quellstruktur zugeordnet sind. Wenn beispielsweise der Onlineindexvorgang einen gruppierten Index mit vier zugeordneten nicht gruppierten Indizes neu erstellt, ist die Quelle der vorhandene gruppierte Index, und die vorhandenen Indizes sind die nicht gruppierten Indizes.

    Die bereits vorhandenen Indizes sind für gleichzeitige Benutzer für Auswahl-, Einfüge-, Aktualisierungs- und Löschvorgänge verfügbar. Dies umfasst Masseneinfügungen (unterstützt, aber nicht empfohlen während eines Onlineindexvorgangs) und implizite Aktualisierungen durch Trigger und Referenzielle Integritätseinschränkungen. Alle bereits vorhandenen Indizes sind für Abfragen verfügbar. Dies bedeutet, dass sie vom Abfrageoptimierer ausgewählt und ggf. in Indexhinweisen angegeben werden.

  • Target

    Das Ziel bzw. die Ziele stellen den neuen Index (Heap) oder eine Gruppe neuer Indizes dar, die erstellt oder neu erstellt wird. Bei einem Indexierungsvorgang werden Einfüge-, Aktualisierungs- und Löschvorgänge vom Datenbankmodul von der Quelle auf das Ziel angewendet. Wenn beispielsweise der Onlineindexvorgang einen gruppierten Index neu erstellt, ist das Ziel der neu erstellte gruppierte Index; Das Datenbankmodul erstellt keine nicht gruppierten Indizes neu, wenn ein gruppierter Index neu erstellt wird.

    Der Zielindex wird erst verwendet, wenn der Indexvorgang abgeschlossen wird. Intern wird der Index als schreibgeschützt markiert.

  • Temporärer Zuordnungsindex

    Onlineindexvorgänge, die einen gruppierten Index erstellen, löschen oder neu erstellen, benötigen auch einen temporären Zuordnungsindex. 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 Quelltabelle aktualisiert oder gelöscht werden. Dieser nicht gruppierte Index wird im selben Schritt wie der neue gruppierte Index (oder Heap) erstellt und erfordert keinen separaten Sortiervorgang. Gleichzeitige Transaktionen verwalten den temporären Zuordnungsindex in all ihren Einfüge-, Aktualisierungs- und Löschvorgängen.

Onlineindexaktivitäten

Während eines Onlineindexvorgangs, z. B. das Erstellen eines gruppierten Indexes in einer nicht indizierten Tabelle (Heap), durchlaufen die Quelle und das Ziel drei Phasen: Vorbereitung, Build und Final.

Sie können das progress_report_online_index_operation erweiterte Ereignis verwenden, um den Fortschritt eines Onlineindexvorgangs zu überwachen.

Die folgende Abbildung zeigt den Prozess der Onlineerstellung eines anfänglichen gruppierten Indexes. Das Quellobjekt (der Heap) weist keine anderen Indizes auf. Die Quell- und Zielstrukturaktivitäten werden für jede Phase angezeigt; Gleichzeitige Benutzer SELECT, , INSERT, UPDATEund DELETE Vorgänge werden ebenfalls angezeigt. Die Vorbereitungs-, Erstellungs- und Endphase werden zusammen mit dem in der jeweiligen Phase verwendeten Sperrmodus angezeigt.

Diagramm, das die Aktivitäten zeigt, die während des Onlineindexvorgangs ausgeführt wurden.

Quellstrukturaktivitäten

Die folgende Tabelle enthält die Aktivitäten in Bezug auf die Quellstrukturen während der einzelnen Phasen des Indexvorgangs und die entsprechende Sperrstrategie.

Phase Quellaktivität Quellsperren
Preparation

Kurze Phase
Vorbereitung der Systemmetadaten auf die Erstellung der neuen leeren Indexstruktur.

Es wird eine Momentaufnahme der Tabelle definiert. Das heißt, dass mithilfe der Zeilenversionsverwaltung eine Lesekonsistenz auf Transaktionsebene ermöglicht wird.

Gleichzeitige Schreibvorgänge an der Quelle durch Benutzer werden für einen kurzen Zeitraum gesperrt.

Es werden mit Ausnahme der Erstellung mehrerer nicht gruppierter Indizes keine gleichzeitigen DDL-Vorgänge zugelassen.
Freigegeben (S) in der Tabelle1

Absicht geteilt (IS)

Schemaänderungs-Objektsperre (Sch-M) mit dem Ressourcenuntertyp INDEX_OPERATION2
Build

Hauptphase
Die Daten werden gescannt, sortiert, zusammengeführt und mithilfe von Massenladevorgängen in das Ziel eingefügt.

Gleichzeitige Benutzer INSERT, UPDATE, DELETE und MERGE Vorgänge werden sowohl auf die vorhandenen Indizes als auch auf alle neuen Indizes angewendet, die erstellt werden.
Absicht geteilt (IS)

Sch-M Objektsperre mit dem Ressourcenuntertyp INDEX_OPERATION2
Final

Kurze Phase
Alle nicht bestätigten Schreibtransaktionen müssen abgeschlossen werden, bevor diese Phase beginnt. Abhängig von der erworbenen Sperre werden alle neuen Benutzer-Lese- oder Schreibtransaktionen für einen kurzen Zeitraum blockiert, bis diese Phase abgeschlossen ist.

Sie Systemmetadaten werden aktualisiert; d. h., die Quelle wurde durch das Ziel ersetzt.

Die Quelle wird bei Bedarf gelöscht, z. B. nach dem Neuerstellen oder Ablegen eines gruppierten Indexes.
Sch-M Objektsperre mit dem Ressourcenuntertyp INDEX_OPERATION2

Freigegeben (S) in der Tabelle, wenn ein nicht gruppierter Index erstellt wird.1

Sch-M wenn eine Quellstruktur (Index oder Tabelle) gelöscht wird. 1

1 Der Indexvorgang wartet darauf, dass alle nicht abgeschlossenen Schreibvorgänge abgeschlossen sind, bevor die S Sperre oder die Sch-M Sperre auf der Tabelle erworben werden. Wenn eine zeitintensive Abfrage durchgeführt wird, wartet der Onlineindexvorgang, bis die Abfrage abgeschlossen ist. Sofern keine Sperren mit niedriger Priorität verwendet werden, kann dies eine Blockierungskette bilden.

2 Eine Sch-M Objektsperre mit dem Ressourcenuntertyp INDEX_OPERATION verhindert die Ausführung gleichzeitiger DDL-Vorgänge (Data Definition Language) für die Quelle und vorhandene Strukturen, während der Indexvorgang ausgeführt wird. Diese Sperre verhindert beispielsweise die gleichzeitige Neuerstellung zweier Indizes für dieselbe Tabelle. Obwohl dies eine Sch-M Sperre ist, verhindert sie keine Datenmanipulationsanweisungen.

Die vorherige Tabelle zeigt eine einzelne gemeinsame (S) Sperre, die während der Erstellungsphase einer Online-Indexoperation erworben wurde, die einen einzelnen Index enthält. Wenn gruppierte und nicht gruppierte Indizes erstellt oder neu erstellt werden, werden in einem einzelnen Online-Indexvorgang (z. B. während der anfänglichen Erstellung des gruppierten Indexes in einer Tabelle, die einen oder mehrere nicht gruppierte Indizes enthält) zwei kurzfristige S Sperren erworben, gefolgt von langfristigen Absicht geteilt (IS) Sperren. Eine S Sperre wird zuerst für die Erstellung des Clustered-Index erworben. Wenn der gruppierte Index erstellt wird, wird eine zweite kurzfristige S Sperre zum Erstellen der nicht gruppierten Indizes abgerufen. Nachdem die nicht gruppierten Indizes erstellt wurden, wird die S Sperre bis zur letzten Phase des Onlineindexvorgangs auf eine IS Sperre herabgestuft.

Weitere Informationen dazu, wie Sperren verwendet werden und wie Sie sie verwalten können, finden Sie unter WAIT_AT_LOW_PRIORITY mit Onlineindexvorgängen.

Zielstrukturaktivitäten

Die folgende Tabelle enthält die Aktivitäten in Bezug auf die Zielstrukturen während der einzelnen Phasen des Indexvorgangs und die entsprechende Sperrstrategie.

Phase Zielaktivität Zielsperren
Preparation Neuer Index wird erstellt und auf schreibgeschützt festgelegt. Absicht geteilt (IS)
Build Daten werden aus der Quelle eingefügt.

Benutzeränderungen (Einfügungen, Aktualisierungen, Löschungen), die auf die Quelle angewendet werden, werden ebenfalls auf das Ziel angewendet.

Diese Aktivität ist für den Benutzer sichtbar.
Absicht geteilt (IS)
Final Indexmetadaten werden aktualisiert.

Index wird in den Lese-/Schreibmodus versetzt.
Gemeinsame Nutzung (S) oder Schemaänderung (Sch-M)

Benutzerabfragen greifen erst auf das Ziel zu, wenn der Indexvorgang abgeschlossen ist.

Nachdem die Vorbereitung oder die letzte Phase abgeschlossen ist, können Abfragepläne, die im Plancache gespeichert sind, ungültig sein.

Die Lebensdauer eines Cursors, der für eine Tabelle deklariert wurde, die an einem Onlineindexvorgang beteiligt ist, wird durch die Onlineindexphasen begrenzt. Updatecursor werden in den einzelnen Phasen für ungültig erklärt. Schreibgeschützte Cursor werden nur nach der Endphase für ungültig erklärt.