Kursinhalt
Fortgeschrittene Techniken in SQL
Fortgeschrittene Techniken in SQL
Isolation. Wiederholbare Lese- und Serialisierbare Ebenen
Wiederholbares Lesen
Das Wiederholbare Lesen-Isolationslevel in Datenbanken stellt sicher, dass Sie, wenn Sie eine Transaktion starten, einen Schnappschuss der Datenbank sehen, der während Ihrer Aufgabe gleich bleibt.
Das bedeutet, dass Sie, selbst wenn während Ihrer Arbeit andere Änderungen an der Datenbank vorgenommen werden, nur die Daten sehen, wie sie zu Beginn waren.
Transaktionen unter dem Isolationslevel Wiederholbares Lesen halten Lesesperren auf allen Zeilen, auf die sie verweisen, und Schreibsperren auf Zeilen, die sie einfügen, aktualisieren oder löschen. Dies verhindert verlorene Updates, schmutzige und nicht wiederholbare Lesevorgänge.
Es gibt jedoch ein Problem, das bei dieser Art der Isolation weiterhin auftritt - Phantomlesen.
Phantomlesen
Das Phantomlesen kann auftreten, wenn eine Transaktion Daten liest und eine andere Transaktion neue Datensätze zur Datenbank hinzufügt. Folglich können wir unterschiedliche Ergebnismengen für zwei aufeinanderfolgende Lesevorgänge erhalten.
Nicht wiederholbares Lesen vs. Phantomlesen
Ein nicht wiederholbares Lesen 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.
Phantomlesen hingegen tritt auf, wenn dieselbe Abfrage, die von Benutzer A ausgeführt wird, unterschiedliche Mengen von Zeilen zwischen aufeinanderfolgenden Lesevorgängen zurückgibt, obwohl die einzelnen Zeilen selbst möglicherweise nicht aktualisiert wurden.
Wir können dieses Isolationsniveau in unserer SQL-Abfrage mit dem folgenden Befehl angeben:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable
Das Serializable-Isolationsniveau ist das höchste Isolationsniveau in Datenbanken und gewährleistet die strengste Form der Parallelitätskontrolle.
Auf diesem Niveau werden Transaktionen so ausgeführt, als ob sie seriell verarbeitet würden, eine nach der anderen, obwohl sie tatsächlich gleichzeitig ausgeführt werden können. Dies stellt sicher, dass das Ergebnis der Transaktionen dasselbe ist, als ob sie in einer seriellen Reihenfolge ausgeführt würden, wodurch Konsistenz gewährleistet und alle entdeckten Parallelitätsanomalien verhindert werden.
Hinweis
Die Verwendung dieses Isolationsniveaus kann aufgrund erhöhter Sperrungen zu einer verringerten Leistung führen.
Wir können die folgende Anweisung verwenden, um diese Isolationsebene in unserer SQL-Abfrage festzulegen:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Danke für Ihr Feedback!