Implementierung der MySQL-Mehrversions-Parallelitätskontrolle MVCC

Implementierung der MySQL-Mehrversions-Parallelitätskontrolle MVCC

Einstellungen für die Transaktionsisolationsebene

globale Isolationsstufe für Transaktionen festlegen, Read Committed; //globale Isolationsstufe für Sitzungstransaktionen festlegen, Read Committed; //aktuelle Sitzung

Ändern Sie die Methode zur Übermittlung von Transaktionen (ob automatisch übermittelt werden soll, MySQL übermittelt standardmäßig automatisch).

SET AUTOCOMMIT = 1; //Automatisch committen, 0 manuell committen

Verschiedene Datenbank-Engines haben unterschiedliche MVCC-Modi, normalerweise eine optimistische und eine pessimistische Parallelitätskontrolle.

innodb

veranschaulichen:

MVCC von InnoDB wird implementiert, indem nach jeder Datensatzzeile zwei versteckte Spalten gespeichert werden. In diesen beiden Spalten wird in einer die Erstellungszeit der Zeile und in der anderen die Ablaufzeit (oder Löschzeit) der Zeile gespeichert. Gespeichert wird natürlich nicht der tatsächliche Zeitwert, sondern die Systemversionsnummer. Bei jedem Start einer neuen Transaktion wird die Systemversionsnummer automatisch erhöht. Die Systemversionsnummer zu Beginn der Transaktion wird als Transaktionsversionsnummer verwendet, um sie mit der abgefragten zu vergleichen.

WÄHLEN

InnoDB prüft jede Zeile anhand der folgenden beiden Bedingungen:

a. InnoDB sucht nur nach Datenzeilen, deren Versionen älter sind als die aktuelle Transaktionsversion (das heißt, die Systemversionsnummer der Zeile ist kleiner oder gleich der Systemversionsnummer der Transaktion). Dadurch wird sichergestellt, dass die von der Transaktion gelesenen Zeilen entweder vor Beginn der Transaktion vorhanden waren oder von der Transaktion selbst eingefügt oder geändert wurden.

b. Die gelöschte Version der Zeile ist entweder nicht definiert oder größer als die aktuelle Transaktionsversionsnummer. Dadurch wird sichergestellt, dass von einer Transaktion gelesene Zeilen nicht vor Beginn der Transaktion gelöscht wurden.

Als Abfrageergebnisse können nur Datensätze zurückgegeben werden, die die beiden oben genannten Bedingungen erfüllen.

EINFÜGEN

InnoDB speichert die aktuelle Systemversionsnummer als Zeilenversionsnummer für jede neu eingefügte Zeile.

LÖSCHEN

InnoDB speichert die aktuelle Systemversionsnummer als Zeilenlöschkennung für jede gelöschte Zeile.

AKTUALISIEREN

InnoDB speichert die aktuelle Systemversionsnummer als Zeilenversionsnummer beim Einfügen einer neuen Zeile und speichert die aktuelle Systemversionsnummer in der ursprünglichen Zeile als Zeilenlöschmarkierung.

Beachten:

MVCC funktioniert nur auf den Isolationsebenen REPEATABLE READ und READ COMMITED. Die anderen beiden Isolationsebenen sind mit MVCC nicht kompatibel, da READ UNCOMITTED immer die neueste Datenzeile liest und nicht die Datenzeile, die der aktuellen Transaktionsversion entspricht. SERIALIZABLE sperrt alle gelesenen Zeilen.

Überprüfen Sie den Status der Tabelle

Tabellenstatus wie „Aufgabe“ anzeigen\G;

Dirty Reads, nicht wiederholbare Reads und Phantom Reads

Dirty Read: Die aktuelle Transaktion liest den nicht festgeschriebenen Status einer anderen Transaktion und die Transaktion ist nicht isoliert.

Nicht wiederholbares Lesen: Es wird eine Transaktionsisolation erreicht, es treten jedoch Dateninkonsistenzen auf, wenn dieselben Daten zweimal gelesen werden.

Phantomlesen: Wenn derselbe Datensatz zweimal abgefragt wird, werden neue Daten gefunden. Dies liegt hauptsächlich daran, dass andere Transaktionen Daten in den Datensatz in der Mitte eingefügt haben. (Das Hinzufügen einer Lückensperre löst dieses Problem)

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Implementierung der MVCC-Mehrversions-Parallelitätskontrolle von MySQL
  • Detaillierte Erläuterung des MySQL Multi-Version Concurrency Control Mechanism (MVCC)-Quellcodes
  • Detaillierte Untersuchung der MySQL-Mehrversions-Parallelitätskontrolle MVCC
  • Analyse des zugrunde liegenden Prinzips der MySQL-Mehrversions-Parallelitätskontrolle MVCC
  • Implementierung von MySQL Multi-version Concurrency Control MVCC
  • Details zur Mysql MVCC-Mehrversions-Parallelitätssteuerung

<<:  Analyse der Lösung für das Problem der gemeinsamen Nutzung von Nginx-Sitzungen

>>:  Das Vue-CLI-Framework implementiert eine Timer-Anwendung

Artikel empfehlen

So verwenden Sie die Verlaufsumleitung in React Router

In react-router kann der Sprung in der Komponente...

js implementiert zufälligen Namensaufruf

In diesem Artikel wird der spezifische Code von j...

Native js implementiert Warenkorb-Logik und -Funktionen

In diesem Artikelbeispiel wird der spezifische Co...

So konfigurieren Sie /var/log/messages im Ubuntu-Systemprotokoll

1. Problembeschreibung Heute muss ich die Systemp...

MySQL-Datenbank Daten laden, vielfältige Verwendungsmöglichkeiten

Inhaltsverzeichnis Vielfältige Einsatzmöglichkeit...

Sicherheitsüberlegungen zur Windows-Serververwaltung

Webserver 1. Der Webserver schaltet unnötige IIS-...

JS generiert eindeutige ID-Methoden: UUID und NanoID

Inhaltsverzeichnis 1. Warum NanoID UUID ersetzt 2...

Vollständiger Code zur Implementierung der Vue-Backtop-Komponente

Wirkung: Code: <Vorlage> <div Klasse=&qu...

UL-Listen-Tag-Design für Webseiten mit mehrspaltigem Layout

Als ich vor ein paar Tagen ein dreispaltiges Layou...

Ein verbessertes Screenshot- und Freigabetool für Linux: ScreenCloud

ScreenCloud ist eine tolle kleine App, von der Si...

Zusammenfassung der MySQL-DML-Anweisungen

DML-Operationen beziehen sich auf Operationen an ...