Transaktions- und Datenkonsistenz während eines Fehlers


7

Wenn eine Datenbank eine Transaktion startet, sind alle in dieser Transaktion ausgeführten Anweisungen isoliert und atomar (und konsistent und dauerhaft). Dies ist so ziemlich die Definition einer Transaktion.

Wikipedia gibt an, dass es einige Datenbanken gibt, die sicherstellen, dass eine Transaktion isoliert bleibt, indem die Zeilen gesperrt und erst entsperrt werden, wenn die Transaktion festgeschrieben wurde.

Meine Frage ist: Wie kann eine Datenbank, die ausschließlich auf Sperren beruht, Konsistenz garantieren? Wenn während der Transaktion ein Stromausfall auftritt, werden möglicherweise Daten teilweise in die Zeile geschrieben.

Was passiert selbst bei Datenbanken wie SQL Server, die eine temporäre Datenbank zum Ausführen aller Transaktionen verwenden, wenn ein Stromausfall auftritt, während die Datenbank die Transaktionen auf die Festplatte festschreibt?

Werden die Daten beschädigt oder behandelt die Datenbank dies korrekt?

Antworten:


13

Denken Sie daran, dies ist eine komplizierte Frage, die zu klären ist, und wir werden möglicherweise einige Runden bearbeiten und kommentieren, um die Lücken zu schließen. Aufgrund der Art und Weise, wie Ihre Frage formuliert ist, unterscheiden Sie vermutlich nicht die Elemente Atomizität, Isolation, Konsistenz und Haltbarkeit von ACID.

Wenn eine Datenbank eine Transaktion startet, sind alle in dieser Transaktion ausgeführten Anweisungen isoliert und atomar (und konsistent und dauerhaft). Dies ist so ziemlich die Definition einer Transaktion.

Der Isolationsteil von ACID wird weitgehend missverstanden. Es gibt einen Grad, in dem Transaktionen voneinander isoliert sind, wie durch die Transaktionsisolationsstufe bestimmt. Die anderen Elemente von ACID sind absolut.

Wikipedia gibt an, dass es einige Datenbanken gibt, die sicherstellen, dass eine Transaktion isoliert bleibt, indem die Zeilen gesperrt und erst entsperrt werden, wenn die Transaktion festgeschrieben wurde.

Dies bezieht sich auf den Isolationsteil von ACID und hat keinen Einfluss auf Ihre Hauptfrage.

Meine Frage ist: Wie kann eine Datenbank, die ausschließlich auf Sperren beruht, Konsistenz garantieren? Wenn während der Transaktion ein Stromausfall auftritt, werden möglicherweise Daten teilweise in die Zeile geschrieben.

In Ihrem Beispiel geht es nicht um Konsistenz, sondern um Haltbarkeit und Atomizität. Diese werden durch Write Ahead Logging (WAL) garantiert . Bei WAL werden alle Änderungen in das Rückgängig- / Wiederherstellungsprotokoll geschrieben, bevor sie auf die Daten angewendet werden.

Im Falle eines Stromausfalls wird ein Wiederherstellungsprozess ausgeführt, der das Protokoll liest, um a) Transaktionen während des Flugs zu identifizieren, die nicht festgeschrieben wurden, und b) Transaktionen, die festgeschrieben wurden, aber nicht auf die Daten angewendet wurden. Die Änderungen von a) Transaktionen werden rückgängig gemacht (zurückgesetzt), wodurch die Daten in den Zustand vor der Transaktion zurückgesetzt werden. Die Änderungen von b) werden wiederholt (vorwärts gerollt), um sicherzustellen, dass sich die Daten im erwarteten Status nach der Transaktion befinden.

Was passiert selbst bei Datenbanken wie SQL Server, die eine temporäre Datenbank zum Ausführen aller Transaktionen verwenden, wenn ein Stromausfall auftritt, während die Datenbank die Transaktionen auf die Festplatte festschreibt?

TempDB (vorausgesetzt, Sie beziehen sich darauf) hat absolut nichts mit der Ausführung von Transaktionen durch SQL Server zu tun. Verwechseln Sie die Rolle von TempDB in Snapshot-Isolationsstufen?


+1 Ausgezeichnet. Der Write-Ahead-Protokollierungslink füllt viele Lücken und ist sehr sinnvoll. Sie haben Recht damit, dass ich TempDB und Isolationsstufen verwechsle. Ich werde in diesem Bereich mehr Forschung betreiben. Danke vielmals!
Richard

und was ist, wenn es einen weiteren Stromausfall gibt, wenn die Datenbank das Rückgängig / Wiederherstellen-Protokoll ausführt?
Ike

@Ike Das gleiche passiert wieder.
Mark Storey-Smith
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.