Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Die E/A-Aktivitäten einer Instanz der Datenbank-Engine schließen logische und physische Schreibvorgänge ein. Ein logischer Schreibvorgang findet statt, wenn Daten auf einer Seite im Puffercache geändert werden. Ein physischer Schreibvorgang findet statt, wenn die Seite vom Puffercache auf den Datenträger geschrieben wird.
Wenn eine Seite im Puffercache geändert wird, wird sie nicht sofort auf den Datenträger zurückgeschrieben. Stattdessen wird die Seite als schmutzig markiert. Dies bedeutet, dass eine Seite mehrere logische Schreibvorgänge enthalten kann, bevor sie physisch auf den Datenträger geschrieben wird. Für jeden logischen Schreibvorgang wird ein Transaktionsprotokoll-Datensatz in den Protokollcache geschrieben, der die Änderung aufzeichnet. Die Protokolldatensätze müssen auf den Datenträger geschrieben werden, bevor die zugehörige modifizierte Seite aus dem Puffercache entfernt und auf den Datenträger geschrieben wird.
SQL Server verwendet eine Technik, die als Schreibschutzprotokollierung (Write-Ahead Logging, WAL) bezeichnet wird, die verhindert, dass eine schmutzige Seite geschrieben wird, bevor der zugeordnete Protokolldatensatz auf den Datenträger geschrieben wird. Dies ist von entscheidender Bedeutung für das korrekte Funktionieren des Wiederherstellungs-Managers. Weitere Informationen finden Sie unter Write-Ahead-Transaktionsprotokoll.
So schreibt SQL Server eine geänderte Datenseite
Die folgende Abbildung zeigt den Schreibvorgang für eine modifizierte Datenseite.
Während des Schreibens einer Seite durch den Puffer-Manager wird nach angrenzenden modifizierten Seiten gesucht, die in einen einzigen Gather-Write-Vorgang einbezogen werden können. Benachbarte Seiten weisen aufeinander folgende Seiten-IDs auf und stammen aus derselben Datei. die Seiten müssen nicht im Arbeitsspeicher zusammenhängend sein. Die Suche wird in beide Richtungen fortgesetzt, bis eines der folgenden Ereignisse eintritt:
- Eine saubere Seite wurde gefunden.
- 32 Seiten wurden gefunden.
- Eine modifizierte („dirty“) Seite wird gefunden, deren Protokollfolgenummer (Log Sequence Number, LSN) noch nicht im Protokoll bereinigt wurde.
- Eine Seite wurde gefunden, die nicht sofort gesperrt werden kann.
Auf diese Weise kann die gesamte Gruppe der Seiten in einem einzigen Gather-Write-Vorgang auf den Datenträger geschrieben werden.
Unmittelbar bevor eine Seite geschrieben wird, wird der Seite die in der Datenbank angegebene Seitenschutzform hinzugefügt.
Wenn Schutz vor zerrissenen Seiten hinzugefügt wird, muss der Latch der Seite vom Typ EX (für EXklusiv) für die E/A-Vorgänge sein. Der Grund hierfür ist, dass die Seite durch den Schutz vor zerrissenen Seiten geändert wird, sodass sie von keinem anderen Thread gelesen werden kann.
Wenn ein Seitenschutz vom Typ „Prüfsumme“ hinzugefügt wird oder die Datenbank keinen Seitenschutz verwendet, muss der Latch der Seite vom Typ UP (für UPdate) für die E/A-Vorgänge sein. Diese Sperre verhindert, dass jemand während des Schreibvorgangs die Seite ändert, ermöglicht es den Lesern jedoch, sie weiterhin zu verwenden.
Weitere Informationen zu Datenträger-E/A-Seitenschutzoptionen finden Sie unter Pufferverwaltung.
Wie schmutzige Seiten auf den Datenträger geschrieben werden
Für das Schreiben einer modifizierten („dirty“) Seite auf den Datenträger gibt es drei Möglichkeiten:
Die oben beschriebenen Prozesse, verzögertes Schreiben, Eager-Writing und Prüfpunkt, warten nicht, bis der E/A-Vorgang abgeschlossen ist. Sie verwenden immer asynchrone (oder überlappte) E/As, setzen ihre Tätigkeit fort und überprüfen die ordnungsgemäße Ausführung der E/A-Operationen zu einem späteren Zeitpunkt. Dies ermöglicht SQL Server, sowohl die Ressourcen der CPU als auch der E/As für die entsprechenden Tasks zu maximieren.
Fauler Schreibvorgang
Das verzögerte Schreiben (lazy writing) ist ein Systemprozess, bei dem freie Puffer verfügbar gehalten werden, indem selten verwendete Seiten aus dem Puffercache entfernt werden. Modifizierte Seiten werden zuerst auf den Datenträger geschrieben.
Eifriger Schreibvorgang
Beim Eager-Writing handelt es sich um einen Prozess, mit dem modifizierte Datenseiten mit minimal protokollierten Vorgängen wie BULK INSERT oder SELECT INTO geschrieben werden. Dieser Prozess ermöglicht das parallele Erstellen und Schreiben neuer Seiten. Das heißt, der Aufrufvorgang muss nicht warten, bis der gesamte Vorgang abgeschlossen ist, bevor die Seiten auf den Datenträger geschrieben werden.
Prüfpunktprozess
Der Prüfpunktprozess durchsucht regelmäßig den Puffercache nach Puffern mit Seiten aus einer angegebenen Datenbank und schreibt alle schmutzigen Seiten auf den Datenträger. Durch Prüfpunkte kann bei einer späteren Wiederherstellung Zeit eingespart werden, da ein Punkt erstellt wird, an dem auf jeden Fall alle modifizierten Seiten auf den Datenträger geschrieben worden sind.
Der Benutzer kann einen Prüfpunktvorgang mithilfe des CHECKPOINT
Befehls anfordern, oder das Datenbankmodul generiert automatische Prüfpunkte basierend auf der Menge des verwendeten Protokollraums und der seit dem letzten Prüfpunkt verstrichenen Zeit. Zusätzlich werden Prüfpunkte generiert, wenn bestimmte Aktivitäten durchgeführt werden, Beispiel: Wenn einer Datenbank eine Datendatei oder eine Protokolldatei hinzugefügt wird bzw. daraus entfernt wird oder wenn die SQL Server-Instanz beendet wird.
Weitere Informationen finden Sie unter Prüfpunkte und den aktiven Teil des Protokolls.