VorwortEines Tages wurde ich plötzlich nach der Next-Key-Sperre von MySQL gefragt und meine unmittelbare Reaktion war: Was zur Hölle ist das? ? ? Ich kann in diesem Screenshot nichts sehen? Bei genauerem Hinsehen kommt es einem bekannt vor. Ist das nicht der Inhalt von „MySQL 45 Lectures“? Was ist die Next-Key-Sperre?
Die Erklärung auf der offiziellen Website bedeutet in etwa: Die Next-Key-Sperre ist eine Kombination aus einer Datensatzsperre für den Indexdatensatz und einer Lückensperre für die Lücke vor dem Indexdatensatz. Setzen Sie sich zunächst viele kleine Fragezeichen? ? ?
Da ich nichts verstehe, muss ich von vorne anfangen und üben! Schauen wir uns zunächst die Schlussfolgerung von Herrn Ding Qi in „MySQL 45 Lectures“ an: Nach dem Lesen dieser Schlussfolgerung sollten die meisten Fragen beantwortet sein, aber es gibt einen sehr wichtigen Satz, der beachtet werden muss: Daher sind die oben genannten Regeln möglicherweise nicht auf die aktuelle Version anwendbar. Im Folgenden werde ich UmgebungsvorbereitungMySQL-Version: 8.0.25 Isolationsebene: Wiederholbares Lesen (RR) Speicher-Engine: InnoDB mysql> wähle @@global.transaction_isolation,@@transaction_isolation\G mysql> zeigen erstellen Tabelle t\G Informationen zum Installieren von MySQL mit Docker finden Sie in einem anderen Artikel: Installieren und Herstellen einer Verbindung mit MySQL mit Docker. PrimärschlüsselindexLassen Sie uns zunächst den Bereich der Next-Key-Sperre des Primärschlüsselindex überprüfen. Die Datenbankdaten zu diesem Zeitpunkt sind in der Abbildung dargestellt. Für den Primärschlüsselindex ist die Datenlücke wie folgt: Abfrage mit gleichem Primärschlüsselwert – Daten vorhanden mysql> begin; select * from t where id = 10 für Update; Diese SQL-Anweisung sperrt Sie können die Sperrinformationen über # mysql> wähle * aus performance_schema.data_locks; mysql> wähle * aus performance_schema.data_locks\G Informationen zu spezifischen Feldbedeutungen finden Sie in der offiziellen Dokumentation Die Ergebnisse enthalten hauptsächlich Informationen wie Engines, Bibliotheken und Tabellen. Wir müssen uns auf die folgenden Felder konzentrieren:
Das Ergebnis ist offensichtlich. Hier wird der Tabelle eine IX-Sperre hinzugefügt und dem Datensatz mit der Primärschlüsselindex-ID = 10 eine In ähnlicher Weise wird Es kann folgender Schluss gezogen werden: Wenn der Primärschlüsselwert gesperrt wird und der Wert vorhanden ist, wird der Tabelle eine Absichtssperre und dem Primärschlüsselindex eine Zeilensperre hinzugefügt. Abfrage mit gleichem Wert für Primärschlüssel – Daten nicht vorhandenmysql> select * from t where id = 11 für Update; Wenn die Daten nicht vorhanden sind, welche Sperre wird hinzugefügt? Welchen Umfang hat die Sperre? Analysieren Sie vor der Überprüfung die Lücken in den Daten.
Verwenden Sie data_locks, um die Sperrinformationen zu analysieren: Sehen Sie sich die Sperrinformationen Wenn zu diesem Zeitpunkt SQL in einer anderen Sitzung ausgeführt wird, ist die Antwort offensichtlich: ID = 12 kann nicht eingefügt werden, aber ID = 15 kann aktualisiert werden. Man kann den Schluss ziehen, dass, wenn die Daten nicht vorhanden sind, die Abfrage mit gleichem Wert des Primärschlüssels die Lücke schließt, in der sich die Abfragebedingung des Primärschlüssels befindet. Abfrage des Primärschlüsselbereichs (Schlüsselpunkt)mysql> begin; select * from t where id >= 10 und id < 11 für Update; Nach der Analyse von „MySQL 45 Lectures“ ergeben sich folgende Ergebnisse:
Erster Blick auf data_locks Man erkennt, dass neben der Tabellensperre auch noch eine Zeilensperre ( Daher kann tatsächlich die ID = 15 aktualisiert werden. Das heißt, es gibt ein Problem Auch die Ergebnisüberprüfung ist korrekt, die ID = 12 ist für die Einfügung gesperrt und die ID = 15 wurde erfolgreich aktualisiert. Was passiert, wenn die rechte Seite des Bereichs eine Abfrage mit gleichem Wert enthält? mysql> begin; select * from t where id > 10 und id <= 15 für Update; Lassen Sie uns dieses SQL analysieren: Schauen Sie sich auch data_locks an Es ist ersichtlich, dass nur eine X-Sperre für die Primärschlüsselindex-ID = 15 hinzugefügt wird. Überprüfen, ob ID = 15 aktualisiert werden kann? Nochmals prüfen, ob id=16 eingefügt werden kann? Es stellt sich heraus, dass es kein Problem gibt! Natürlich werden einige Freunde hier sagen, dass es in „MySQL 45 Lectures“ einen Fehler gibt, der den nächsten Next-Key sperrt. Es stellt sich heraus, dass dieser Fehler behoben wurde. Die korrigierte Version ist Referenzlinkadresse: https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-18.html Suchbegriffe: Fehler Nr. 29508068) Wir können es jeweils mit 8.0.17 reproduzieren: In 8.0.17 werden Schauen wir uns einmal die Frage an, ob es Nun schätze ich es als sehr wahrscheinlich ein, dass dieser Vergleichen Sie data_locks-Daten: Beachten Sie den rot unterstrichenen Teil. In Version 8.0.17 ist LOCK_MODE ZusammenfassenIn diesem Artikel wird hauptsächlich der Sperrbereich des nächsten Schlüssels beim Sperren des Primärschlüssels durch tatsächliche Vorgänge überprüft. Außerdem werden Materialien konsultiert und Versionen verglichen, um unterschiedliche Schlussfolgerungen zu ziehen. Schlussfolgerung 1:
Nach der Optimierung wird es später geöffnet. Ich weiß nicht, ob dies daran liegt, dass das Primärschlüsselintervall nach der Optimierung direkt später geöffnet wird, oder ob es sich um einen Fehler handelt. Bestimmte Freunde können es versuchen. Schlussfolgerung 2 Durch die Verwendung
Der Next-Key-Sperrbereich des Primärschlüssels wurde grundsätzlich verstanden. Beachten Sie, dass die verwendete Version 8.0.25 ist. zweifeln
Der Artikel ist in seiner Länge begrenzt, so dass du dir zunächst selbst Gedanken machen und es selbst ausprobieren kannst. Übung macht den Meister. Um die konkrete Antwort zu erhalten, muss der nächste Artikel überprüft und die Schlussfolgerung zusammengefasst werden. Dies ist das Ende dieses Artikels über den Sperrbereich der MySQL-Next-Key-Sperre. Weitere Informationen zum Sperrbereich der MySQL-Next-Key-Sperre finden Sie in den vorherigen Artikeln von 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:
|
<<: Lösung für das Problem, dass der Z-Index in CSS3 nicht wirksam wird
>>: Eine kurze Diskussion über Flinks fehlertoleranten Mechanismus: Jobausführung und Daemon
Inhaltsverzeichnis 1. Materialien vorbereiten 2. ...
erster Schritt Einmaliges Löschen mit der integri...
Dieser Artikel stellt hauptsächlich ein Beispiel ...
Inhaltsverzeichnis Vorwort 1. Vorschau der Office...
1. Mindmap 2. So bauen Sie einen Container 2.1 Vo...
Ich wollte schon immer etwas über Caching lernen....
1. Problembeschreibung Beim Starten von MySQL tri...
Einführung: Als ich mir in letzter Zeit die Frage...
Nginx kann seine Reverse-Proxy-Funktion zum Imple...
Inhaltsverzeichnis 1. Phänomen 2. Lösung 3. Zusam...
Ich habe kürzlich an einer Kommentarfunktion gear...
Inhaltsverzeichnis rahmen Erstklassiges Fehlerrep...
1. Einführung in TypeScript Im vorherigen Artikel...
Heute werde ich den Server nginx verwenden und mu...
CAST-Funktion Im vorherigen Artikel haben wir die...