Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Een controlepunt maakt een bekend goed punt waaruit de SQL Server Database Engine kan beginnen met het toepassen van wijzigingen in het logboek tijdens het herstellen na een onverwachte afsluiting of crash.
Overzicht
Om prestatieredenen voert de database-engine wijzigingen uit aan databasepagina's in het geheugen, in de buffercache en schrijft deze pagina's niet na elke wijziging naar schijf. In plaats daarvan geeft de database-engine periodiek een controlepunt uit voor elke database. Een controlepunt schrijft de huidige gewijzigde pagina's in het geheugen (ook wel vervuilde pagina's genoemd) en transactielogboekgegevens van het geheugen naar de schijf en registreert ook de informatie in het transactielogboek.
De database-engine ondersteunt verschillende typen controlepunten: automatisch, indirect, handmatig en intern. De volgende tabel bevat een overzicht van de typen controlepunten.
| Naam | Transact-SQL interface | Description |
|---|---|---|
| Automatisch | EXEC sp_configure 'herstelinterval', 'seconden' | Automatisch op de achtergrond uitgegeven om te voldoen aan de boventijdslimiet die wordt voorgesteld door de configuratieoptie voor het herstelinterval van de server. Automatische controlepunten worden afgerond. Automatische controlepunten worden beperkt op basis van het aantal openstaande schrijfbewerkingen en of de database-engine een toename van de schrijflatentie van meer dan 50 milliseconden detecteert. Zie De configuratieoptie voor de herstelintervalserver configureren voor meer informatie. |
| Indirect | ALTER DATABASE ... SET TARGET_RECOVERY_TIME = target_recovery_time { SECONDEN | MINUTEN } | Wordt op de achtergrond uitgegeven om te voldoen aan een door de gebruiker opgegeven doelhersteltijd voor een bepaalde database. Vanaf SQL Server 2016 (13.x) is de standaardwaarde 1 minuut. De standaardwaarde is 0 voor oudere versies, wat aangeeft dat de database automatische controlepunten gebruikt, waarvan de frequentie afhankelijk is van de herstelintervalinstelling van het serverexemplaren. Zie De beoogde hersteltijd van een database (SQL Server) wijzigen voor meer informatie. |
| Handleiding | CHECKPOINT [ checkpoint_duration ] | Uitgegeven wanneer u een Transact-SQL CHECKPOINT-opdracht uitvoert. Het handmatige controlepunt vindt plaats in de huidige database voor uw verbinding. Handmatige controlepunten worden standaard uitgevoerd tot voltooiing. Demping werkt op dezelfde manier als voor automatische controlepunten. Desgewenst geeft de parameter checkpoint_duration een aangevraagde hoeveelheid tijd, in seconden, op om het controlepunt te voltooien. Zie CHECKPOINT (Transact-SQL)voor meer informatie. |
| interne | Geen | Uitgegeven door verschillende serverbewerkingen, zoals het maken van back-ups en het maken van een databasemomentopname, zodat schijfkopieën overeenkomen met de momenteel staat van het logboek. |
Met de -k geavanceerde installatieoptie van SQL Server kan een databasebeheerder het I/O-gedrag van controlepunten beperken op basis van de doorvoer van het I/O-subsysteem voor bepaalde typen controlepunten. De -k instellingsoptie is van toepassing op automatische controlepunten en andere niet-beperkte handmatige en interne controlepunten.
Voor automatische, handmatige en interne controlepunten hoeven alleen wijzigingen na het laatste controlepunt te worden doorgevoerd tijdens het herstellen van de database. Dit vermindert de tijd die nodig is om een database te herstellen.
Belangrijk
Langlopende, niet-doorgevoerde transacties verhogen de hersteltijd voor alle controlepunttypen.
Interactie van de opties voor TARGET_RECOVERY_TIME en herstelinterval
De volgende tabel bevat een overzicht van de interactie tussen de serverbrede sp_configure 'recovery interval' instelling en de databasespecifieke ALTER DATABASE ... TARGET_RECOVERY_TIME instelling.
| DOELHERSTELTIJD | 'herstelinterval' | Type controlepunt dat wordt gebruikt |
|---|---|---|
| 0 | 0 | automatische controlepunten waarvan het doelherstelinterval 1 minuut is. |
| 0 | > 0 | Automatische controlepunten waarvan het doelherstelinterval wordt opgegeven door de door de gebruiker gedefinieerde instelling van de sp_configure 'recovery interval' optie. |
| > 0 | Niet van toepassing | Indirecte controlepunten waarvan de beoogde hersteltijd wordt bepaald door de TARGET_RECOVERY_TIME instelling, uitgedrukt in seconden. |
Automatische controlepunten
Een automatisch controlepunt vindt plaats telkens wanneer het aantal logboekrecords het getal bereikt dat de database-engine schat dat het kan verwerken tijdens de tijd die is opgegeven in de configuratieoptie voor de herstelintervalserver . Zie De configuratieoptie voor de herstelintervalserver configureren voor meer informatie.
In elke database zonder door de gebruiker gedefinieerde hersteltijd genereert de database-engine automatische controlepunten. De frequentie is afhankelijk van de geavanceerde serverconfiguratieoptie voor het herstelinterval , waarmee de maximale tijd wordt opgegeven die een bepaald serverexemplaren moeten gebruiken om een database te herstellen tijdens het opnieuw opstarten van het systeem. De database-engine schat het maximum aantal logboekrecords dat het kan verwerken binnen het herstelinterval. Wanneer een database die gebruikmaakt van automatische controlepunten dit maximum aantal logboekrecords bereikt, geeft de database-engine een controlepunt op de database uit.
Het tijdsinterval tussen automatische controlepunten kan zeer variabel zijn. Een database met een aanzienlijke transactieworkload heeft vaker controlepunten dan een database die voornamelijk wordt gebruikt voor alleen-lezenbewerkingen. Onder het eenvoudige herstelmodel wordt ook een automatisch controlepunt in de wachtrij geplaatst als het logboek 70 procent vol wordt.
Onder het eenvoudige herstelmodel, tenzij een bepaalde factor het afkappen van logboeken vertraagt, kapt een automatisch controlepunt de ongebruikte sectie van het transactielogboek af. Daarentegen veroorzaken automatische controlepunten geen logboektruncatie onder de volledige en bulkgeboekte herstelmodellen, zodra er een back-upketen voor logboeken tot stand is gebracht. Zie Het transactielogboek (SQL Server)voor meer informatie.
Na een systeemcrash is de benodigde tijdsduur voor het herstellen van een bepaalde database grotendeels afhankelijk van de hoeveelheid willekeurige I/O die nodig is om pagina's opnieuw uit te voeren die op het moment van de crash vuil waren. Dit betekent dat de instelling voor het herstelinterval onbetrouwbaar is. Er kan geen nauwkeurige herstelduur worden vastgesteld. Wanneer een automatisch controlepunt wordt uitgevoerd, neemt de algemene I/O-activiteit voor gegevens bovendien aanzienlijk en onvoorspelbaar toe.
Effect van herstelinterval op herstelprestaties
Voor een OLTP-systeem (Online Transaction Processing) met behulp van korte transacties is het herstelinterval de primaire factor die de hersteltijd bepaalt. De optie voor het herstelinterval heeft echter geen invloed op de tijd die nodig is om een langlopende transactie ongedaan te maken. Het herstellen van een database met een langlopende transactie kan veel langer duren dan de tijd die is opgegeven in de instelling voor het herstelinterval .
Als een langlopende transactie bijvoorbeeld twee uur duurde om updates uit te voeren voordat het serverexemplaren werden uitgeschakeld, duurt het daadwerkelijk herstel aanzienlijk langer dan de waarde van het herstelinterval om de lange transactie te herstellen. Zie Het transactielogboek (SQL Server) voor meer informatie over de impact van een langlopende transactie op de hersteltijd. Zie Herstel- en hersteloverzicht (SQL Server) voor meer informatie over het herstelproces.
Normaal gesproken bieden de standaardwaarden optimale herstelprestaties. Het wijzigen van het herstelinterval kan echter de prestaties in de volgende omstandigheden verbeteren:
Als herstel regelmatig aanzienlijk langer duurt dan 1 minuut wanneer langlopende transacties niet worden teruggedraaid.
Als u merkt dat frequente controlepunten de prestaties van een database nadelig beïnvloeden.
Als u besluit de instelling voor het herstelinterval te verhogen, raden we u aan deze geleidelijk te verhogen met kleine stappen en het effect van elke incrementele toename van de herstelprestaties te evalueren. Deze aanpak is belangrijk omdat het opnieuw instellen van het herstelinterval betekent dat het herstellen van de database in dezelfde mate langer duurt. Als u bijvoorbeeld het herstelinterval wijzigt in 10 minuten, duurt het ongeveer tien keer langer om het herstel te voltooien dan wanneer het herstelinterval is ingesteld op 1 minuut.
Indirecte controlepunten
Indirecte controlepunten, geïntroduceerd in SQL Server 2012 (11.x), bieden een configureerbaar alternatief op databaseniveau voor automatische controlepunten. Dit kan worden geconfigureerd door de configuratieoptie voor de doelhersteltijd van de database op te geven. Zie De beoogde hersteltijd van een database (SQL Server) wijzigen voor meer informatie. In het geval van een systeemcrash bieden indirecte controlepunten mogelijk snellere, voorspelbarere hersteltijd dan automatische controlepunten.
Indirecte controlepunten bieden de volgende voordelen:
Indirecte controlepunten zorgen ervoor dat het aantal vuile pagina's onder een bepaalde drempelwaarde valt, zodat het databaseherstel binnen de beoogde hersteltijd wordt voltooid.
De configuratieoptie herstelinterval maakt gebruik van het aantal transacties om de hersteltijd te bepalen, in plaats van indirecte controlepunten die gebruikmaken van het aantal vuile pagina's. Wanneer indirecte controlepunten zijn ingeschakeld voor een database die een groot aantal DML-bewerkingen ontvangt, kan de achtergrondschrijver beginnen met het agressief leegmaken van vuile buffers op schijf om ervoor te zorgen dat de tijd die nodig is om herstel uit te voeren binnen de beoogde hersteltijdset van de database valt. Dit kan leiden tot extra I/O-activiteit op bepaalde systemen, die kunnen bijdragen aan een prestatieknelpunt als het schijfsubsysteem boven of in de buurt van de I/O-drempelwaarde ligt.
Met indirecte controlepunten kunt u de hersteltijd van de database betrouwbaar beheren door rekening te houden met de kosten van willekeurige I/O tijdens redO. Hierdoor kan een serverexemplaar binnen een bovengrens blijven voor de hersteltijden van een bepaalde database (behalve wanneer een langlopende transactie voor overmatige ongedaanmaaktijden zorgt).
Indirecte controlepunten verminderen controlepuntgerelateerde I/O-spiking door voortdurend vuile pagina's op schijf op de achtergrond te schrijven.
Een online transactionele workload in een database die is geconfigureerd voor indirecte controlepunten kan echter prestatievermindering ervaren. Dit komt doordat de achtergrondschrijver die door een indirect controlepunt wordt gebruikt soms de totale schrijfbelasting voor een serverexemplaar verhoogt.
Belangrijk
Indirect controlepunt is het standaardgedrag voor nieuwe databases die zijn gemaakt in SQL Server 2016 (13.x), inclusief de model en tempdb databases.
Databases die in-place zijn bijgewerkt of hersteld vanuit een eerdere versie van SQL Server, gebruiken het vorige automatische checkpuntgedrag, tenzij deze expliciet zijn gewijzigd om indirecte checkpoints te gebruiken.
Verbeterde schaalbaarheid van indirecte controlepunten
Vóór SQL Server 2019 (15.x) kunnen er niet-opleverende scheduler-fouten optreden wanneer er een database is die een groot aantal vuile pagina's genereert, zoals tempdb. SQL Server 2019 (15.x) introduceert een verbeterde schaalbaarheid voor indirect controlepunt, waardoor deze fouten in databases met een zware UPDATE/INSERT werkbelasting kunnen worden vermeden.
Interne controlepunten
Interne checkpoints worden gegenereerd door verschillende serveronderdelen om te garanderen dat schijfimages overeenkomen met de huidige status van het logboek. Interne controlepunten worden gegenereerd als reactie op de volgende gebeurtenissen:
Databasebestanden zijn toegevoegd of verwijderd met behulp van ALTER DATABASE.
Er wordt een databaseback-up gemaakt.
Er wordt een momentopname van een database gemaakt, hetzij expliciet of intern voor DBCC CHECKDB.
Er wordt een activiteit uitgevoerd waarvoor een database moet worden afgesloten. Bijvoorbeeld, AUTO_CLOSE is INGESCHAKELD en de laatste gebruikersverbinding met de database is gesloten, of een wijziging in de databaseoptie wordt aangebracht waarvoor een herstart van de database is vereist.
Een exemplaar van SQL Server wordt gestopt door de SQL Server-service (MSSQLSERVER) te stoppen. Deze actie veroorzaakt een controlepunt in elke database in het exemplaar van SQL Server.
Een instantie van een SQL Server-failovercluster (FCI) offline brengen.
Volgende stappen
- De configuratieoptie voor de herstelintervalserver configureren
- De doelhersteltijd van een database (SQL Server) wijzigen
- CHECKPOINT (Transact-SQL)
Zie ook
- The Transaction Log (SQL Server) (Het transactielogboek (SQL Server))
- Architectuur en beheerhandleiding voor SQL Server-transactielogboeken