EinführungBeginnen wir mit unserem Inhalt. Ich glaube, jeder hat das folgende Interview-Szenario schon einmal erlebt. Interviewer: „Wie viele Transaktionsisolationsebenen hat MySQL?“ Um die oben beschriebene peinliche Situation zu vermeiden, lesen Sie bitte weiter! Die Standard-Transaktionsisolationsstufe von Mysql ist Repeatable Read. Verwendet Mysql die Standardisolationsstufe auch in Internetprojekten, ohne Änderungen vorzunehmen? Was! Es handelt sich tatsächlich um Read Committed. Steht im Internet nicht, dass diese Isolationsebene Probleme Text Lassen Sie uns zunächst über eine Frage nachdenken. In Oracle und SqlServer ist Read Commited als Standardisolationsebene ausgewählt. Warum wählt MySQL nicht Read Commited als Standardisolationsebene, sondern Repeatable Read als Standardisolationsebene? Warum? Warum? Warum? Dies hat historische Gründe und natürlich müssen wir mit unserer Master-Slave-Replikation beginnen! Es basiert auf Binlog-Replikation! Ich möchte das Konzept von Binlog hier nicht verschieben, sondern einfach verstehen, dass Binlog eine Datei ist, die Datenbankänderungen aufzeichnet ~ OK, es gibt drei Arten, nämlich
Vor MySQL 5.0 unterstützt Binlog nur das Führen Sie zu diesem Zeitpunkt die folgende Anweisung auf dem Master aus wähle * aus Test; Die Ausgabe lautet wie folgt
Wenn Sie diese Anweisung jedoch zu diesem Zeitpunkt auf dem Slave ausführen, lautet die Ausgabe wie folgt
Auf diese Weise tritt das Problem der Master-Slave-Inkonsistenz auf! Der Grund ist eigentlich ganz einfach, nämlich die Ausführungsreihenfolge auf dem Master ist: zuerst löschen, dann einfügen! Derzeit liegt das Binärprotokoll im STATEMENT-Format vor und die Reihenfolge der Datensätze ist „Erst einfügen, dann löschen“! Der Slave synchronisiert mit Binglog, daher stimmt die Ausführungsreihenfolge des Slaves nicht mit der des Masters überein! Master-Slave Inkonsistent! Wie kann man das Problem lösen? Es gibt zwei Lösungen! Nachdem wir nun verstanden haben, warum MySQL „Repeatable Read“ als Standardisolationsebene wählt, vergleichen wir es mit „Read Commited“, um zu erklären, warum die Isolationsebene in Internetprojekten auf „Read Commited“ eingestellt ist! Kontrast Ok, lassen Sie uns zuerst eines verstehen! Die beiden Isolationsebenen Read UnCommitted und Serializable werden im Projekt aus zwei Gründen nicht verwendet.
Mit anderen Worten, es gibt nur eine Frage, die uns Sorgen bereiten sollte: Soll die Isolationsebene auf „Read Committed“ oder „Repeatable Read“ lauten? CREATE TABLE `test` ( `id` int(11) NICHT NULL, `color` varchar(20) NICHT NULL, PRIMÄRSCHLÜSSEL (`id`) ) ENGINE=InnoDB Die Daten sind wie folgt +----+--------+ | ID | Farbe | +----+--------+ | 1 | rot | | 2 | weiß | | 5 | rot | | 7 | weiß | +----+--------+ Zur Vereinfachung der Beschreibung folgt
Grund 1: Auf der RR-Isolationsebene gibt es eine Lückensperre, wodurch die Wahrscheinlichkeit eines Deadlocks viel größer ist als bei RC! Wählen Sie * aus dem Test, wobei die ID <3 für die Aktualisierung ist; Auf der RR-Isolationsebene gibt es eine Lückensperre, die die Lücke (2,5) sperren kann, um zu verhindern, dass andere Transaktionen Daten einfügen! Grund 2: Wenn die Bedingungsspalte unter der RR-Isolationsebene den Index nicht erreicht, wird die Tabelle gesperrt! In der RC-Isolationsebene werden nur Zeilen gesperrt <br /> Zu diesem Zeitpunkt wird die Anweisung ausgeführt Testsatz aktualisieren Farbe = „blau“, wobei Farbe = „weiß“; Auf der RC-Isolationsebene durchläuft es zuerst den gruppierten Index und führt einen vollständigen Scan durch. Das Schloss ist wie folgt: In der Praxis wurde MySQL jedoch optimiert. Wenn MySQL Server die Bedingungen filtert und feststellt, dass sie nicht erfüllt sind, ruft es die Methode unlock_row auf, um die Datensätze zu sperren, die die Bedingungen nicht erfüllen. Die eigentliche Verriegelung erfolgt wie folgt Auf der RR-Isolationsebene wird der gruppierte Index jedoch vollständig gescannt und die gesamte Tabelle gesperrt, wie unten gezeigt: Grund drei: Auf der RC-Isolationsebene erhöht die halbkonsistente Lesefunktion die Parallelität von Aktualisierungsvorgängen! In 5.1.15 führte InnoDB ein Konzept namens „semi-konsistent“ ein, das Konflikte beim Aktualisieren derselben Datensatzzeile verringert und die Wartezeiten bei Sperren verkürzt. Testsatz aktualisieren Farbe = „blau“, wobei Farbe = „rot“; Führen Sie die Transaktion noch nicht durch! Testsatz aktualisieren Farbe = „blau“, wobei Farbe = „weiß“; Wenn Sitzung 2 versucht, die Zeile zu sperren, stellt sie fest, dass für die Zeile bereits eine Sperre vorhanden ist. InnoDB aktiviert semikonsistentes Lesen und gibt die zuletzt festgeschriebenen Versionen (1, rot), (2, weiß), (5, rot) und (7, weiß) zurück. MySQL startet den Lesevorgang erneut und liest dieses Mal die neueste Version der Zeile (und sperrt sie)! Zwei Fragen Muss das Problem des nicht wiederholbaren Lesens auf RC-Ebene gelöst werden? Welches Binlog-Format wird auf RC-Ebene für die Master-Slave-Replikation verwendet? ZusammenfassenDieser Artikel soll nur eines erklären: Für Internetprojekte verwenden Sie bitte die Isolationsstufe „Read Commited“! Dies ist das Ende dieses Artikels über die Auswahl der Transaktionsisolationsebene in MySQL-Projekten. Weitere Informationen zu MySQL-Transaktionsisolationsebenen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Drei Arten des HTML+CSS-Layouts (natürliches Layout/fließendes Layout/positioniertes Layout)
>>: Prozessanalyse der Bereitstellung von ASP.NET Core-Anwendungen auf dem Linux-System Docker
Ich glaube, dass das Internet zu einem immer unve...
Übersicht zur Netzwerkkommunikation Bei der Entwi...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis 1. Gebrauchsanweisung 2. Vorbe...
Schritte zur Annotation von Metadeklarationen: 1. ...
Dieser Artikel veranschaulicht anhand eines Beisp...
Es gibt drei Hauptmethoden, CSS auf einer Seite zu...
Inhaltsverzeichnis Ziehen Sie das Bild Ausführen ...
Grundlagen In einer relationalen Datenbank entspr...
Da die Kollegen im Unternehmen die Standardausgab...
Das Unternehmen hat kürzlich einen DELL R730-Serv...
Wenn der Tabellenkopf fixiert ist, muss er in zwe...
1. CSS-Elemente verbergen <br />In CSS gibt ...
Die Optimierung großer Datenbankdatenmengen ist e...
Inhaltsverzeichnis Einführung Verwendung von Vers...