Drei Probleme, die durch parallele Transaktionen verursacht werden

Parallele Transaktionen beziehen sich auf die gleichzeitige Ausführung mehrerer Transaktionen . Jede Transaktion wird unabhängig ausgeführt und beeinflusst sich nicht gegenseitig. Wenn in einem Datenbankverwaltungssystem mehrere Benutzer gleichzeitig denselben Datensatz lesen oder schreiben, kann die Verwendung paralleler Transaktionen den Durchsatz und die Reaktionszeit des Systems verbessern . Da parallele Transaktionen mehrere Vorgänge gleichzeitig ausführen können, kann gleichzeitig die Leistung und Effizienz des Datenbanksystems erheblich verbessert werden. Bei der Verwendung paralleler Transaktionen muss jedoch die Parallelitätskontrolle berücksichtigt werden, um Probleme wie Dateninkonsistenz und Deadlocks zu vermeiden.

Bei der gleichzeitigen Verarbeitung mehrerer Transaktionen können Probleme wie Dirty Reads, nicht wiederholbare Lesevorgänge und Phantom Reads auftreten .


1. Schmutzige Lektüre

Dirty Read bedeutet, dass eine Transaktion die Daten einer anderen nicht festgeschriebenen Transaktion liest, also nicht festgeschriebene Daten liest . Wenn die Transaktion anschließend zurückgesetzt wird, sind die gelesenen Daten ungültig. Dirty Reads sind ein relativ häufiges Problem bei der Datenbank-Parallelitätskontrolle.

Dirty Reads werden hauptsächlich dadurch verursacht, dass mehrere Transaktionen gleichzeitig auf Daten in der Datenbank zugreifen. In einer gleichzeitigen Umgebung isoliert und sperrt das Datenbanksystem Transaktionen, um die Datenkonsistenz sicherzustellen. Wenn eine Transaktion jedoch nicht festgeschriebene Daten einer anderen Transaktion liest, kann dies zu Dateninkonsistenzen führen, d. h. zur Generierung von Dirty Reads.

Angenommen, es gibt zwei Transaktionen T1 und T2. Während der Ausführung liest T1 die Daten, die T2 ändert. Wenn T2 zu diesem Zeitpunkt einen Rollback-Vorgang durchführt, sind die von T1 gelesenen Daten ungültig.

Schmutzige Lesevorgänge führen nicht nur zu Dateninkonsistenzen, sondern erhöhen auch Datenzugriffskonflikte . Daher kann die Isolationsstufe der Datenbank steuern, ob die Transaktion nicht festgeschriebene Daten lesen kann und ob sie die Daten usw. sperren muss, um das Auftreten schmutziger Lesevorgänge zu vermeiden. Gleichzeitig können Sie bei der Entwicklung von Datenbankanwendungen auch das Zugriffsverhalten von Transaktionen durch Codes steuern, um Dirty Reads zu vermeiden.


2. Nicht wiederholbares Lesen

Nicht wiederholbares Lesen bedeutet, dass in einem gleichzeitigen Szenario ein Benutzer dieselbe Datenzeile mehrmals in derselben Transaktion liest, bei diesen Lesevorgängen jedoch unterschiedliche Ergebnisse erhält.

Laienhaft ausgedrückt: Unter der Annahme, dass Benutzer A bestimmte Daten in Transaktion T1 mehrmals liest und ein anderer Benutzer B im Intervall zwischen diesen mehreren Lesevorgängen eine Änderung durchführt und Benutzer A zu diesem Zeitpunkt dieselbe Datenzeile erneut liest, können unterschiedliche Ergebnisse vorliegen erhalten. Dies wird als nicht wiederholbares Lesen bezeichnet.

Nicht wiederholbares Lesen ist ein Parallelitätsproblem in der Datenbank, das normalerweise unter der Isolationsstufe für nicht festgeschriebene Lesetransaktionen auftritt . Auf dieser Isolationsstufe sind nicht festgeschriebene Daten sichtbar und gleichzeitige Änderungen können zu Dateninkonsistenzen führen.

Um Probleme mit nicht wiederholbaren Lesevorgängen zu vermeiden, können höhere Transaktionsisolationsstufen wie „Read Committed“, „Repeatable Read“ und „Serialisierung“ verwendet werden. Unter der Isolationsstufe für festgeschriebene Lesevorgänge gibt es kein Problem mit nicht wiederholbaren Lesevorgängen. Unter der Isolationsstufe für wiederholbare Lesevorgänge und Serialisierung werden die gelesenen Daten gesperrt, um Störungen durch gleichzeitige Vorgänge zu vermeiden.


 3. Phantomlesung

Wenn die „Anzahl der Datensätze“, die die Abfragebedingungen erfüllen, in einer Transaktion mehrmals abgefragt wird und die Anzahl der Datensätze, die vorher und nachher zweimal abgefragt wurden, unterschiedlich ist, bedeutet dies, dass ein „Phantom-Lese“-Phänomen aufgetreten ist.

Normalerweise werden Phantom-Lesevorgänge und nicht wiederholbare Lesevorgänge durch gleichzeitige Transaktionen verursacht. Die Hauptunterschiede zwischen beiden sind jedoch:

1. Nicht wiederholbare Lesevorgänge gelten für Änderungsvorgänge, während Phantom-Lesevorgänge für Einfüge- und Löschvorgänge vorgesehen sind.
2. Nicht wiederholbare Lesevorgänge können durch Sperren auf Zeilenebene oder Snapshot-Lesevorgänge gelöst werden, während Phantom-Lesevorgänge nur durch das Sperren weiterer Zeilen vermieden werden können.

Das Phantomlesen ist auf Änderungen im Bereich der von einer Transaktion gelesenen Daten zurückzuführen, bei denen es sich um neue Datensätze oder gelöschte Datensätze handeln kann. Diese Änderungen können innerhalb derselben Transaktion nicht wahrgenommen werden . Um Phantomlesungen zu vermeiden, müssen daher mehr Zeilen in der Transaktion gesperrt werden, um den gelesenen Datenbereich genauer zu machen.

Das Phantomleseproblem tritt hauptsächlich unter der Isolationsstufe Serializable (Serialisierung) auf, und es können auch andere Isolationsstufen auftreten, die Wahrscheinlichkeit ist jedoch gering. Es gibt im Allgemeinen zwei Möglichkeiten, Phantom-Lesevorgänge zu lösen: Eine besteht darin, Technologien zur Steuerung der Datenparallelität wie Sperren auf Zeilenebene zu verwenden, und die andere darin, die Transaktionsisolationsstufe auf Wiederholbares Lesen oder Serialisierbar anzupassen. Wählen Sie die geeignete Methode basierend auf spezifischen Szenarien und Anforderungen.

 Die Reihenfolge der Schwere der oben genannten drei Phänomene ist wie folgt: 

Supongo que te gusta

Origin blog.csdn.net/m0_62600503/article/details/131134871
Recomendado
Clasificación