1. Hintergrund der parallelen Replikation Zunächst einmal: Warum gibt es dieses Konzept der parallelen Replikation? 1. DBAs sollten wissen, dass die MySQL-Replikation auf Binlog basiert. 2. Die MySQL-Replikation besteht aus zwei Teilen, dem IO-Thread und dem SQL-Thread. 3. Der IO-Thread wird hauptsächlich verwendet, um das vom empfangenden Master übergebene Binlog abzurufen und in das Relay-Protokoll zu schreiben 4. Der SQL-Thread ist hauptsächlich für das Parsen des Relay-Protokolls und dessen Anwendung auf den Slave verantwortlich 5. In jedem Fall sind die IO- und SQL-Threads Single-Threaded, während der Master Multi-Threaded ist, sodass es zwangsläufig zu Verzögerungen kommt. Um dieses Problem zu lösen, wurde Multi-Threading eingeführt. 6. IO-Multithreading? 6.1 Es besteht kein Bedarf für Multithreading von IO, da IO-Threads nicht den Engpass darstellen. 7. SQL-Multithreading? 7.1 Ja, die neuesten Versionen 5.6, 5.7 und 8.0 implementieren alle Multithreading im SQL-Thread, um die Parallelität des Slaves zu verbessern. Als Nächstes werfen wir einen Blick auf die Bemühungen und Erfolge von MySQL bei der parallelen Replikation. II. Wichtige Punkte Ob dies parallel erfolgen kann, hängt davon ab, ob es Sperrkonflikte zwischen mehreren Transaktionen gibt. Dies ist der Schlüssel. Das folgende Prinzip der parallelen Replikation zeigt, wie Sperrkonflikte vermieden werden können. Schemabasierte parallele Replikation in MySQL 5.6
Wie bereits erwähnt, besteht der Zweck der parallelen Replikation darin, den Slave so multithreaded wie möglich laufen zu lassen. Natürlich ist Multithreading auf Bibliotheksebene auch eine Möglichkeit (Transaktionen in verschiedenen Bibliotheken, keine Sperrkonflikte). Lassen Sie uns zunächst über die Vorteile sprechen: Es ist relativ einfach zu implementieren und für Benutzer leicht zu verwenden. Lassen Sie uns dann über die Nachteile sprechen: Da es auf der Bibliothek basiert, ist die Granularität der Parallelität sehr grob. Derzeit besteht die Architektur vieler Unternehmen aus einer Bibliothek und einer Instanz. Für eine solche Architektur ist die 5.6-Parallelreplikation machtlos. Natürlich gibt es auch die Reihenfolge der Master- und Slave-Transaktionen, was auch für 5.6 ein großes Problem darstellt Ohne weitere Umschweife, hier sind einige Bilder 4. MySQL 5.7 Parallele Replikation basierend auf Gruppen-Commit
Das Gruppen-Commit wurde in früheren Artikeln ausführlich beschrieben und wird hier nicht erläutert. Wenn MySQL5.7 eine Gruppe festschreibt, markiert es auch die Transaktionen jeder Gruppe. Jetzt denke ich, dass dies der Bequemlichkeit von MTS dient. Schauen wir uns zunächst einen Satz von Binärprotokollen an. zuletzt_committed=0 Sequenznummer=1 zuletzt_festgeschrieben=1 Sequenznummer=2 zuletzt_festgeschrieben=2 Sequenznummer=3 zuletzt_festgeschrieben=3 Sequenznummer=4 zuletzt_festgeschrieben=4 Sequenznummer=5 zuletzt_festgeschrieben=4 Sequenznummer=6 zuletzt_festgeschrieben=4 Sequenznummer=7 zuletzt_festgeschrieben=6 Sequenznummer=8 zuletzt_festgeschrieben=6 Sequenznummer=9 zuletzt_festgeschrieben=9 Sequenznummer=10 4.1 Commit-Parent-basierter Modus 4.2 Sperrbasierter Modus 5. MySQL 8.0 parallele Replikation basierend auf Schreibsatz
Transaktionsabhängigkeit:
Algorithmus zur Transaktionserkennung: MySQL verfügt über eine Variable zum Speichern des HASH-Werts der übermittelten Transaktion. Die von allen übermittelten Transaktionen geänderten Werte des Primärschlüssels (oder eindeutigen Schlüssels) werden nach dem Hashen mit dem Satz dieser Variablen verglichen, um festzustellen, ob die geänderte Zeile damit in Konflikt steht, und so die Abhängigkeitsbeziehung zu bestimmen. Die Größe der hier erwähnten Variable kann wie folgt eingestellt werden: binlog_transaction_dependency_history_size Diese Granularität liegt auf Zeilenebene. Zu diesem Zeitpunkt ist die parallele Granularität feiner und die parallele Geschwindigkeit schneller. In einigen Fällen ist es keine Übertreibung zu sagen, dass die Parallelität des Slaves die des Masters übertrifft (der Master ist ein Single-Thread-Schreibvorgang, und der Slave kann auch parallel wiedergeben). 6. Wie kann die parallele Replikation des Slaves und die Transaktionsausführungsreihenfolge des Masters konsistent gemacht werden? Nach 5.7.19 können Sie Offizielle Erklärung:
Das allgemeine Implementierungsprinzip lautet: Die Ausführungsphase kann parallel ausgeführt werden und das Leeren des Binärprotokolls wird nacheinander durchgeführt. Wenn die Engine-Schicht festschreibt, wird sie auch in der Warteschlangenreihenfolge gemäß binlog_order_commit abgeschlossen Mit anderen Worten: Wenn dieser Parameter gesetzt ist, führt der Slave die Parallelisierung wie der Master durch. Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: 30 Minuten, um Ihnen ein umfassendes Verständnis von React Hooks zu vermitteln
>>: Tomcat-Komponenten veranschaulichen die architektonische Entwicklung eines Webservers
Inhaltsverzeichnis Vorwort 1. Docker installieren...
Als ich zum ersten Mal eine MySQL-FUNKTION schrie...
Dieser Artikel stellt hauptsächlich den Installati...
Ein weiterer wichtiger Aspekt bei der Trennung vo...
Vorwort In der Vergangenheit verwendete das Unter...
Deklarieren Sie den Parameternamen, den Typ und d...
Um die Tabelle zu verschönern, können Sie für die...
Fehler: Connection to blog0@localhost failed. [08...
Spezifische Methode: Öffnen Sie zuerst die Eingab...
Inhaltsverzeichnis Vorwort Frage Online-Lösungen ...
Inhaltsverzeichnis 1. Gemeinsame Indexbeschreibun...
1. Schreiben Sie das Shell-Skript crontab.sh #!/b...
In der Welt der Webentwicklung sind Frameworks wei...
0. Umwelt Betriebssystem für diesen Artikel: Cent...
Stellen Sie Tomcat so ein, dass der Dienst automa...