Delen via


Hoe online indexbewerkingen werken

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

In dit artikel worden de structuren gedefinieerd die bestaan tijdens een online indexbewerking en worden de activiteiten weergegeven die aan deze structuren zijn gekoppeld.

Online indexstructuren

Als u gelijktijdige gebruikersactiviteit wilt toestaan tijdens een DDL-bewerking (Index Data Definition Language), worden de volgende structuren gebruikt tijdens de online indexbewerking: bron- en bestaande indexen, doel en voor het herbouwen van een heap of het verwijderen van een geclusterde index online, een tijdelijke toewijzingsindex.

  • Bron- en bestaande indexen

    De bron is de oorspronkelijke tabel- of geclusterde indexgegevens. Bestaande indexen zijn niet-geclusterde indexen die zijn gekoppeld aan de bronstructuur. Als de online-indexbewerking bijvoorbeeld een geclusterde index herbouwt met vier gekoppelde niet-geclusterde indexen, is de bron de bestaande geclusterde index en zijn de vooraf bestaande indexen de niet-geclusterde indexen.

    De bestaande indexen zijn beschikbaar voor gelijktijdige gebruikers voor het selecteren, invoegen, bijwerken en verwijderen van bewerkingen. Dit omvat bulkinvoegingen (ondersteund maar niet aanbevolen tijdens een online indexbewerking) en impliciete updates door triggers en referentiële integriteitsbeperkingen. Alle bestaande indexen zijn beschikbaar voor query's. Dit betekent dat ze mogelijk worden geselecteerd door de queryoptimalisatie en, indien nodig, worden opgegeven in indexhints.

  • Target

    Het doel of de doelen zijn de nieuwe index (of heap) of een set nieuwe indexen die wordt gemaakt of opnieuw wordt opgebouwd. Bewerkingen voor invoegen, bijwerken en verwijderen door gebruikers op de bron worden door de Database Engine toegepast op de doellocatie tijdens de indexbewerking. Als de online indexbewerking bijvoorbeeld een geclusterde index herbouwt, is het doel de herbouwde geclusterde index; De database-engine bouwt niet niet-geclusterde indexen niet opnieuw op wanneer een geclusterde index opnieuw wordt opgebouwd.

    De doelindex wordt pas gebruikt als de indexbewerking is doorgevoerd. Intern wordt de index gemarkeerd als alleen voor schrijven.

  • Tijdelijke mapping-index

    Voor online indexbewerkingen die een geclusterde index maken, verwijderen of herbouwen, is ook een tijdelijke toewijzingsindex vereist. Deze tijdelijke index wordt gebruikt door gelijktijdige transacties om te bepalen welke records moeten worden verwijderd in de nieuwe indexen die worden gemaakt wanneer rijen in de brontabel worden bijgewerkt of verwijderd. Deze niet-geclusterde index wordt gemaakt in dezelfde stap als de nieuwe geclusterde index (of heap) en vereist geen afzonderlijke sorteerbewerking. Bij hun invoeg-, update- en verwijderbewerkingen onderhouden gelijktijdige transacties de tijdelijke toewijzingsindex.

Online indexactiviteiten

Tijdens een online indexbewerking, zoals het maken van een geclusterde index op een niet-geïndexeerde tabel (heap), doorloopt de bron en het doel drie fasen: voorbereiding, build en definitief.

U kunt de progress_report_online_index_operation uitgebreide gebeurtenis gebruiken om de voortgang van een onlineindexbewerking te controleren.

In de volgende afbeelding ziet u het proces voor het online maken van een initiële geclusterde index. Het bronobject (de heap) heeft geen andere indexen. De activiteiten van de bron- en doelstructuur worden voor elke fase weergegeven; gelijktijdige gebruikerSELECT, INSERTen UPDATEDELETE bewerkingen worden ook weergegeven. De voorbereidings-, bouw- en eindfasen worden aangegeven samen met de vergrendelingsmodi die in elke fase worden gebruikt.

Diagram van de activiteiten die zijn uitgevoerd tijdens de online indexbewerking.

Activiteiten in de bronstructuur

De volgende tabel bevat de activiteiten met betrekking tot de bronstructuren tijdens elke fase van de indexbewerking en de bijbehorende vergrendelingsstrategie.

Phase Bronactiviteit Bronvergrendelingen
Preparation

Korte fase
Voorbereiding van systeemmetagegevens om de nieuwe lege indexstructuur te maken.

Er wordt een momentopname van de tabel gedefinieerd. Dat wil gezegd: rijversiebeheer wordt gebruikt om leesconsistentie op transactieniveau te bieden.

Gelijktijdige schrijfbewerkingen van gebruikers op de bron worden gedurende een korte periode geblokkeerd.

Er zijn geen gelijktijdige DDL-bewerkingen toegestaan, behalve het maken van meerdere niet-geclusterde indexen.
Gedeeld (S) op de tabel1

Intentie gedeeld (IS)

Schemawijziging (Sch-M) objectvergrendeling met het resource-subtype INDEX_OPERATION2
Build

Hoofdfase
De gegevens worden gescand, gesorteerd, samengevoegd en ingevoegd in de doeldatabase met behulp van bulk load-operaties.

Gelijktijdige gebruikerINSERT, UPDATEen DELETEMERGE bewerkingen worden toegepast op zowel de bestaande indexen als eventuele nieuwe indexen die worden gebouwd.
Intentie gedeeld (IS)

Sch-M object lock met het resource-subtype INDEX_OPERATION2
Final

Korte fase
Alle niet-doorgevoerde schrijftransacties moeten worden voltooid voordat deze fase wordt gestart. Afhankelijk van de verkregen vergrendeling worden alle nieuwe lees- of schrijftransacties van gebruikers gedurende een korte periode geblokkeerd totdat deze fase is voltooid.

Systeemmetagegevens worden bijgewerkt om de bron te vervangen door het doel.

De bron wordt indien nodig verwijderd, bijvoorbeeld na het opnieuw opbouwen of verwijderen van een geclusterde index.
Sch-M object lock met het resource-subtype INDEX_OPERATION2

Gedeeld (S) in de tabel als u een niet-geclusterde index maakt.1

Sch-M als er een bronstructuur (index of tabel) wordt verwijderd. 1

1 De indexbewerking wacht tot alle niet-doorgevoerde schrijftransacties zijn voltooid voordat de S vergrendeling of de Sch-M vergrendeling op de tabel wordt verkregen. Als er een langlopende query plaatsvindt, wacht de online indexbewerking totdat de query is voltooid. Tenzij vergrendelingen met lage prioriteit worden gebruikt, kan dit een blokkerende keten vormen.

2 Een Sch-M objectvergrendeling met het resourcesubtype INDEX_OPERATION voorkomt de uitvoering van gelijktijdige DDL-bewerkingen (Data Definition Language) op de bron en bestaande structuren terwijl de indexbewerking wordt uitgevoerd. Met deze vergrendeling voorkomt u bijvoorbeeld dat twee indexen gelijktijdig opnieuw worden opgebouwd in dezelfde tabel. Hoewel dit een Sch-M vergrendeling is, voorkomt het geen instructies voor gegevensmanipulatie.

In de vorige tabel ziet u één gedeelde (S) vergrendeling die is verkregen tijdens de buildfase van een online indexbewerking waarbij één index is betrokken. Wanneer geclusterde en niet-geclusterde indexen worden gebouwd of opnieuw worden opgebouwd, worden in één onlineindexbewerking (bijvoorbeeld tijdens het maken van de initiële geclusterde index op een tabel met een of meer niet-geclusterde indexen) twee korte-termijnvergrendelingen S verkregen tijdens de buildfase, gevolgd door gedeeldeIS () intentievergrendelingen op lange termijn. Er wordt eerst één S vergrendeling verkregen voor het maken van een geclusterde index. Wanneer de geclusterde index wordt gemaakt, wordt een tweede kortlopende S vergrendeling verkregen voor het maken van de niet-geclusterde indexen. Nadat de niet-geclusterde indexen zijn gemaakt, wordt de S vergrendeling gedowngraded naar een IS vergrendeling tot de laatste fase van de online indexbewerking.

Zie WAIT_AT_LOW_PRIORITY met online indexbewerkingen voor meer informatie over hoe vergrendelingen worden gebruikt en hoe u deze kunt beheren.

Activiteiten met betrekking tot de doelstructuur

De volgende tabel bevat de activiteiten die betrekking hebben op de doelstructuur tijdens elke fase van de indexbewerking en de bijbehorende vergrendelingsstrategie.

Phase Doelactiviteit Doelvergrendelingen
Preparation Er wordt een nieuwe index gemaakt en ingesteld op alleen schrijven. Intentie gedeeld (IS)
Build Gegevens worden vanuit de bron ingevoegd.

Gebruikerswijzigingen (invoegingen, updates, verwijderingen) die op de bron zijn toegepast, worden ook toegepast op het doel.

Deze activiteit is transparant voor de gebruiker.
Intentie gedeeld (IS)
Final Indexmetagegevens worden bijgewerkt.

De index is ingesteld op de lees-/schrijfstatus.
Gedeeld (S) of schemawijziging (Sch-M)

Het doel is niet toegankelijk voor gebruikersquery's totdat de indexbewerking is voltooid.

Nadat de voorbereidings- of laatste fase is voltooid, kunnen queryplannen die zijn opgeslagen in de plancache ongeldig worden.

De levensduur van een cursor die is gedeclareerd voor een tabel die betrokken is bij een onlineindexbewerking, wordt beperkt door de onlineindexfasen. Update-cursors worden tijdens elke fase ongeldig verklaard. Alleen-lezen cursors worden ongeldig gemaakt na de laatste fase.