Ü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

Schritte zur Installation von Pyenv unter Deepin

Vorwort In der Vergangenheit habe ich die Python-...

So verwalten Sie zwischengespeicherte Seiten in Vue

Inhaltsverzeichnis Problem 1: Zerstörung 1. Wie m...

So kompilieren und installieren Sie OpenCV unter Ubuntu

Einfache Installation von opencv2: conda installi...

Detaillierte Erklärung zur Verwendung des MySQL-Sicherungsskripts mysqldump

In diesem Artikel wird das MySQL-Sicherungsskript...

Detaillierte Erklärung des Vue-Slots

1. Funktion : Ermöglicht der übergeordneten Kompo...

Docker-Compose erstellt schnell Schritte für ein privates Docker-Warehouse

Erstellen Sie docker-compose.yml und füllen Sie d...

So erstellen Sie PHP7 mit einem benutzerdefinierten Docker-Image

Führen Sie zunächst eine einfache Docker-Installa...

jQuery implementiert dynamische Tag-Ereignisse

In diesem Artikel wird der spezifische Code von j...

HTML-Meta erklärt

Einführung Der Meta-Tag ist ein Hilfstag im HEAD-...

js realisiert den Lupeneffekt von Produkten auf Einkaufswebsites

In diesem Artikel wird der spezifische Code von j...