Isolation: Wiederholbare Lese- und Serialisierbare Stufen
Repeatable Read
Die Repeatable Read-Isolationsstufe in Datenbanken stellt sicher, dass beim Starten einer Transaktion ein unverändertes Abbild der Datenbank während der gesamten Aufgabe sichtbar bleibt.
Das bedeutet, dass selbst wenn während der Bearbeitung andere Änderungen an der Datenbank vorgenommen werden, nur die Daten sichtbar sind, wie sie zu Beginn der Transaktion waren.
Transaktionen unter Repeatable Read halten Lesesperren auf allen referenzierten Zeilen und Schreibsperren auf Zeilen, die sie einfügen, aktualisieren oder löschen. Dadurch werden verlorene Updates, Dirty Reads und Non-Repeatable Reads verhindert.
Ein Problem tritt jedoch weiterhin bei dieser Isolationsstufe auf – das sogenannte Phantom Read.
Phantom Read
Das Phantom Read kann auftreten, wenn eine Transaktion Daten liest und eine andere Transaktion neue Datensätze zur Datenbank hinzufügt. Infolgedessen können bei zwei aufeinanderfolgenden Lesevorgängen unterschiedliche Ergebnismengen zurückgegeben werden.
Non-repeatable Read vs Phantom Read
Non-repeatable Read tritt auf, wenn dieselbe Abfrage, die von Benutzer A ausgeführt wird, unterschiedliche Werte für dieselbe Zeile bei aufeinanderfolgenden Lesevorgängen zurückgibt, typischerweise aufgrund von Änderungen durch Benutzer B.
Phantom Read hingegen tritt auf, wenn dieselbe Abfrage, die von Benutzer A ausgeführt wird, unterschiedliche Mengen von Zeilen bei aufeinanderfolgenden Lesevorgängen zurückgibt, auch wenn die einzelnen Zeilen selbst nicht aktualisiert wurden.
Wir können diese Isolationsstufe in unserer SQL-Abfrage mit folgendem Befehl festlegen:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
Die Isolationsstufe Serializable ist die höchste Isolationsstufe in Datenbanken und gewährleistet die strengste Form der Parallelitätskontrolle.
Auf dieser Stufe werden Transaktionen so ausgeführt, als ob sie seriell verarbeitet würden, eine nach der anderen, auch wenn sie tatsächlich gleichzeitig ausgeführt werden können. Dies stellt sicher, dass das Ergebnis der Transaktionen dem entspricht, als wären sie in einer bestimmten seriellen Reihenfolge ausgeführt worden, wodurch Konsistenz gewährleistet und alle bekannten Parallelitätsanomalien verhindert werden.
Hinweis
Die Verwendung dieser Isolationsstufe kann aufgrund erhöhter Sperrungen zu einer geringeren Leistung führen.
Wir können die folgende Anweisung verwenden, um diese Isolationsstufe in unserer SQL-Abfrage festzulegen:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
What is the difference between phantom read and non-repeatable read?
Can you give more examples of phantom reads?
How does the Serializable isolation level prevent phantom reads?
Awesome!
Completion rate improved to 4.55
Isolation: Wiederholbare Lese- und Serialisierbare Stufen
Swipe um das Menü anzuzeigen
Repeatable Read
Die Repeatable Read-Isolationsstufe in Datenbanken stellt sicher, dass beim Starten einer Transaktion ein unverändertes Abbild der Datenbank während der gesamten Aufgabe sichtbar bleibt.
Das bedeutet, dass selbst wenn während der Bearbeitung andere Änderungen an der Datenbank vorgenommen werden, nur die Daten sichtbar sind, wie sie zu Beginn der Transaktion waren.
Transaktionen unter Repeatable Read halten Lesesperren auf allen referenzierten Zeilen und Schreibsperren auf Zeilen, die sie einfügen, aktualisieren oder löschen. Dadurch werden verlorene Updates, Dirty Reads und Non-Repeatable Reads verhindert.
Ein Problem tritt jedoch weiterhin bei dieser Isolationsstufe auf – das sogenannte Phantom Read.
Phantom Read
Das Phantom Read kann auftreten, wenn eine Transaktion Daten liest und eine andere Transaktion neue Datensätze zur Datenbank hinzufügt. Infolgedessen können bei zwei aufeinanderfolgenden Lesevorgängen unterschiedliche Ergebnismengen zurückgegeben werden.
Non-repeatable Read vs Phantom Read
Non-repeatable Read tritt auf, wenn dieselbe Abfrage, die von Benutzer A ausgeführt wird, unterschiedliche Werte für dieselbe Zeile bei aufeinanderfolgenden Lesevorgängen zurückgibt, typischerweise aufgrund von Änderungen durch Benutzer B.
Phantom Read hingegen tritt auf, wenn dieselbe Abfrage, die von Benutzer A ausgeführt wird, unterschiedliche Mengen von Zeilen bei aufeinanderfolgenden Lesevorgängen zurückgibt, auch wenn die einzelnen Zeilen selbst nicht aktualisiert wurden.
Wir können diese Isolationsstufe in unserer SQL-Abfrage mit folgendem Befehl festlegen:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
Die Isolationsstufe Serializable ist die höchste Isolationsstufe in Datenbanken und gewährleistet die strengste Form der Parallelitätskontrolle.
Auf dieser Stufe werden Transaktionen so ausgeführt, als ob sie seriell verarbeitet würden, eine nach der anderen, auch wenn sie tatsächlich gleichzeitig ausgeführt werden können. Dies stellt sicher, dass das Ergebnis der Transaktionen dem entspricht, als wären sie in einer bestimmten seriellen Reihenfolge ausgeführt worden, wodurch Konsistenz gewährleistet und alle bekannten Parallelitätsanomalien verhindert werden.
Hinweis
Die Verwendung dieser Isolationsstufe kann aufgrund erhöhter Sperrungen zu einer geringeren Leistung führen.
Wir können die folgende Anweisung verwenden, um diese Isolationsstufe in unserer SQL-Abfrage festzulegen:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Danke für Ihr Feedback!