Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
SQL-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 Index-DLL-Vorgangs (Data Definition Language, Datendefinitionssprache) zu ermöglichen, werden folgende Strukturen im Rahmen des Onlineindexvorgangs verwendet: Quellindizes und bereits vorhandene Indizes, Zielindizes sowie ein temporärer Zuordnungsindex zum Neuerstellen eines Heaps oder Löschen eines gruppierten Indexes im Onlinemodus.
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. Dazu gehören Massen-Inserts (die zwar unterstützt werden, während eines Online-Indexvorgangs jedoch nicht empfohlen werden) sowie implizite Aktualisierungen durch Trigger und referenzielle Integritätsbeschrä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. Einfüge-, Update- und Löschvorgänge durch den Benutzer an der Quelle werden von der Datenbank-Engine während des Indexvorgangs 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 behalten den temporären Zuordnungsindex in all ihren Einfüge-, Update- und Löschvorgängen bei.
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.
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. |
Shared (S) für Tabelle1Absicht shared ( 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 INSERT-, UPDATE-, DELETE- und MERGE-Benutzervorgänge werden sowohl auf die vorhandenen Indizes als auch auf alle neuen Indizes angewendet, die erstellt werden. |
Absicht shared (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. Die Systemmetadaten werden aktualisiert, um die Quelle durch das Ziel zu ersetzen. Die Quelle wird bei Bedarf gelöscht, z. B. nach dem Neuerstellen oder Ablegen eines gruppierten Indexes. |
Sch-M Objektsperre mit dem Ressourcenuntertyp INDEX_OPERATION2Shared ( S) für die Tabelle, sofern ein nicht gruppierter Index erstellt wird.1Sch-M wenn eine Quellstruktur (Index oder Tabelle) gelöscht wird. 1 |
1 Der Indexvorgang wartet, bis Schreibtransaktionen ohne Commit abgeschlossen sind, bevor er die S- oder Sch-M-Sperre für die Tabelle einrichtet. 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 es sich hierbei um eine Sch-M-Sperre handelt, verhindert sie keine Anweisungen zur Datenbearbeitung.
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 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 shared Sperren (IS) während der Erstellungsphase eingerichtet. Eine S-Sperre wird zuerst für die Erstellung des Clustered-Index erworben. Beim Anlegen des gruppierten Indexes wird eine zweite kurzfristige S-Sperre zum Anlegen der nicht gruppierten Indizes erworben. Nachdem die nicht gruppierten Indizes erstellt wurden, wird die S Sperre bis zur letzten Phase des Onlineindexvorgangs auf eine IS Sperre herabgestuft.
Weitere Informationen zur Verwendung von Sperren und zu deren Verwaltung finden Sie unter WAIT_AT_LOW_PRIORITY bei Online-Indexoperationen.
Zielstrukturaktivitäten
Die folgende Tabelle listet die Aktivitäten auf, bei denen die Zielstruktur in jeder Phase des Indexvorgangs betroffen ist, sowie die entsprechende Sperrstrategie.
| Phase | Zielaktivität | Zielsperren |
|---|---|---|
| Preparation | Neuer Index wird erstellt und auf schreibgeschützt festgelegt. | Absicht shared (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 shared (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. Update-Cursor werden in jeder Phase ungültig gemacht. Schreibgeschützte Cursor werden nur nach der Endphase für ungültig erklärt.