Dela via


Skriva sidor i databasmotorn

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

I/O från en instans av databasmotorn innehåller logiska och fysiska skrivningar. En logisk skrivning inträffar när data ändras på en sida i buffertcachen. En fysisk skrivning sker när sidan skrivs från buffertcachen till disken.

När en sida ändras i buffertcachen skrivs den inte omedelbart tillbaka till disken. i stället markeras sidan som smutsig. Det innebär att en sida kan ha fler än en logisk skrivning gjord innan den skrivs fysiskt till disk. För varje logisk skrivning infogas en transaktionsloggpost i loggcachen som registrerar ändringen. Loggposterna måste skrivas till disken innan den associerade smutsiga sidan tas bort från buffertcachen och skrivs till disken.

SQL Server använder en teknik som kallas för loggning före skrivning (WAL) som förhindrar att en felaktig sida skrivs innan den associerade loggposten skrivs till disken. Detta är viktigt för att återställningshanteraren ska fungera korrekt. Mer information finns i Transaktionsloggen Skriv framåt.

Så här skriver SQL Server en ändrad datasida

Följande bild visar processen för att skriva en ändrad datasida.

Skärmbild av Writing_Pages.

När bufferthanteraren skriver en sida söker den efter intilliggande smutsiga sidor som kan ingå i en enda insamlingsskrivningsåtgärd. Intilliggande sidor har sid-ID:t i följd och kommer från samma fil. sidorna behöver inte vara sammanhängande i minnet. Sökningen fortsätter både framåt och bakåt tills någon av följande händelser inträffar:

  • En ren sida har hittats.
  • 32 sidor har hittats.
  • En smutsig sida hittas vars loggsekvensnummer (LSN) ännu inte har skrivits i loggen.
  • Det finns en sida som inte kan låsas omedelbart.

På så sätt kan hela uppsättningen sidor skrivas till disk med en enda samlad skrivoperation.

Precis innan en sida skrivs läggs den form av sidskydd som anges i databasen till på sidan.

  • Om skydd för trasiga sidor läggs till måste sidan haspas exklusivt (EX) för I/O. Det beror på att det slitna sidskyddet ändrar sidan, vilket gör den olämplig för andra trådar att läsa.

  • Om kontrollsummans sidskydd har lagts till eller om databasen inte använder något sidskydd, är sidan låst med en uppdateringsspärr (UP) för I/O. Den här spärren hindrar alla andra från att ändra sidan under skrivning, men ändå tillåter läsare att använda den.

Mer information om alternativ för disk-I/O-sidskydd finns i Bufferthantering.

Hur smutsiga sidor skrivs till disk

En smutsig sida skrivs till disk på något av tre sätt:

De lata skriv-, ivriga skriv- och kontrollpunktsprocesserna väntar inte på att I/O-åtgärden ska slutföras. De använder alltid asynkrona (eller överlappade) I/O och fortsätter med annat arbete, för att senare kontrollera om I/O:n lyckades. Detta gör att SQL Server kan maximera både CPU- och I/O-resurser för lämpliga uppgifter.

Lat skrivprocess

Den lata skrivaren är en systemprocess som håller kostnadsfria buffertar tillgängliga genom att ta bort sällan använda sidor från buffertcachen. Smutsiga sidor skrivs först till disk.

Ivrig skrivprocess

Den ivriga skrivprocessen skriver smutsiga datasidor som är associerade med minimalt loggade åtgärder, till exempel massinfogning och val i. Den här processen gör det möjligt att skapa och skriva nya sidor parallellt. Det innebär att anropsåtgärden inte behöver vänta tills hela åtgärden har slutförts innan sidorna skrivs till disken.

Kontrollpunktsprocess

Kontrollpunktsprocessen söker regelbundet igenom buffertcachen efter buffertar med sidor från en angiven databas och skriver alla smutsiga sidor till disken. Kontrollpunkter sparar tid under en senare återställning genom att skapa en punkt där alla smutsiga sidor garanterat har skrivits till disk.

Användaren kan begära en kontrollpunktsåtgärd med hjälp CHECKPOINT av kommandot, eller så kan databasmotorn generera automatiska kontrollpunkter baserat på mängden loggutrymme som använts och den tid som förflutit sedan den senaste kontrollpunkten. Dessutom genereras en kontrollpunkt när vissa aktiviteter inträffar. Till exempel när en data- eller loggfil läggs till eller tas bort från en databas eller när instansen av SQL Server stoppas.

Mer information finns i Kontrollpunkter och den aktiva delen av loggen.