Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Wanneer u online indexbewerkingen uitvoert, zijn de volgende richtlijnen van toepassing:
- Geclusterde indexen moeten offline worden gemaakt, opnieuw opgebouwd of offline worden verwijderd wanneer de onderliggende tabel de volgende gegevenstypen voor grote objecten (LOB) bevat: afbeelding, nteksten tekst.
- Niet-geclusterde indexen kunnen online worden gemaakt wanneer de tabel kolommen bevat met behulp van de LOB-gegevenstypen, maar geen van deze kolommen wordt gebruikt in de indexdefinitie als sleutel- of opgenomen kolommen.
- Indexen voor lokale tijdelijke tabellen kunnen niet online worden gemaakt, opnieuw opgebouwd of verwijderd. Deze beperking geldt niet voor indexen in globale tijdelijke tabellen.
- U kunt een online indexbewerking starten als een hervatbare bewerking met behulp van de
RESUMABLE
component van CREATE INDEX of ALTER INDEX. Een hervatbare indexbewerking kan opnieuw worden gestart na een onverwachte fout, databasefailover of eenALTER INDEX PAUSE
opdracht en doorgaan vanaf de locatie waar deze is onderbroken.
Notitie
Online indexbewerkingen zijn niet beschikbaar in elke editie van Microsoft SQL Server. Zie -edities en ondersteunde functies van SQL Server 2022voor een lijst met functies die worden ondersteund door de edities van SQL Server.
In de volgende tabel ziet u de indexbewerkingen die online kunnen worden uitgevoerd, de indexen die zijn uitgesloten van deze onlinebewerkingen en hervatbare indexbeperkingen. Er zijn ook extra beperkingen inbegrepen.
Online indexbewerking | Uitgesloten indexen | Andere beperkingen |
---|---|---|
ALTER INDEX REBUILD |
Uitgeschakelde geclusterde index of uitgeschakelde geïndexeerde weergave XML-index Indexeren op een lokale tijdelijke tabel |
Als u het trefwoord opgeeft ALL kan de bewerking mislukken wanneer de tabel een uitgesloten index bevat.Aanvullende beperkingen voor het opnieuw samenstellen van uitgeschakelde indexen zijn van toepassing. Zie Indexen en beperkingen uitschakelenvoor meer informatie. |
CREATE INDEX |
XML-index Initiële unieke geclusterde index in een weergave Indexeren op een lokale tijdelijke tabel |
|
CREATE INDEX WITH DROP_EXISTING |
Uitgeschakelde geclusterde index of uitgeschakelde geïndexeerde weergave Indexeren op een lokale tijdelijke tabel XML index |
|
DROP INDEX |
Uitgeschakelde index XML-index Niet-geclusterde index Indexeren op een lokale tijdelijke tabel |
Meerdere indexen kunnen niet binnen één instructie worden opgegeven. |
ALTER TABLE ADD CONSTRAINT (PRIMARY KEY of UNIQUE ) |
Indexeren op een lokale tijdelijke tabel Geclusterde index |
Er is slechts één subclause tegelijk toegestaan. U kunt bijvoorbeeld geen beperkingen voor PRIMARY KEY of UNIQUE toevoegen en verwijderen in dezelfde ALTER TABLE instructie. |
ALTER TABLE DROP CONSTRAINT (PRIMARY KEY of UNIQUE ) |
Geclusterde index |
De onderliggende tabel kan niet worden gewijzigd, afgekapt of verwijderd terwijl er een onlineindexbewerking wordt uitgevoerd.
De onlineoptie-instelling (ON
of OFF
) die is opgegeven wanneer u een geclusterde index maakt of neer zet, wordt toegepast op niet-geclusterde indexen die opnieuw moeten worden opgebouwd. Als de geclusterde index bijvoorbeeld online wordt gemaakt met behulp van CREATE INDEX WITH DROP_EXISTING, ONLINE=ON
, worden alle gekoppelde niet-geclusterde indexen ook online gemaakt.
Wanneer u een UNIQUE
-index online maakt of herbouwt, proberen de indexbouwer en een gelijktijdige gebruikerstransactie dezelfde sleutel in te voegen, waardoor de uniekheid wordt geschonden. Als een rij die door een gebruiker wordt ingevoerd, wordt ingevoegd in de nieuwe index (doel) voordat de oorspronkelijke rij uit de brontabel naar de nieuwe index wordt verplaatst, mislukt de online indexbewerking.
Hoewel niet gebruikelijk, kan de online indexbewerking een impasse veroorzaken wanneer deze communiceert met database-updates vanwege gebruikers- of toepassingsactiviteiten. In deze zeldzame gevallen wordt de activiteit van de gebruiker of toepassing geselecteerd als het slachtoffer van een doodlopende kringloop.
U kunt gelijktijdige DDL-bewerkingen voor online indexen uitvoeren in dezelfde tabel of weergave alleen wanneer u meerdere nieuwe niet-geclusterde indexen maakt of niet-geclusterde indexen opnieuw ordenen. Alle andere online indexbewerkingen die tegelijkertijd worden uitgevoerd, mislukken. U kunt bijvoorbeeld geen nieuwe index online maken tijdens het opnieuw samenstellen van een bestaande index in dezelfde tabel.
Een onlinebewerking kan niet worden uitgevoerd wanneer een index een kolom van het grote objecttype bevat en dezelfde transactie gegevenswijzigingen aanbrengt voordat de online indexbewerking wordt gestart. Als u dit probleem wilt omzeilen, verplaatst u de onlineindexbewerking buiten de transactie of verplaatst u deze vóór gegevenswijzigingen in dezelfde transactie.
Overwegingen voor schijfruimte
Online indexbewerkingen vereisen meer schijfruimte dan offline indexbewerkingen.
- Tijdens het maken van de index en het opnieuw opbouwen van indexen is extra ruimte vereist voor de index die wordt gebouwd (of opnieuw wordt opgebouwd). Deze extra ruimte is meestal hetzelfde als de huidige ruimte die door de index wordt bezet, maar deze kan groter of kleiner zijn, afhankelijk van de compressie die wordt gebruikt in de huidige of herbouwde index.
- Daarnaast is schijfruimte vereist voor de tijdelijke mappingindex. Deze tijdelijke index wordt gebruikt in online indexbewerkingen die een geclusterde index maken, herbouwen of verwijderen.
- Het online verwijderen van een geclusterde index vereist net zoveel ruimte als het online maken (of herbouwen) van een geclusterde index.
Zie Schijfruimtevereisten voor DDL-indexbewerkingenvoor meer informatie.
Prestatieoverwegingen
Hoewel online indexbewerkingen gelijktijdige activiteit van gebruikersupdates toestaan, kunnen de indexbewerkingen langer duren als de updateactiviteit zwaar is. Online indexbewerkingen zijn doorgaans trager dan gelijkwaardige offline indexbewerkingen, ongeacht het niveau van de gelijktijdige updateactiviteit.
Omdat zowel de bron- als doelstructuren worden onderhouden tijdens de onlineindexbewerking, wordt het resourcegebruik voor het invoegen, bijwerken en verwijderen van transacties verhoogd, mogelijk verdubbeld. Dit kan leiden tot een afname van de prestaties en een groter resourcegebruik, met name cpu-tijd, tijdens de indexbewerking. Online indexbewerkingen worden volledig geregistreerd.
Hoewel we onlinebewerkingen aanbevelen, moet u uw omgeving en specifieke vereisten evalueren. Het kan optimaal zijn om indexbewerkingen offline uit te voeren. Hierdoor wordt de gebruikerstoegang tot de gegevens tijdens de bewerking beperkt, maar de bewerking wordt sneller voltooid en gebruikt minder resources.
Op computers met meerdere processors waarop SQL Server 2016 (13.x) en latere versies worden uitgevoerd, kunnen indexbewerkingen parallellisme gebruiken om de scan- en sorteerbewerkingen uit te voeren die zijn gekoppeld aan de indexinstructie. U kunt de MAXDOP
indexoptie gebruiken om de mate van parallelle uitvoering van de online indexbewerking te bepalen. Op deze manier kunt u de resources verdelen die door indexbewerking worden gebruikt met resources van de gelijktijdige gebruikers. Zie Parallelle indexbewerkingen configurerenvoor meer informatie. Zie -edities en ondersteunde functies van SQL Server 2022voor meer informatie over de edities van SQL Server die parallelle indexbewerkingen ondersteunen.
Omdat een gedeelde (S
) vergrendeling of schemawijzigingsvergrendeling (Sch-M
) wordt behouden in de laatste fase van de indexbewerking, moet u voorzichtig zijn bij het uitvoeren van een online indexbewerking binnen een expliciete gebruikerstransactie, zoals BEGIN TRANSACTION ... COMMIT
blok. Hierdoor worden de vergrendelingen bewaard tot het einde van de transactie, waardoor andere workloads mogelijk worden geblokkeerd.
Als indexpaginavergrendelingen zijn uitgeschakeld met ALLOW_PAGE_LOCKS=OFF
, kan het herbouwen van online indexen de fragmentatie van de index verhogen wanneer deze wordt uitgevoerd met MAXDOP
groter dan 1. Zie How It Works: Online Index Rebuild - Can Cause Increased Fragmenting(Online index herbouwen - Kan verhoogde fragmentatie veroorzaken) voor meer informatie.
Overwegingen voor transactielogboeken
Grootschalige indexbewerkingen die offline of online worden uitgevoerd, kunnen grote hoeveelheden transactielogboeken genereren. Dit komt doordat zowel offline- als online herbouwbewerkingen voor indexen volledig zijn vastgelegd. Om ervoor te zorgen dat de indexbewerking kan worden teruggedraaid, kan het transactielogboek pas worden afgekapt als de indexbewerking is voltooid; Er kan echter een back-up van het logboek worden gemaakt tijdens de indexbewerking.
Daarom moet het transactielogboek voldoende ruimte hebben om zowel de indexbewerkingstransacties als gelijktijdige gebruikerstransacties tijdens de indexbewerking op te slaan. Zie Schijfruimte voor transactielogboeken voor indexbewerkingenvoor meer informatie.
Online indexbewerkingen veroorzaken geen hoge groei van transactielogboeken als versneld databaseherstel (ADR) is ingeschakeld.
Overwegingen voor permanente versieopslag
Als ADR is ingeschakeld, kan het online maken of herbouwen van een grote index de grootte van permanente versieopslag (PVS) aanzienlijk vergroten terwijl de indexbewerking wordt uitgevoerd. Zorg ervoor dat de database voldoende vrije ruimte heeft om PVS te laten groeien. Zie Bewaken en problemen met versneld databaseherstel oplossenvoor meer informatie.
Overwegingen voor hervatting van indexen
De RESUMABLE
-indexoptie voor CREATE INDEX
en ALTER INDEX
is van toepassing op SQL Server (ALTER INDEX
vanaf SQL Server 2017 (14.x) en CREATE INDEX
te beginnen met SQL Server 2019 (15.x)), Azure SQL Database en Azure SQL Managed Instance. Zie CREATE INDEX en ALTER INDEXvoor meer informatie.
Als u de optie RESUMABLE
wilt gebruiken, moet u ook de optie ONLINE
gebruiken. Wanneer u hervatbare index maakt of herbouwt, zijn de volgende richtlijnen van toepassing:
- U hebt betere controle over het beheren, plannen en uitbreiden van onderhoudsvensters voor indexen. U kunt een indexbewerking meerdere keren onderbreken en opnieuw starten, zodat deze past bij uw onderhoudsvensters.
- U kunt herstellen na het maken of opnieuw opbouwen van indexfouten (zoals databasefailovers of onvoldoende schijfruimte) zonder dat u de indexbewerking opnieuw hoeft op te starten vanaf het begin.
- Wanneer een indexbewerking is onderbroken, vereisen zowel de oorspronkelijke index als de zojuist gemaakte index schijfruimte en moet deze worden bijgewerkt tijdens DML-bewerkingen.
- De optie
SORT_IN_TEMPDB=ON
wordt niet ondersteund. - Uitgeschakelde indexen worden niet ondersteund.
Tip
Voor hervatbare indexbewerkingen is geen grote transactie vereist, waardoor regelmatige afkapping van logboeken tijdens deze bewerking wordt toegestaan en grote logboekgroei wordt voorkomen. De gegevens die nodig zijn om een indexbewerking te hervatten en te voltooien, worden opgeslagen in de gegevensbestanden van een database.
Over het algemeen is er geen prestatieverschil tussen hervatbare en niet-onresumerbare online indexbewerkingen. Voor hervatbare CREATE INDEX
is er een constante overhead die aanzienlijk tragere bewerkingen voor kleinere tabellen kan veroorzaken.
Wanneer een hervatbare indexbewerking wordt onderbroken:
- Voor voornamelijk leesworkloads is de prestatievermindering onbelangrijk.
- Voor werkbelastingen met veel updates kan er enige vermindering van prestaties optreden, afhankelijk van de specifieke werkbelastingen.
Over het algemeen is er geen verschil in de defragmentatiekwaliteit tussen hervatbare en niet-onresumerbare online indexen maken of herbouwen.
Notitie
Hoewel een online indexbewerking is onderbroken, mislukt elke transactie die een exclusieve tabelniveau (X
) vergrendeling vereist op de tabel die de onderbroken index bevat. Dit kan bijvoorbeeld gebeuren met INSERT ... WITH (TABLOCK)
-bewerkingen. In dit geval krijgt u fout 10637:
Cannot perform this operation on '<object name>' with ID (<object ID>) as one or more indexes are currently in resumable index rebuild state. Please refer to sys.index_resumable_operations for more details.
Als u fout 10637 wilt oplossen, verwijdert u de TABLOCK
hint uit uw transactie of maakt u de indexbewerking ongedaan en wacht u totdat deze is voltooid voordat u de transactie opnieuw probeert uit te voeren.
Online standaardopties
U kunt online- en hervatbare indexbewerkingen instellen als de standaardopties op databaseniveau door de configuraties voor ELEVATE_ONLINE
of ELEVATE_RESUMABLE
databasebereik in te stellen. Met deze standaardopties kunt u voorkomen dat u per ongeluk een offline indexbewerking start waardoor een tabel of index niet toegankelijk is terwijl deze wordt uitgevoerd. Beide opties zorgen ervoor dat de database-engine bepaalde indexbewerkingen automatisch verhoogt tot online of hervatbare uitvoering.
U kunt de optie instellen als FAIL_UNSUPPORTED
, WHEN_SUPPORTED
of OFF
. U kunt verschillende waarden instellen voor ELEVATE_ONLINE
en ELEVATE_RESUMABLE
. Zie ALTER DATABASE SCOPED CONFIGURATIONvoor meer informatie.
Zowel ELEVATE_ONLINE
als ELEVATE_RESUMABLE
zijn alleen van toepassing op DDL-instructies die respectievelijk de online- en hervatbare syntaxis ondersteunen. Als u bijvoorbeeld probeert een XML-index te maken met ELEVATE_ONLINE=FAIL_UNSUPPORTED
, wordt de bewerking offline uitgevoerd omdat XML-indexen de optie ONLINE
niet ondersteunen. De opties zijn alleen van invloed op DDL-instructies die worden verzonden zonder een ONLINE
of RESUMABLE
optie op te geven. Door bijvoorbeeld een instructie met ONLINE=OFF
of RESUMABLE=OFF
in te dienen, kan de gebruiker een FAIL_UNSUPPORTED
instelling overschrijven en een instructie offline en/of niet-onherstelbaar uitvoeren.
Notitie
ELEVATE_ONLINE
en ELEVATE_RESUMABLE
zijn niet van toepassing op XML-indexbewerkingen.