Durchführung von TransaktionenDas Redo-Protokoll stellt die Persistenz der Transaktionen sicher und das Undo-Protokoll wird als Hilfe für Transaktions-Rollbacks und MVCC-Funktionen verwendet. Architektur der InnoDB-Speicher-Engine Redo-ProtokollWrite-Ahead-Log-Strategie Beim Festschreiben einer Transaktion wird zuerst das Redo-Log geschrieben und dann die Seite geändert. Gehen durch einen Absturz Daten verloren, können diese über das Redo-Log wiederhergestellt werden.
Redo-Logdateien: Standardmäßig gibt es zwei Dateien mit den Namen ib_logfile1 und ib_logfile2 im Datenverzeichnis der InnoDB-Speicher-Engine. Jede InnoDB-Speicher-Engine verfügt über mindestens eine Redo-Log-Dateigruppe und jede Dateigruppe verfügt über mindestens zwei Redo-Log-Dateien. Die folgende Abbildung 1 zeigt, dass die Redo-Log-Gruppe im zirkulären Schreibmodus ausgeführt wird. Die InnoDB-Speicher-Engine schreibt zuerst ib_logfile1 und wechselt am Ende der Datei zur Redo-Log-Datei ib_logfile2. Wie in Abbildung 2 dargestellt, hilft das Hinzufügen eines OS-Puffers, den fsync-Prozess zu verstehen. Die Protokollgruppe wird als Redo-Protokollgruppe bezeichnet, was ein logisches Konzept ist. Die InnoDB-Speicher-Engine hat eigentlich nur eine Protokollgruppe. Die erste Redo-Logdatei in der Loggruppe speichert in ihren ersten 2 KB vier 512-Byte-Blöcke: Redo-Log-Puffer auf die Festplatte geleert Die folgenden drei Situationen aktualisieren:
Als Ergänzung zur zweiten der drei oben genannten Situationen wird das Auslösen des Festplattenschreibvorgangs durch den Parameter innodb_flush_log_at_trx_commit gesteuert, der angibt, wie mit dem Redo-Protokoll beim Ausführen des Commit-Vorgangs umgegangen werden soll. Die gültigen Werte des Parameters innodb_flush_log_at_trx_commit sind 0, 1 und 2.
0. Wenn die Datenbank abstürzt, werden einige Protokolle nicht auf die Festplatte geschrieben, sodass die Transaktionen des letzten Zeitraums verloren gehen. Das folgende Diagramm hilft zu verstehen Redo-Log-BlöckeIn der InnoDB-Speicher-Engine werden Redo-Protokolle in 512 Bytes gespeichert. Dies bedeutet, dass der Redo-Log-Cache und die Redo-Log-Dateien in Blöcken gespeichert werden, wobei jeder Block 512 Byte groß ist. Der Redo-Log-Header ist 12 Bytes groß und das Redo-Log-Ende 8 Bytes, sodass jeder Redo-Log-Block tatsächlich 492 Bytes speichern kann. Redo-Log-FormatDas Redo-Protokoll wird seitenweise aufgezeichnet. Standardmäßig beträgt die Seitengröße von InnoDB 16 KB (gesteuert durch die Variable innodb_page_size). Eine Seite kann eine große Anzahl von Protokollblöcken (jeweils 512 Byte) speichern, und die Protokollblöcke zeichnen die Änderungen auf den Datenseiten auf. Das Format des Protokollkörpers ist in vier Teile unterteilt:
Die folgenden Abbildungen zeigen die allgemeinen Aufzeichnungsmethoden Einfügen und Löschen. Redo-Log-WiederherstellungDie folgende LSN (Log Sequence Number) stellt den Prüfpunkt dar. Wenn die Datenbank bei LSN 10000 abstürzt, stellt der Wiederherstellungsvorgang nur Protokolle im Bereich LSN10000-LSN13000 wieder her. Undo-ProtokollDie Rolle des Undo-Logs Undo ist ein logisches Protokoll, das die Datenbank einfach logisch in ihren ursprünglichen Zustand zurückversetzt; alle Änderungen werden logisch rückgängig gemacht, aber die Datenstruktur und die Seite selbst können nach dem Rollback anders sein. Das Undo-Protokoll hat zwei Funktionen: Es ermöglicht Rollback und mehrzeilige Versionskontrolle (MVCC). Wenn die InnoDB-Speicher-Engine ein Rollback durchführt, wird für jedes INSERT ein DELETE abgeschlossen, für jedes DELETE ein INSERT ausgeführt und für jedes UPDATE ein umgekehrtes UPDATE ausgeführt, um die vorherige Zeile wiederherzustellen. MVCC: Wenn ein Benutzer eine Datensatzzeile liest und der Datensatz bereits von anderen Transaktionen belegt ist, kann die aktuelle Transaktion durch Rückgängigmachen die Versionsinformationen der vorherigen Zeile lesen und so ein Lesen ohne Sperren erreichen. Undo-Log-SpeichermethodeDie InnoDB-Speicher-Engine verwaltet das Rückgängigmachen in Segmenten. Das Rollback-Segment wird als Rollback-Segment bezeichnet und jedes Rollback-Segment verfügt über 1024 Undo-Log-Segmente. In der alten Version wurde nur ein Rollback-Segment unterstützt, daher konnten nur 1024 Undo-Log-Segmente aufgezeichnet werden. Später kann MySQL 5.5 128 Rollback-Segmente unterstützen, d. h. 128*1024 Rückgängig-Vorgänge. Sie können die Anzahl der Rollback-Segmente auch über die Variable innodb_undo_logs anpassen (vor Version 5.6 war diese Variable innodb_rollback_segments). Der Standardwert ist 128. Undo-Protokolle werden standardmäßig im gemeinsam genutzten Tablespace gespeichert. Verarbeitung des Undo-Protokolls für Transaktions-Commits Wenn eine Transaktion festgeschrieben wird, führt die InnoDB-Speicher-Engine die folgenden zwei Dinge aus:
Wenn eine Transaktion festgeschrieben wird, wird das Rückgängig-Protokoll zuerst in die verknüpfte Liste eingefügt und dann ermittelt, ob der verwendete Speicherplatz der Rückgängig-Seite weniger als 3/4 beträgt. Wenn dies der Fall ist, bedeutet dies, dass die Rückgängig-Seite wiederverwendet werden kann, und dann wird das neue Rückgängig-Protokoll nach dem aktuellen Rückgängig-Protokoll aufgezeichnet. Das Undo-Protokoll ist unterteilt in:
Aufgrund der Transaktionsisolation ist das Einfüge-Undo-Protokoll für andere Transaktionen nicht sichtbar, sodass das Undo-Protokoll direkt nach dem Festschreiben der Transaktion gelöscht werden kann, ohne dass ein Bereinigungsvorgang erforderlich ist. Das Update-Undo-Protokoll zeichnet die Undo-Protokolle auf, die durch Lösch- und Aktualisierungsvorgänge generiert werden. Das Undo-Protokoll muss möglicherweise einen MVCC-Mechanismus bereitstellen, sodass es beim Senden nicht gelöscht werden kann. Für die Aktualisierung gibt es zwei Fälle:
Wenn InnoDB bereinigt, sucht es zuerst in der Verlaufsliste nach dem Undo-Protokoll und dann auf der Undo-Seite nach dem Undo-Protokoll. Dadurch können viele zufällige Lesevorgänge vermieden und die Bereinigungseffizienz verbessert werden. MVCC (Mehrversionen-Parallelitätskontrolle)MVCC fügt tatsächlich nach jeder Datensatzzeile zwei versteckte Spalten hinzu, um die Erstellungsversionsnummer und die Löschversionsnummer aufzuzeichnen. Wenn jede Transaktion gestartet wird, hat sie eine eindeutige, inkrementelle Versionsnummer. MVCC funktioniert nur auf den Isolationsebenen REPEATABLE READ und READ COMMITTED. Beim nicht festgeschriebenen Lesen gibt es kein Versionsproblem, und die Serialisierung sperrt alle gelesenen Zeilen. Beispiel: Einfügevorgang: Die Erstellungsversionsnummer des Datensatzes ist die Transaktionsversionsnummer Wenn Sie einen Datensatz einfügen, wird angenommen, dass die Transaktions-ID 1 ist und die Erstellungsversionsnummer ebenfalls 1 ist |
Ausweis | Name | Version erstellen | Version löschen |
---|---|---|---|
1 | prüfen | 1 |
Aktualisierungsvorgang: Markieren Sie zuerst die alte Versionsnummer als gelöscht, die Versionsnummer ist die aktuelle Versionsnummer und fügen Sie dann einen neuen Datensatz ein
Beispielsweise aktualisiert Transaktion 2 das Namensfeld
Tabellensatzname aktualisieren = „Neuer Test“, wobei ID = 1;
Der ursprüngliche Datensatz wird zum Löschen markiert (mit der Löschversion 2) und ein neuer Datensatz wird eingefügt (mit der Erstellungsversion 2).
Ausweis | Name | Version erstellen | Version löschen |
---|---|---|---|
1 | prüfen | 1 | 2 |
1 | neuer Test | 2 |
Löschvorgang: Verwenden Sie die Transaktionsversion als Löschversionsnummer
Beispielsweise löscht Transaktion 3 den Datensatz
aus Tabelle löschen, wo ID = 1;
Ausweis | Name | Version erstellen | Version löschen |
---|---|---|---|
1 | prüfen | 2 | 3 |
Datensätze, die die folgenden beiden Bedingungen erfüllen, können von der Transaktion abgefragt werden:
Vorteile von MVCC: Reduzieren Sie Sperrkonflikte und verbessern Sie die Leistung
Konzept und Funktion von Binärdateien
Das Binärlog zeichnet alle Operationen auf, die die MySQL-Datenbank verändern (ausgenommen SELECT, SHOW etc., da die Daten nicht verändert werden)
Die Hauptfunktionen von Binärdateien sind:
Drei binäre Dateiformate
MySQL 5.1 hat den Parameter binlog_format eingeführt, der auf STATEMENT, ROW und MIX gesetzt werden kann.
(Binärdateien werden für die POINT-IN-TIME-Wiederherstellung (PIT) und die Einrichtung einer Master-Slave-Replikationsumgebung verwendet.
Gruppen-Commit
Wenn es sich bei der Transaktion nicht um eine schreibgeschützte Transaktion handelt, ist bei jedem Festschreiben der Transaktion ein fsync-Vorgang erforderlich, um sicherzustellen, dass das Redo-Protokoll auf die Festplatte geschrieben wurde. Die Leistung der Festplatten-Fsync-Funktion ist jedoch begrenzt. Um die Effizienz der Festplatten-Fsync-Funktion zu verbessern, bieten aktuelle Datenbanken eine Gruppen-Commit-Funktion, mit der mehrere Transaktionsprotokolle gleichzeitig aktualisiert werden können, um sicherzustellen, dass sie in die Datei geschrieben werden.
Für das InnoDB-Gruppen-Commit wird ein zweistufiger Vorgang ausgeführt:
Vor InnoDB1.2 schlägt die Gruppen-Commit-Funktion fehl, wenn Binärdateien geöffnet werden:
Nach dem Öffnen der Binärdatei sind die Schritte wie folgt:
1) Wenn eine Transaktion festgeschrieben wird, führt die InnoDB-Speicher-Engine eine Vorbereitungsoperation aus
2) Die obere Schicht der MySQL-Datenbank schreibt Binärdateien
3) InnoDB schreibt Protokolle in Redo-Log-Dateien
a) Ändern Sie die der Transaktion entsprechenden Informationen im Speicher und schreiben Sie das Protokoll in den Redo-Log-Puffer. b) Rufen Sie fsync auf, um sicherzustellen, dass das Protokoll aus dem Redo-Log-Puffer auf die Festplatte geschrieben wird.
Um sicherzustellen, dass die Schreibreihenfolge der oberen Binärdateien der MySQL-Datenbank mit der Commit-Reihenfolge der InnoDB-Transaktionen übereinstimmt, verwendet MySQL intern die Sperre prepare_commit_mutex. Daher kann Schritt a) in Schritt 3) nicht ausgeführt werden, wenn andere Transaktionen Schritt b) ausführen, was dazu führt, dass die Zeilen-Commit-Funktion fehlschlägt.
Die Lösung ist BLGC (Binary Log Group Commit)
Die MySQL 5.6 BLGC-Implementierung ist in drei Phasen unterteilt:
Dies ist das Ende dieses Artikels mit der detaillierten Erklärung von MySQL Redo-Log, Undo-Log und Binlog. Weitere relevante MySQL Redo-Log-, Undo-Log- und Binlog-Inhalte finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!
<<: Einige Referenzen zu Farben in HTML
>>: Zusammenfassung von 10 erstaunlichen Tricks von Element-UI
So zeigen Sie Versionsinformationen unter Linux a...
Dieser Artikel veranschaulicht anhand von Beispie...
Erstens: Aktion ist ein Attribut des Formulars. HT...
Vorwort JavaScript ist eine der am häufigsten ver...
Ich habe gestern gerade etwas HTML gelernt und kon...
Die Attribute des <TR>-Tags werden verwende...
1. forEach() ist ähnlich wie map(). Es wendet ebe...
HTML-Formulare werden verwendet, um verschiedene ...
Was ist ein Deckungsindex? Das Erstellen eines In...
Vorwort Sperren sind Synchronisierungsmechanismen...
In diesem Artikel wird der spezifische Code von J...
Vorwort WeChat-Miniprogramme bieten neue offene F...
Tomcat ist eine auf Java basierende Webserversoft...
Dieser Artikel veranschaulicht anhand von Beispie...
Viele fragen sich vielleicht: Muss der Text auf d...