Über MySQL innodb_autoinc_lock_mode

Über MySQL innodb_autoinc_lock_mode

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:
  • InnoDB-Typ MySql stellt Tabellenstruktur und Daten wieder her
  • Lösung für das Problem, dass die InnoDB-Engine beim Starten von MySQL deaktiviert wird
  • MySQL führt SQL-Datei aus und meldet Fehler Fehler: Unbekannte Speicher-Engine „InnoDB“-Lösung
  • Erfahrungsaustausch zur Reparatur von MySQL InnoDB-Ausnahmen
  • MySQL InnoDB-Überwachung (Systemebene, Datenbankebene)
  • Zusammenfassung der Betriebsaufzeichnungen zum Ändern der MyISAM-Speicher-Engine in Innodb in MySQL
  • MySQL-Optimierung: InnoDB-Optimierung
  • Detaillierte Erklärung des Unterschieds zwischen MyISAM und InnoDB in der MySQL-Speicher-Engine
  • MySQL weist darauf hin, dass die InnoDB-Funktion deaktiviert ist und InnoDB aktiviert werden muss. Lösung
  • Tutorial zur Beziehung zwischen Innodb-Transaktionsisolationsebene und Sperre in MySQL
  • Detaillierte Erklärung der InnoDB-Speicherdateien in MySQL

<<:  SSH-Schlüsselpaare von einer oder mehreren Linux-Instanzen trennen

>>:  Vertieftes Verständnis davon in JavaScript

Artikel empfehlen

Implementieren einer verteilten Sperre mit MySQL

einführen In einem verteilten System ist die vert...

So verwenden Sie React-Color zum Implementieren des Front-End-Farbwählers

Hintergrund Wir können react-color verwenden, um ...

Die Vorteile von Div+CSS und Web-Standardseiten

Das Div-Element wird verwendet, um Struktur und Hi...

So teilen und führen Sie mehrere Werte in einem einzigen Feld in MySQL zusammen

Mehrere Werte kombiniert anzeigen Nun haben wir d...

So ändern Sie das Datenbankdatenspeicherverzeichnis in MySQL

Vorwort Die Standarddatenbankdatei der MySQL-Date...

Vergleichende Analyse von IN und Exists in MySQL-Anweisungen

Hintergrund Als ich kürzlich SQL-Anweisungen schr...

Zusammenfassung einiger gängiger Techniken in der Front-End-Entwicklung

1. So zeigen Sie das Datum rechts in der Artikelti...

Verwendung der JavaScript-Sleep-Funktion

Inhaltsverzeichnis 1. Schlaffunktion 2. setTimeou...

Best Practices zur Implementierung einfacher Jira-Projekte mit React+TS

Eine Reihe von Projekten für die Ausbildung reagi...