Heim  >  Artikel  >  Datenbank  >  Was sind die Wissenspunkte der Parallelitätskontrolle mehrerer Versionen von MySQL MVCC?

Was sind die Wissenspunkte der Parallelitätskontrolle mehrerer Versionen von MySQL MVCC?

王林
王林nach vorne
2023-05-27 23:31:191015Durchsuche

1, MVCC

Multi-Version Concurrency Control (MVCC) bezieht sich auf .... MVCC ist eine Methode zur Parallelitätskontrolle. Sie wird im Allgemeinen in Datenbankverwaltungssystemen verwendet, um gleichzeitigen Zugriff auf die Datenbank zu erreichen und Transaktionsspeicher in Programmiersprachen zu implementieren.

Die Implementierung von MVCC in MySQL InnoDB dient hauptsächlich dazu, die Leistung der Datenbank-Parallelität zu verbessern und eine bessere Methode zur Behandlung von Lese- und Schreibkonflikten zu verwenden, sodass auch bei > Lese- und Schreibkonflikten Es kann kein sperrendes und nicht blockierendes gleichzeitiges Lesen erreicht werden.

2. Derzeit gelesen

Vorgänge wie „Sperre im Freigabemodus auswählen“, „Aktualisieren“, „Einfügen“, „Löschen“ (exklusive Sperre) Es ist alles eine Art aktuelle Lektüre. Warum heißt es aktuelle Lektüre? Das heißt, es liest die neueste Version des Datensatzes. Beim Lesen muss auch sichergestellt werden, dass andere gleichzeitige Transaktionen den aktuellen Datensatz nicht ändern können und der gelesene Datensatz gesperrt wird.

3. Snapshot-Lesen (verbessert die gleichzeitige Abfragefähigkeit der Datenbank)

Auswahlvorgang ohne Sperren ist Snapshot-Lesen, dh nicht blockierendes Lesen ohne Sperren; Die Voraussetzung ist, dass die Isolationsebene nicht die serielle Ebene ist und Snapshot-Lesevorgänge auf serieller Ebene in aktuelle Lesevorgänge degenerieren. Der Grund, warum Snapshot-Lesevorgänge auftreten, basiert auf der Überlegung, die Parallelitätsleistung zu verbessern, und basiert auf der Implementierung von Snapshot-Lesevorgängen Das heißt, MVCC kann als eine Variante der Zeilensperre betrachtet werden, vermeidet jedoch in vielen Fällen den Overhead, da es auf mehreren Versionen basiert, was beim Snapshot-Lesen nicht der Fall ist unbedingt die neueste Datenversion. Dies kann die vorherige historische Version sein Versionen einer Datenversion, sodass es bei Lese- und Schreibvorgängen nicht zu Konflikten kommt. Snapshot-Lesen ist eine nicht blockierende Lesefunktion von MySQL zur Implementierung von MVCC. Die spezifische Implementierung des MVCC-Moduls in MySQL wird durch drei implizite Felder implementiert: Rückgängig-Protokoll und Leseansicht.

5. MVCC-Implementierungsprinzip

Das Implementierungsprinzip von mvcc basiert hauptsächlich auf den drei versteckten Feldern in der Datensatz-, Undolog- und Leseansicht.

Versteckte Felder

Zusätzlich zu unseren benutzerdefinierten Feldern verfügen Zeilendatensätze auch über DB_TRX_ID, DB_ROLL_PTR, DB_ROW_ID und andere Felder, die implizit von der Datenbank definiert werden .

DB_TRX_ID

6 Bytes, die zuletzt geänderte Transaktions-ID, zeichnen die Transaktions-ID auf, die diesen Datensatz erstellt oder zuletzt geändert hat. 🎜 🎜#

DB_ROLL_PTR

7 Bytes, Rollback-Zeiger, der auf die vorherige Version dieses Datensatzes zeigt, der zur Zusammenarbeit mit Undolog verwendet wird und auf die vorherige alte zeigt Version

DB_ROW_JD

6 Bytes, versteckter Primärschlüssel. Wenn die Datentabelle keinen Primärschlüssel hat, generiert innodb automatisch einen 6-Byte row_id

undo log

row_id

undo log

undolog被称之为回滚日志,表示在进行insert,delete,update操作的时候产生的方便回滚的日志 当进行insert操作的时候,产生的undolog只在事务回滚的时候需要,并且在事务提交之后可以被立刻丢弃 当进行update和delete操作的时候,产生的undolog不仅仅在事务回滚的时候需要,在快照读的时候也需要,所以不能随便删除,只有在快照读或事务回滚不涉及该日志时,对应的日志才会被purge线程统一清除(当数据发生更新和删除操作的时候都只是设置一下老记录的deleted_bit,并不是真正的将过时的记录删除,因为为了节省磁盘空间,innodb有专门的purge线程来清除deleted_bit为true的记录,如果某个记录的deleted_id为trueundolog wird als Rollback-Protokoll bezeichnet und gibt an, dass Einfügen, Löschen, und Aktualisierung werden während der Vorgänge generiert, um das Zurücksetzen zu erleichtern. Das generierte Undolog wird nur benötigt, wenn die Transaktion zurückgesetzt wird, und kann sofort nach der Durchführung von Aktualisierungs- und Löschvorgängen verworfen werden Das generierte Undolog wird nicht nur beim Zurücksetzen der Transaktion benötigt, sondern auch beim Lesen des Snapshots, sodass es nicht beiläufig gelöscht werden kann vom Löschthread einheitlich gelöscht werden (wenn die Daten bei einem Aktualisierungs- oder Löschvorgang ausgeführt werden, wird nur das gelöschte_Bit des alten Datensatzes festgelegt. Der veraltete Datensatz wird nicht tatsächlich gelöscht, da innodb über eine Besonderheit verfügt, um Speicherplatz zu sparen Bereinigungsthread, um den Datensatz deleted_bit auf true zu löschen. Wenn die deleted_id eines Datensatzes wahr ist und die DB_TRX_ID relativ zur Leseansicht des Bereinigungsthreads sichtbar ist, dann dieser Datensatz kann irgendwann gelöscht werden)

# 🎜🎜#Leseansicht

Leseansicht ist eine Leseansicht, die erstellt wird, wenn eine Transaktion einen Snapshot-Lesevorgang ausführt In dem Moment, in dem die Transaktion einen Snapshot-Lesevorgang durchführt, wird ein aktueller Snapshot des Datensystems erstellt, die ID der aktuell aktiven Transaktion im System aufgezeichnet und verwaltet, und der ID-Wert der Transaktion erhöht sich.

6. Die Kernidee von MVCC

Die Kernidee von MVCC ist: Ich kann die Daten überprüfen, die vorher existierten Meine Transaktion wurde gestartet, auch wenn sie später geändert oder gelöscht wird. Ich kann die nach meiner Transaktion neu hinzugefügten Daten nicht finden.

MVCC-Suchregeln: Es können nur Daten gefunden werden, deren Erstellungszeit kleiner oder gleich der aktuellen Transaktions-ID ist, und Zeilen, deren Löschzeit größer als die aktuelle Transaktions-ID ist ( oder nicht gelöscht)

Was sind die Wissenspunkte der Parallelitätskontrolle mehrerer Versionen von MySQL MVCC?

Wie in der Abbildung gezeigt, werden zwei Datenelemente in die Transaktion Transaction1 eingefügt, die Transaktion wird übermittelt und dann zwei Datenelemente In der Transaktion Transaction2 werden viele Daten gelesen Gemäß den MVCC-Regeln kann der Anfang meiner Transaktion nicht gefunden werden. Nach dem Einfügen der eingefügten Daten ist die Erstellungs-ID von Laolian größer als 2, sodass nur zwei Daten gefunden werden können

Was sind die Wissenspunkte der Parallelitätskontrolle mehrerer Versionen von MySQL MVCC?

Löschen Sie wie im Bild gezeigt die Daten mit der ID 2 in der Transaktion Transaction4 und lesen Sie sie dann gemäß den MVCC-Regeln Stellen Sie fest, dass Lao Chao nach Beginn meiner Transaktion immer noch die eingefügten und gelöschten Daten herausfinden kann, sodass er immer noch zwei Datenelemente gefunden hat

Was sind die Wissenspunkte der Parallelitätskontrolle mehrerer Versionen von MySQL MVCC?

Wie in der Abbildung gezeigt Abbildung: Fügen Sie einen Namen in Transaktion 5 hinzu = Daten von Bruder Tao, löschen Sie die Daten mit der ID = 1, ändern Sie den Namen = ID von Bruder Tao in 1 und lesen Sie ihn dann in Transaktion 2. Gemäß den MVCC-Regeln können Sie die eingefügten und gelöschten Daten finden Nachdem meine Transaktion gestartet wurde, kann Lao Yan immer noch gefunden werden, daher werden immer noch zwei Daten gefunden

Durch die obige Demonstration können wir das durch die Kontrolle der Versionsnummer sehen, egal ob Wenn andere Transaktionen das Einfügen, Ändern oder Löschen durchführen, werden die von der Transaktion2-Transaktion abgefragten Daten unverändert bleiben.

Das obige ist der detaillierte Inhalt vonWas sind die Wissenspunkte der Parallelitätskontrolle mehrerer Versionen von MySQL MVCC?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen