Das Konzept von MTR in MySQL

Das Konzept von MTR in MySQL

MTR steht für Mini-Transaktion. Wie der Name schon sagt, kann man darunter „kleinste Transaktion“ verstehen. In MySQL wird der Vorgang eines atomaren Zugriffs auf die zugrundeliegende Seite als Mini-Transaktion bezeichnet. Die atomare Operation bedeutet hier, dass entweder alle erfolgreich sind oder alle fehlschlagen und es keinen Zwischenzustand gibt.

MTR wird hauptsächlich zum Schreiben von Undo- und Redo-Protokollen verwendet. Wenn wir beispielsweise einen Datensatz in einen B+-Baumindex einfügen möchten, ist die Einfügung entweder erfolgreich oder schlägt fehl. Dieser Vorgang kann als MTR-Vorgang bezeichnet werden. Während dieses Vorgangs wird eine Reihe von Redo-Protokollen generiert. Dieser Protokollsatz ist bei der Wiederherstellung nach einem MySQL-Absturz ein unteilbares Ganzes.

Wenn wir eine Transaktion haben, die 3 Anweisungen enthält, sieht das konzeptionelle Diagramm von MTR wie folgt aus:

Mini-Transaktionen folgen im Allgemeinen drei Prinzipien:

  • 1. Die Fix-Regeln
  • 2. WAL
  • 3. Force-Log beim Commit

Hier erklären wir diese drei Prinzipien:

1. Die Fix-Regeln

Bevor wir die erste Regel erklären, müssen wir das Konzept des Latch in MySQL verstehen. In MySQL ist Latch eine leichte Sperre. Im Gegensatz zu Lock sperrt es nur für sehr kurze Zeit. In InnoDB kann Latch in Mutex (Mutex) und RWLock (Lese-/Schreibsperre) unterteilt werden. Sein Zweck besteht darin, die Richtigkeit gleichzeitiger Threads sicherzustellen, die kritische Ressourcen bedienen.

Nachdem wir nun das Latch-Konzept verstanden haben, schauen wir uns die Fix-Regel an:

Um eine Datenseite zu ändern, müssen Sie den X-Latch dieser Datenseite abrufen.

Für den Zugriff auf eine Seite ist der Erhalt eines S-Latch oder eines X-Latch erforderlich.

Die Verriegelung, die die Seite hält, wird erst freigegeben, wenn der Vorgang zum Ändern oder Zugreifen auf die Seite abgeschlossen ist.

2. WAL

Ich glaube, jeder ist mit der WAL-Technologie vertraut. Sie ist der grundlegende Grund, warum die Innodb-Speicher-Engine die Wiederherstellung nach einem Absturz unterstützt. Das heißt, bevor eine Datenseite persistent gespeichert wird, muss zuerst die entsprechende Protokollseite im Speicher persistent gespeichert werden.

3. Force-Log beim Commit

Dieses Prinzip ist sehr wichtig. Es bedeutet, dass beim Festschreiben einer Transaktion alle von ihr generierten MTR-Protokolle auf das Persistenzgerät übertragen werden müssen, um die Absturzwiederherstellungslogik sicherzustellen.

Der Grund für die Einführung von MTR ist die Vorbereitung auf die spätere Einführung der Redo-Log-Optimierung in MySQL 8.0. In MySQL 5.7 stellt MTR die Atomizität von Vorgängen innerhalb von Transaktionen sicher. Wenn der Benutzer eine Operation ausführt, wird die Datenseite aktualisiert und gleichzeitig das Redo-Log geschrieben. mtr ist der Träger des Redo-Logs und existiert in der privaten Variable jeder Verbindungssitzung. Wenn mtr übermittelt wird, wird das lokale Redo-Protokoll in den globalen log_buffer kopiert. Um die Ordnung des Redo-Protokolls sicherzustellen, ist für den Zugriff auf den log_buffer eine Sperre erforderlich. Diese Sperre ist das oben erwähnte Mutex. Unter dem Schutz dieser Sperre muss zusätzlich zum Kopieren des lokalen Protokolls in den globalen Puffer die Datenseite zur Flush_list hinzugefügt werden, damit der Hintergrundthread den Datenfluss durchführen und den Datenbankprüfpunkt dabei unterstützen kann, weiter fortzufahren. Daher ist diese Sperre in alten MySQL-Versionen sehr wettbewerbsfähig. MySQL 8.0 hat dieses Problem optimiert, was in den folgenden Artikeln detailliert analysiert wird.

Oben finden Sie ausführliche Informationen zum Konzept von MTR in MySQL. Weitere Informationen zu MySQL MTR finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • MySQL-Installationsdiagramm. Grafisches MySQL-Installationstutorial (detaillierte Anweisungen).
  • MySQL-Benutzererstellung und Autorisierungsmethode
  • MySQL-Tipps: Lösung für das Problem, dass der Server beendet wird, ohne die PID-Datei zu aktualisieren
  • Zusammenfassung der Verwendung des MySQL-Datumsdatentyps und des Zeittyps
  • MySQL - 4 Möglichkeiten zum Ändern des Root-Passworts (am Beispiel von Windows)
  • Detaillierte Erklärung der TIMESTAMP-Verwendung in MySQL
  • Beispiele für die Verwendung temporärer Tabellen in MySQL
  • Python-Brute-Force-Cracking von Mysql-Daten – Beispiel
  • Wie die MySQL Select-Anweisung ausgeführt wird
  • Der Unterschied zwischen zwei MySQL-Anweisungen zum Löschen von Benutzern (Benutzer löschen und Benutzer löschen)
  • Eine kurze Analyse der parallelen MySQL-Replikation

<<:  Vue+el-table realisiert das Zusammenführen von Zellen

>>:  Beispiel für die Bereitstellung von MySQL 8.0 mit Docker

Artikel empfehlen

Einführung in die Leistungsoptimierung von MySQL-Datenbanken

Inhaltsverzeichnis Warum optimieren? ? Wo soll ic...

Eine kurze Diskussion darüber, wie man Div und Tabelle auswählt und kombiniert

Das Seitenlayout war mir schon immer ein Anliegen...

Fallzusammenfassung zur Vue-Komponentenkommunikationsmethode

Inhaltsverzeichnis 1. Übergeordnete Komponente üb...

Zusammenfassung der Mysql Hochleistungsoptimierungsfähigkeiten

Datenbank-Befehlsspezifikation Alle Datenbankobje...

Eine kurze Analyse der Verwendung von USING und HAVING in MySQL

Dieser Artikel veranschaulicht anhand von Beispie...

Wann sollte man Map anstelle einfacher JS-Objekte verwenden?

Inhaltsverzeichnis 1. Map akzeptiert jeden Schlüs...

Umfassende Zusammenfassung zu MySQL GTID

Inhaltsverzeichnis 01 Einführung in GTID 02 Wie G...

Vue-Überwachungseigenschaften und berechnete Eigenschaften

Inhaltsverzeichnis 1. Überwachungseigenschaften a...

Manuelle Implementierung des bidirektionalen Datenbindungsprinzips von Vue2.0

In einem Satz: Datenentführung (Object.defineProp...

Beispielcode zur Implementierung einer Pivot-Tabelle in MySQL/MariaDB

Im vorherigen Artikel wurden mehrere Methoden zur...