Heim >
Datenbank >
MySQL-Tutorial >
So implementieren Sie die Parallelitätskontrolle für mehrere Versionen von MySQL MVVC
So implementieren Sie die Parallelitätskontrolle für mehrere Versionen von MySQL MVVC
WBOY
Freigeben: 2023-05-31 13:14:01
nach vorne
1679 Leute haben es durchsucht
1. Übersicht
Multiversions-Parallelitätskontrolle (MVCC) ist eine Parallelitätskontrolltechnologie. MVVC, das die Datenbank-Parallelitätskontrolle implementiert, ist untrennbar mit der Versionskette im Rückgängig-Protokoll verbunden, was durch die Verwaltung mehrerer Versionen von Datenzeilen erreicht wird.
Einfach ausgedrückt fragt die aktuelle Transaktion die Zeilen ab, die von einer anderen Transaktion geändert werden (wenn zu diesem Zeitpunkt gelesen wird, tritt ein fehlerhaftes Lesen auf), ohne zu sperren und zu warten, sondern die historische Version der zu lesen Daten. Reduzieren Sie die Reaktionszeit.
MVVC wird durch zwei Technologien implementiert: Protokoll rückgängig machen und Ansicht lesen.
2. Snapshot-Lesen und aktuelles Lesen
Die Implementierung von MVCC in MySQL InnoDB dient hauptsächlich der Verbesserung der Datenbank-Parallelitätsleistung und der Verwendung einer besseren Methode zur Bewältigung von Lese-/Schreibkonflikten Wenn ein Lese-Schreib-Konflikt vorliegt, kann kein sperrendes und nicht blockierendes gleichzeitiges Lesen erreicht werden. Dieses Lesen bezieht sich auf das Snapshot-Lesen und nicht auf das aktuelle Lesen. Der aktuelle Lesevorgang ist eigentlich ein Sperrvorgang.
1. Aktueller Lesevorgang
Um sicherzustellen, dass der gelesene Datensatz die neuesten Daten ist und um zu verhindern, dass andere gleichzeitige Transaktionen den Datensatz ändern, muss der Datensatz hinzugefügt werden Lesen von Lock.
Der gesperrte Lesevorgang wird als aktueller Lesevorgang bezeichnet. Das Hinzufügen, Löschen und Ändern von Daten muss zuerst gelesen werden. Dieser Lesevorgang ist auch der aktuelle Lesevorgang.
SELECT * FROM t LOCK IN SHARE MODE; # 共享锁
SELECT * FROM t FOR UPDATE; # 排他锁
UPDATE SET t..
Nach dem Login kopieren
2. Snapshot-Lesen
Snapshot-Lesen wird auch als konsistentes Lesen bezeichnet, das die Snapshot-Version der Datenzeile liest. In MySQL verwenden gewöhnliche Select-Anweisungen (Select-Anweisungen ohne Aktualisierung oder Sperre im Freigabemodus) standardmäßig das Lesen von Snapshots ohne Sperre.
SELECT * FROM table WHERE ...
Nach dem Login kopieren
Der Grund dafür ist, dass das Lesen von Snapshots Sperrvorgänge vermeiden und den Overhead reduzieren kann.
Wenn die Isolationsstufe der Transaktion seriell ist, ist das Snapshot-Lesen nutzlos und wird auf das aktuelle Lesen reduziert.
3. Überprüfung der Isolationsstufe und Versionskette
Isolationsstufe:
Die Standardisolationsstufe in MySQL ist wiederholbares Lese-RR, das gelöst werden kann Nicht wiederholbares Leseproblem. In MySQL wird spezielle Unterstützung zur Lösung des Phantomleseproblems bereitgestellt.
Wie löst es das Phantomleseproblem? Es gibt zwei Möglichkeiten:
Verwenden Sie Lückensperren und temporäre Schlüsselsperren, um das Problem zu lösen. Während dieser Zeit können keine Daten von anderen Transaktionen eingefügt werden. 🎜🎜 #
MVCC-Methode, keine Sperre erforderlich, geringer Verbrauch (der Nachteil besteht darin, dass das Phantomleseproblem dadurch nicht vollständig gelöst wird).
Protokollversionskette rückgängig machen: Entsprechend InnoDB enthält jeder Datensatz im Clustered-Index zwei notwendige versteckte Felder:
# 🎜🎜#
trx_id: Jedes Mal, wenn eine Transaktion einen Clustered-Index-Datensatz ändert, wird die Transaktions-ID der Transaktion der ausgeblendeten Spalte trx_id zugewiesen.
roll_pointer: Rollback-Zeiger. Bei jeder Änderung der Daten werden die alten Daten in das Rückgängig-Protokoll eingefügt und die neuen Daten verweisen auf die alten Daten In einer Versionskette wird dieses Zeigerfeld als Rollback-Zeiger bezeichnet, über den die Daten vor der Änderung gefunden werden können.
Beispiel:
Eine Transaktion mit der ID 8 erstellt ein Datenelement, dann sieht das schematische Diagramm des Datensatzes wie folgt aus: #🎜 🎜#
Angenommen, dass zwei Transaktionen mit den IDs 10 bzw. 20 diesen Datensatz aktualisieren:
#🎜🎜 # Angelegenheiten 10
Angelegenheiten 20
BEGIN;#🎜🎜 # ####🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜#🎜🎜#begin;#🎜🎜 ## 🎜🎜 ## 🎜🎜#Update Student Set name='李思' WHERE id=1;
Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Parallelitätskontrolle für mehrere Versionen von MySQL MVVC. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn