Was ist MVCC MVCC steht für Multi-Version Concurrency Control. Die transaktionale Speicher-Engine von MySQL verbessert die Parallelitätsleistung durch Multi-Version Concurrency Control (MVCC). MVCC kann als eine Variante der Zeilensperre betrachtet werden, vermeidet jedoch in den meisten Fällen Sperrvorgänge und implementiert nicht blockierende Lesevorgänge, sodass der Overhead geringer ist. MVCC wird implementiert, indem ein Snapshot der Daten zu einem bestimmten Zeitpunkt gespeichert wird. Die Kernidee besteht darin, historische Versionen von Daten zu speichern und die Datenbank-Parallelitätskontrolle durch die Verwaltung mehrerer Versionen von Datenzeilen zu implementieren. Auf diese Weise können wir durch Vergleichen der Versionsnummer entscheiden, ob die Daten angezeigt werden sollen, und wir können den Isolationseffekt der Transaktion ohne Sperren beim Lesen der Daten sicherstellen. MVCC-ImplementierungTatsächlich fügt InnoDB nach jeder Datensatzzeile drei versteckte Felder hinzu:
Nehmen wir als Beispiel das RR-Level: Bei jedem Öffnen einer Transaktion weist das System der Transaktion eine Transaktions-ID zu. Wenn die erste Select-Anweisung in der Transaktion ausgeführt wird, wird ein Transaktions-Snapshot ReadView zum aktuellen Zeitpunkt generiert, der im Wesentlichen die folgenden Eigenschaften enthält:
Mit diesem ReadView müssen Sie beim Zugriff auf einen Datensatz nur die folgenden Schritte ausführen, um festzustellen, ob eine Version des Datensatzes sichtbar ist:
Bei der Beurteilung wird zunächst die neueste Version des Datensatzes verglichen. Wenn die Version von der aktuellen Transaktion nicht angezeigt werden kann, wird die vorherige Version über den ROLL_PTR des Datensatzes gefunden und erneut verglichen, bis eine Version gefunden wird, die von der aktuellen Transaktion angezeigt werden kann. Der obige Inhalt gilt für die RR-Ebene. Für die RC-Ebene ist der gesamte Prozess fast derselbe. Der einzige Unterschied besteht im Zeitpunkt der Generierung von ReadView. Die RR-Ebene generiert es nur einmal zu Beginn der Transaktion und dann wird ReadView ständig verwendet. Auf der RC-Ebene wird bei jeder Auswahl ein ReadView generiert. Löst MVCC Phantom-Lesevorgänge? Phantomlesen: In einer Transaktion wird dasselbe SQL zweimal zum Lesen verwendet, und das zweite Lesen enthält Zeilen, die von anderen Transaktionen neu eingefügt wurden. 1) Transaktion 1: Erste Abfrage: 2) Transaktion 2 fügt Daten mit der ID = 2 ein 3) Wenn Transaktion 1 zum zweiten Mal dieselbe Anweisung für die Abfrage verwendet, werden Daten mit der ID = 1 und der ID = 2 gefunden und es erfolgt ein Phantomlesen. Wenn wir über Phantomlesevorgänge sprechen, müssen wir zunächst die Konzepte „aktuelle Lesevorgänge“ und „Schnappschusslesevorgänge“ einführen.
Bei Snapshot-Lesevorgängen erkennt MVCC die neu eingefügten Zeilen nicht, da es aus ReadView liest. Daher wird das Problem der Phantom-Lesevorgänge automatisch gelöst. MVCC kann den Phantomlesevorgang des aktuellen Lesevorgangs jedoch nicht lösen. Sie müssen Gap Lock oder Next-Key Lock (Gap Lock + Record Lock) verwenden, um dieses Problem zu lösen. Tatsächlich ist das Prinzip sehr einfach. Verwenden Sie das obige Beispiel, um es leicht abzuändern und den aktuellen Lesevorgang auszulösen: Wählen Sie * vom Benutzer, bei dem die ID < 10 ist, für die Aktualisierung Wenn Gap Lock verwendet wird, sperrt Gap Lock den gesamten Bereich der IDs < 10, sodass andere Transaktionen keine Daten mit IDs < 10 einfügen können. Dadurch werden Phantomlesevorgänge verhindert. Dies ist das Ende dieses Artikels über die Implementierung der MySQL-Mehrversions-Parallelitätskontrolle MVCC. Weitere relevante Inhalte zur MySQL-Mehrversions-Parallelitätskontrolle MVCC finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: In einem Artikel erfahren Sie, wie Sie Vue-Frontend-Paging und Backend-Paging implementieren.
>>: Beispiel für das Hinzufügen eines Musikvideos zu einer HTML-Seite
Fügen Sie dem el-form-Formular Regeln hinzu: Defi...
Vorwort Wenn Sie wie ich ein fleißiger Java-Backe...
Wenn Sie möchten, dass der Anwendungsdienst im Do...
Beim dynamischen Verketten von Zeichenfolgen verw...
Inhaltsverzeichnis 1. Entkoppelte Zuweisung von A...
Fehler tritt auf: Beim Exportieren der Datenbank ...
Ich möchte eine Situation erreichen, in der die B...
I. Einleitung Lassen Sie mich zunächst die MySQL-...
In diesem Artikelbeispiel wird der spezifische Co...
Vorwort Bei der Entwicklung eines Miniprogramms b...
Inhaltsverzeichnis 1. Prüfen Sie, ob MySQL auf de...
Verwenden des Docker-Befehls „run“ docker run -d ...
1. Schritte zur Installation des RPM-Pakets: 1. S...
Effektbild: 1. Einleitung Ihr eigenes Applet muss...
<br />Was ist Web 2.0? Web2.0 umfasst diese ...