Eine ziemlich umfassende Anleitung zu dieser Frage finden Sie hier . Zusammenfassend lässt sich sagen, dass SQL Server die Kontrolle nicht an die Anwendung zurückgibt, die eine Transaktion festgeschrieben hat, bis diese Transaktion auf die Festplatte gehärtet wurde. Insbesondere kann die Steuerung zurückgegeben werden, sobald sie in der Transaktionsprotokolldatei gehärtet wurde.
Zu diesem Zeitpunkt werden die Daten möglicherweise nicht in die Datendatei gehärtet, sondern befinden sich möglicherweise noch im Datenpuffer-Cache. Da sie jedoch im Transaktionsprotokoll gehärtet wurden, kann die Datenbankwiederherstellung im Falle eines Fehlers diese wiederherstellen Transaktion und behalten Sie die Änderungen sicher bei.
Im Speicher befindet sich ein Protokollpuffer-Cache, mit dem die Auswirkungen der sequentiellen Schreibvorgänge in Transaktionsprotokolle auf die Leistung verringert werden. Der Puffer wird unter verschiedenen Bedingungen auf die Festplatte geleert, eine davon ist jedoch ein Transaktions-Commit. Bis diese Daten gehärtet wurden, wird die Kontrolle nicht an den Aufrufer zurückgegeben. Selbst wenn Sie während dieser Pufferbereinigung einen Fehler haben, bleibt die Transaktionskonsistenz erhalten, da diese Transaktion noch nicht als festgeschrieben gilt. Sie verlieren die Datenänderungen in dieser Transaktion, aber da sie nicht festgeschrieben wurden, würde Ihre Anwendung diese Änderungen bereits als verloren betrachten, da die Festschreibung nie abgeschlossen wurde.
Eine Datenbank besteht aus zwei Dateien, einer Datendatei und einer Transaktionsprotokolldatei. Diese werden auf der Festplatte gespeichert.
Jede Datenbank verfügt über einen Protokollcache im RAM. Wenn eine Transaktion festgeschrieben wird, wird sie in den Protokollcache verschoben und wartet darauf, auf die Festplatte geleert zu werden. Wenn sich eine Transformation festgeschrieben hat und darauf wartet, auf die Festplatte geschrieben zu werden, befindet sie sich daher vorübergehend im Speicher. Letztendlich wird sie jedoch auf der Festplatte in der Datei und nicht im RAM gespeichert.
Ich bin hier zu stark vereinfacht. Ich schlage vor, Sie lesen die Transaktionsprotokolle nach. Ich empfehle hier eine Vorlesung von Paul Randals
https://youtu.be/LvlFgxZZOj4
quelle
Wie von den anderen Personen geschrieben, wird das Transaktionsprotokoll immer auf die Festplatte geschrieben, bevor eine
COMMIT
Steuerung an Ihre Anwendung zurückgegeben wird. Aus diesem Grund sollte die Protokolldatei immer auf einer schnellen SSD abgelegt werden.Der Vollständigkeit halber: Mit mindestens Windows Server 2016 und SQL Server 2016 können Sie Ihrem Server NVDIMMs (nichtflüchtiges DIMM = Flash oder batteriegepuffertes RAM) hinzufügen. In diesem Fall würde SQL Server diese NVDIMMs verwenden, um das "heiße" Transaktionsprotokollende auf den NVDIMMs zu platzieren, da sie ein Ausschaltereignis pro Definition überleben.
Dies würde die Schreibgeschwindigkeit drastisch erhöhen (da RAM viel schneller ist als selbst eine SSD), aber Sie werden es nur in einer Datenbank mit vielen kleinen Schreib- / Commits erwähnen (z. B. der Datenbank hinter einem geschäftigen Online-Shop oder einem Online-Spiel mit vielen gleichzeitige Spieler).
quelle