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
Azure Synapse Analytics
Analytics Platform Systeem (PDW)
SQL-database in Microsoft Fabric
De I/O van een exemplaar van de database-engine bevat logische en fysieke schrijfbewerkingen. Een logische schrijfbewerking vindt plaats wanneer gegevens worden gewijzigd op een pagina in de buffercache. Een fysieke schrijfbewerking treedt op wanneer de pagina wordt geschreven van de buffercache naar schijf.
Wanneer een pagina wordt gewijzigd in de buffercache, wordt deze niet onmiddellijk teruggeschreven naar de schijf; In plaats daarvan wordt de pagina gemarkeerd als vuil. Dit betekent dat een pagina meer dan één logische schrijfbewerking kan hebben gemaakt voordat deze fysiek naar de schijf wordt geschreven. Voor elke logische schrijfbewerking wordt een transactielogboekrecord ingevoegd in de logboekcache waarin de wijziging wordt vastgelegd. De logboekrecords moeten naar schijf worden geschreven voordat de bijbehorende vuile pagina wordt verwijderd uit de buffercache en naar schijf wordt geschreven.
SQL Server maakt gebruik van een techniek die bekend staat als write-ahead logging (WAL) die het schrijven van een vuile pagina voorkomt voordat de bijbehorende logboekrecord naar de schijf wordt geschreven. Dit is essentieel voor de juiste werking van de recovery manager. Zie het transactielogboek voor write-ahead voor meer informatie.
Hoe SQL Server een gewijzigde gegevenspagina schrijft
In de volgende afbeelding ziet u het proces voor het schrijven van een gewijzigde gegevenspagina.
Wanneer de bufferbeheerder een pagina schrijft, wordt gezocht naar aangrenzende vuile pagina's die kunnen worden opgenomen in één gather-write-bewerking. Aangrenzende pagina's hebben opeenvolgende pagina-id's en zijn afkomstig uit hetzelfde bestand; de pagina's hoeven niet aaneengesloten te zijn in het geheugen. De zoekopdracht gaat door naar voren en achteruit totdat een van de volgende gebeurtenissen plaatsvindt:
- Er is een schone pagina gevonden.
- Er zijn 32 pagina's gevonden.
- Er wordt een vuile pagina gevonden waarvan het logvolgnummer (LSN) nog niet is weggeschreven in het logboek.
- Er is een pagina gevonden die niet direct kan worden vastgezet.
Op deze manier kan de volledige set pagina's naar schijf worden geschreven met één gather-write-bewerking.
Net voordat een pagina wordt geschreven, wordt de vorm van paginabeveiliging die in de database is opgegeven, toegevoegd aan de pagina.
Als de beveiliging van een gescheurde pagina wordt toegevoegd, moet de pagina uitsluitend (EX) worden vergrendeld ten behoeve van de I/O. Dit komt doordat de beveiliging van de gescheurde pagina de pagina wijzigt, waardoor deze ongeschikt is voor andere threads om te lezen.
Als er een controlesompaginabeveiliging wordt toegevoegd of de database geen paginabeveiliging gebruikt, wordt de pagina vergrendeld met een update (UP)-vergrendeling voor de I/O-bewerking. Met deze vergrendeling voorkomt u dat iemand anders de pagina tijdens het schrijven wijzigt, maar laat lezers deze nog steeds gebruiken.
Zie Bufferbeheer voor meer informatie over opties voor schijf-I/O-paginabeveiliging.
Hoe vuile pagina's naar schijf worden geschreven
Een vuile pagina wordt op drie manieren naar schijf geschreven:
De luie schrijf-, gretige schrijf- en controlepuntprocessen wachten niet totdat de I/O-bewerking is voltooid. Ze gebruiken altijd asynchrone (of overlappende) I/O en gaan verder met ander werk en controleren op I/O-succes later. Hierdoor kan SQL Server zowel CPU- als I/O-resources maximaliseren voor de juiste taken.
Luie schrijfproces
De luie schrijver is een systeemproces dat vrije buffers beschikbaar houdt door onregelmatig gebruikte pagina's uit de buffercache te verwijderen. Vuile pagina's worden eerst naar schijf geschreven.
Gretig schrijfproces
Het gretige schrijfproces schrijft vuile gegevenspagina's die zijn gekoppeld aan minimaal vastgelegde bewerkingen, zoals bulksgewijs invoegen en selecteren. Met dit proces kunnen nieuwe pagina's parallel worden gemaakt en geschreven. Dat wil gezegd, de aanroepende bewerking hoeft niet te wachten totdat de hele bewerking is voltooid voordat de pagina's naar schijf worden geschreven.
Controlepuntproces
Het controlepuntproces scant periodiek de buffercache op buffers met pagina's uit een opgegeven database en schrijft alle vuile pagina's naar schijf. Controlepunten besparen tijd tijdens een later herstel door een punt te maken waarop alle vuile pagina's gegarandeerd naar de schijf zijn geschreven.
De gebruiker kan een controlepuntbewerking aanvragen met behulp van de CHECKPOINT opdracht of de database-engine kan automatische controlepunten genereren op basis van de hoeveelheid gebruikte logboekruimte en de tijd die is verstreken sinds het laatste controlepunt. Daarnaast wordt er een controlepunt gegenereerd wanneer bepaalde activiteiten plaatsvinden. Bijvoorbeeld wanneer een gegevens- of logboekbestand wordt toegevoegd aan of verwijderd uit een database, of wanneer het exemplaar van SQL Server wordt gestopt.
Zie Controlepunten en het actieve gedeelte van het logboek voor meer informatie.
Verwante inhoud
- architectuurhandleiding voor pagina's en extenties
- Gegevenspagina's lezen in de database-engine