Der Parameter innodb_autoinc_lock_mode steuert das Verhalten zugehöriger Sperren beim Einfügen von Daten in eine Tabelle mit einer auto_increment-Spalte. Durch die Einstellung können Sie ein Gleichgewicht zwischen Leistung und Sicherheit erreichen (Datenkonsistenz zwischen Master und Slave). 【0】Lassen Sie uns zuerst den Einsatz klassifizieren Zunächst einmal können Einsätze grob in drei Kategorien unterteilt werden: 1. Einfaches Einfügen, z. B. „insert into t(name) values('test')“ 2. Masseneinfügung, z. B. Daten laden | einfügen in ... auswählen ... aus ... 3. Gemischte Einfügungen, wie z. B. „insert into t(id,name) values(1,'a'),(null,'b'),(5,'c');“ 【1】Beschreibung von innodb_autoinc_lock_mode innodb_auto_lockmode hat drei Werte: 1, 0 Das bedeutet Tradition 2. 1 Dies bedeutet aufeinanderfolgende 3.2 Das bedeutet interleaved 【1.1】tradition(innodb_autoinc_lock_mode=0) Modus: 1. Es bietet eine Abwärtskompatibilität 2. In diesem Modus müssen alle Einfügeanweisungen („insert like“) am Anfang der Anweisung eine auto_inc-Sperre auf Tabellenebene erhalten und die Sperre am Ende der Anweisung freigeben. Beachten Sie, dass sich dies auf die Anweisungsebene und nicht auf die Transaktionsebene bezieht. Eine Transaktion kann eine oder mehrere Anweisungen enthalten. 3. Es kann die Vorhersagbarkeit, Kontinuität und Wiederholbarkeit der Werteverteilung sicherstellen, wodurch sichergestellt wird, dass die Einfügeanweisung beim Kopieren auf den Slave denselben Wert wie der Master generieren kann (es gewährleistet die Sicherheit der anweisungsbasierten Replikation). 4. Da die auto_inc-Sperre in diesem Modus bis zum Ende der Anweisung aufrechterhalten wird, wirkt sich dies auf gleichzeitige Einfügungen aus. [1.2] Konsekutiver Modus (innodb_autoinc_lock_mode=1): 1. In diesem Modus wird das einfache Einfügen optimiert. Da die Anzahl der gleichzeitig einzufügenden Werte sofort bestimmt werden kann, kann MySQL für diese Einfügeanweisung mehrere aufeinanderfolgende Werte gleichzeitig generieren. Im Allgemeinen ist dies auch für die Replikation sicher (es gewährleistet die Sicherheit der anweisungsbasierten Replikation). 2. Dieser Modus ist auch der Standardmodus von MySQL. Der Vorteil dieses Modus besteht darin, dass die auto_inc-Sperre nicht bis zum Ende der Anweisung bestehen bleibt. Solange die Anweisung den entsprechenden Wert erhält, kann die Sperre im Voraus freigegeben werden. 【1.3】interleaved(innodb_autoinc_lock_mode=2)-Modus 1. Da in diesem Modus keine Auto_Inc-Sperre vorhanden ist, ist die Leistung in diesem Modus am besten. Es gibt jedoch auch ein Problem, nämlich, dass die für dieselbe Anweisung erhaltenen Auto_Incremant-Werte möglicherweise nicht kontinuierlich sind. 【2】Wenn Ihr Binärdateiformat gemischt ist | Zeile, dann können Sie jeden dieser drei Werte sicher kopieren. Da MySQL nun empfiehlt, das Binärformat auf „Zeile“ einzustellen, ist es am besten, „innodb_autoinc_lock_mode=2“ einzustellen, wenn „binlog_format“ keine Anweisung ist, was zu einer besseren Leistung führen kann. Zum Schluss noch ein Beispiel zu auto_increment Beispiel: Aktualisieren Sie den Wert einer auto_increment-Spalte nicht ohne Grund Schritt 1: Erstellen Sie die Szene neu Tabelle erstellen t(x int auto_increment nicht null Primärschlüssel); in t(x) Werte(0),(null),(3) einfügen; wähle * aus t; +---+ | x | +---+ | 1 | | 2 | | 3 | +---+ Schritt 2: Reproduzieren Sie den SQL-Befehl, der das Problem verursacht hat. aktualisiere t, setze x=4, wobei x=1; wähle * aus t; +---+ | x | +---+ | 2 | | 3 | | 4 | +---+ Schritt 3: Reproduzieren Sie die gewohnte Leistung in t(x) Werte(0) einfügen; FEHLER 1062 (23000): Doppelter Eintrag „4“ für Schlüssel „PRIMARY“ Schritt 4: Zusammenfassung des Problems Nach der Ausführung des ersten Schritts weiß MySQL, dass der nächste Auto_Increment-Wert 4 ist. Bei der Ausführung des zweiten Schrittes erkennt MySQL nicht, dass 4 manuell belegt wurde, so dass bei der Ausführung des dritten Schrittes ein Fehler auftritt. Die obige Einführung in MySQL innodb_autoinc_lock_mode ist alles, was ich mit Ihnen teilen muss. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Das könnte Sie auch interessieren:
|
<<: SSH-Schlüsselpaare von einer oder mehreren Linux-Instanzen trennen
>>: Vertieftes Verständnis davon in JavaScript
Vorwort In der Vergangenheit habe ich die Python-...
1. Was ist Master-Slave-Replikation? Mithilfe der...
Inhaltsverzeichnis Problem 1: Zerstörung 1. Wie m...
Einfache Installation von opencv2: conda installi...
In diesem Artikel wird das MySQL-Sicherungsskript...
mysql gibt den Booleschen Typ zurück Im ersten Fa...
1. Funktion : Ermöglicht der übergeordneten Kompo...
Erstellen Sie docker-compose.yml und füllen Sie d...
Dokumentation: https://github.com/hilongjw/vue-la...
Führen Sie zunächst eine einfache Docker-Installa...
In diesem Artikel wird der spezifische Code von j...
Inhaltsverzeichnis 1. Implementieren Sie die Komp...
Einführung Der Meta-Tag ist ein Hilfstag im HEAD-...
In diesem Artikel wird der spezifische Code von j...
Heute habe ich eine neu erworbene Alibaba Cloud E...