Isolation. Wiederholbare Lese- und Serialisierbare Ebenen
Repeatable Read
Die Repeatable Read-Isolationsstufe in Datenbanken stellt sicher, dass beim Starten einer Transaktion ein Schnappschuss der Datenbank angezeigt wird, der während der gesamten Aufgabe unverändert 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 waren.
Transaktionen unter Repeatable Read-Isolation halten Lesesperren auf allen referenzierten Zeilen und Schreibsperren auf Zeilen, die sie einfügen, aktualisieren oder löschen. Dies verhindert verlorene Updates, Dirty Reads und Non-Repeatable Reads.
Es gibt jedoch ein Problem, das bei dieser Isolationsart weiterhin auftreten kann – Phantom Read.
Phantom read
Der 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
Ein Non-Repeatable Read tritt auf, wenn dieselbe Abfrage, die von Benutzer A ausgeführt wird, unterschiedliche Werte für dieselbe Zeile zwischen aufeinanderfolgenden Lesevorgängen zurückgibt, typischerweise aufgrund von Änderungen durch Benutzer B.
Ein Phantom Read hingegen tritt auf, wenn dieselbe Abfrage, die von Benutzer A ausgeführt wird, unterschiedliche Mengen an Zeilen zwischen 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 Serializable-Isolationsstufe 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 Reihenfolge ausgeführt worden, wodurch Konsistenz gewahrt und alle bekannten Parallelitätsanomalien verhindert werden.
Hinweis
Die Verwendung dieser Isolationsstufe kann aufgrund erhöhter Sperrungen zu einer geringeren Performance 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 an example of how phantom reads occur in practice?
How does the Serializable isolation level prevent phantom reads?
Awesome!
Completion rate improved to 4.35
Isolation. Wiederholbare Lese- und Serialisierbare Ebenen
Swipe um das Menü anzuzeigen
Repeatable Read
Die Repeatable Read-Isolationsstufe in Datenbanken stellt sicher, dass beim Starten einer Transaktion ein Schnappschuss der Datenbank angezeigt wird, der während der gesamten Aufgabe unverändert 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 waren.
Transaktionen unter Repeatable Read-Isolation halten Lesesperren auf allen referenzierten Zeilen und Schreibsperren auf Zeilen, die sie einfügen, aktualisieren oder löschen. Dies verhindert verlorene Updates, Dirty Reads und Non-Repeatable Reads.
Es gibt jedoch ein Problem, das bei dieser Isolationsart weiterhin auftreten kann – Phantom Read.
Phantom read
Der 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
Ein Non-Repeatable Read tritt auf, wenn dieselbe Abfrage, die von Benutzer A ausgeführt wird, unterschiedliche Werte für dieselbe Zeile zwischen aufeinanderfolgenden Lesevorgängen zurückgibt, typischerweise aufgrund von Änderungen durch Benutzer B.
Ein Phantom Read hingegen tritt auf, wenn dieselbe Abfrage, die von Benutzer A ausgeführt wird, unterschiedliche Mengen an Zeilen zwischen 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 Serializable-Isolationsstufe 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 Reihenfolge ausgeführt worden, wodurch Konsistenz gewahrt und alle bekannten Parallelitätsanomalien verhindert werden.
Hinweis
Die Verwendung dieser Isolationsstufe kann aufgrund erhöhter Sperrungen zu einer geringeren Performance 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!