Delen via


Hoe online indexbewerkingen werken

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

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 van gebruikers op de bron worden door de database-engine toegepast op het doel 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-schrijven.

  • Tijdelijke toewijzingsindex

    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. Gelijktijdige transacties onderhouden de tijdelijke toewijzingsindex in al hun invoeg-, update- en verwijderbewerkingen.

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 Source activity Source locks
Preparation

Short phase
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 resourcesubtype INDEX_OPERATION2
Build

Main phase
De gegevens worden gescand, gesorteerd, samengevoegd en ingevoegd in het doel met behulp van bulksgewijs laden.

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

Sch-M objectvergrendeling met het resourcesubtype INDEX_OPERATION2
Final

Short phase
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 objectvergrendeling met het resourcesubtype 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 opgehaald. 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, worden er geen instructies voor gegevensmanipulatie voorkomen.

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 in 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 Target activity Target locks
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 wordt pas geopend door gebruikersquery's als de indexbewerking is voltooid.

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

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