Dieser Artikel soll Ihnen vor allem dabei helfen, schnell das Wissen über Sperren in InnoDB zu verstehen. Grundlegende Konzeptanalyse und detaillierte Quellcodeanalyse von RocketMQ http://xiazai.jb51.net/202105/yuanma/RocketMQ_jb51.rar Warum müssen wir sperrenZunächst einmal: Warum sperren? Ich glaube, mehr muss ich dazu nicht sagen. Stellen Sie sich einfach die folgende Szene vor, dann verstehen Sie es. Was tun Sie, wenn Sie in einem Einkaufszentrum auf die Toilette gehen? Schließ die Tür ab. Wenn Sie die Tür nicht abschließen und sie sich plötzlich öffnet, während Sie die Toilette benutzen, könnte das etwas unangemessen erscheinen. Dasselbe gilt für Daten. In parallelen Szenarien wird die Konsistenz der Daten direkt zerstört, wenn die Daten nicht gesperrt sind. Wenn es bei Ihrem Geschäft um Geld geht, sind die Folgen noch schwerwiegender. Sperren Sie das Tür-AusdruckspaketSperrklassifizierungWas sind die Sperren in InnoDB? Eigentlich solltest du schon viel wissen. Im Vorstellungsgespräch wirst du beispielsweise nach dem Unterschied zwischen den Speicher-Engines MyISAM und InnoDB gefragt. Du wirst sagen, dass MyISAM nur Tabellensperren hat, InnoDB aber sowohl Zeilensperren als auch Tabellensperren unterstützt. Möglicherweise werden Sie auch gefragt, was der Unterschied zwischen optimistischer und pessimistischer Sperre ist. Es gibt viele Konzepte und Substantive für Schlösser. Wenn Sie kein umfassendes Weltbild über Schlösser haben, wird es für Sie schwierig sein, sie zu verstehen. Als Nächstes werden wir diese Schlösser klassifizieren. Je nach Granularität des SchlossesJe nach Granularität des Schlosses kann es in folgende Kategorien unterteilt werden:
Wir werden hier nicht auf Seitensperren eingehen, da es sich bei Seitensperren um ein Konzept handelt, das nur in der Speicher-Engine BDB (BerkeleyDB) existiert. Wir werden hier hauptsächlich die Speicher-Engine InnoDB besprechen. Nach der Idee des SchlossesNach der Idee der Verriegelung kann sie unterteilt werden in:
Pessimismus und Optimismus haben hier die gleiche Bedeutung wie die Substantive, die Sie normalerweise verstehen. Beim optimistischen Sperren wird davon ausgegangen, dass es eine hohe Wahrscheinlichkeit gibt, dass keine Konflikte auftreten, und es wird nur gesperrt, wenn es nötig ist. Beim pessimistischen Sperren wird davon ausgegangen, dass eine hohe Konfliktwahrscheinlichkeit besteht. Daher wird der Sperrvorgang ausgeführt, unabhängig davon, ob er erforderlich ist. Nach KompatibilitätJe nach Kompatibilität können Schlösser unterteilt werden in:
Ressourcen mit gemeinsam genutzten Sperren können mit anderen geteilt werden. Wenn jedoch exklusive Sperren hinzugefügt werden, können andere keine Vorgänge ausführen, ohne die Sperre zu erhalten. Nach der Umsetzung der SperreDie Implementierung hier sind die spezifischen Arten von Sperren in InnoDB, und zwar:
Auch wenn Schlösser entsprechend dieser Klassifizierung unterteilt werden, kann die große Zahl an Schlossnamen dennoch für Verwirrung sorgen. Welche Art von Sperre wird beispielsweise hinzugefügt, wenn ich Wir sollten das Wesentliche durch das Phänomen erkennen. Was ist das Wesentliche? Entscheidend ist, welchem Objekt das Schloss hinzugefügt wird. Dies lässt sich leicht beantworten:
Und welcher Art sind die den Zeilen hinzugefügten Sperren? Das Wesentliche besteht darin, dem Index eine Sperre hinzuzufügen. Absichtssperre InnoDB unterstützt Sperren unterschiedlicher Granularität, darunter Zeilensperren und Tabellensperren. Beispielsweise hält der Befehl Eine Intention Lock ist eine Sperre auf Tabellenebene, die angibt, welcher Sperrtyp bei der nächsten Transaktion verwendet wird. Es gibt die folgenden zwei Typen:
Beispielsweise fügt
Die folgende Abbildung zeigt den gegenseitigen Ausschluss und die Kompatibilität dieser Schlosskombinationen. Gemäß der obigen Tabelle gilt: Wenn sie miteinander kompatibel sind, kann die entsprechende Transaktion die Sperre erwerben. Wenn sie jedoch inkompatibel sind, kann die Sperre erst erworben werden, wenn die inkompatible Sperre aufgehoben wird. Wenn Sie dies sehen, haben Sie möglicherweise Fragen, da die Absichtssperre nichts außer Um das Beispiel noch weiter zu verwenden: Angenommen, Transaktion A erhält eine gemeinsame Sperre für die Zeile mit der ID = 100 in der Studententabelle und anschließend muss Transaktion B eine exklusive Sperre für die Studententabelle beantragen. Diese beiden Sperren stehen offensichtlich im Konflikt und gelten für dieselbe Zeile. Woher muss InnoDB wissen, dass A diese Sperre erworben hat? Den gesamten B+-Baum durchlaufen? Nein, die Antwort ist eine Absichtssperre. Wenn Transaktion B eine exklusive Sperre für die Schreibtabelle beantragt, stellt InnoDB fest, dass Transaktion A bereits eine beabsichtigte gemeinsame Sperre für die Tabelle erhalten hat, was darauf hinweist, dass die Studententabelle Datensätze enthält, die bereits durch eine gemeinsame Sperre gesperrt sind. Es wird zu diesem Zeitpunkt blockiert. Darüber hinaus blockieren Intention Locks keine anderen Operationen außer Operationen wie Genau wie wenn Sie in die Bibliothek gehen, um nach einem Buch zu suchen, müssen Sie nicht jedes Bücherregal einzeln durchsuchen. Sie können einfach zum Service-Schalter gehen und am Computer suchen, um herauszufinden, ob die Bibliothek das Buch hat. DatensatzsperreDies ist eine Datensatzsperre, eine Art Zeilensperre. Das Sperrobjekt der Datensatzsperre ist der Index, der dieser Datenzeile entspricht. Wenn Ihnen der Index nicht klar ist, können Sie diesen Artikel lesen. Wenn wir Wenn wir eine Transaktion starten, um die Zeile mit der ID = 1 zu aktualisieren, und wir die Transaktion nicht sofort festschreiben und dann eine weitere Transaktion starten, um die Zeile mit der ID = 1 zu aktualisieren, wird uns die Meldung X steht für exklusive Sperre. Daraus können wir erkennen, dass Datensatzsperren tatsächlich in gemeinsame Sperren und exklusive Sperren unterteilt werden können. Wenn wir LückensperreBei Gap Locks ist das gesperrte Objekt auch ein Index. Um die Lückensperre besser zu verstehen, sehen wir uns ein Beispiel an. WÄHLEN SIE DEN NAMEN DES SCHÜLERS, DER ZWISCHEN 18 UND 25 JAHREN ALTER LIEGT, UM ZU AKTUALISIEREN Angenommen, wir haben einen nicht gruppierten Index für Hier ist ein weiteres Beispiel: SELECT * FROM student WHERE age = 10 FOR UPDATE; Es ist erwähnenswert, dass das Alter hier kein eindeutiger Index, sondern ein einfacher nicht gruppierter Index ist. Zu diesem Zeitpunkt wird den Daten mit Gap-Locks sind eine Kompromisslösung für MySQL, die auf Leistungs- und Parallelitätsaspekten basiert und nur unter Repeatable Read (RR) verfügbar ist. Wenn die Isolationsebene der aktuellen Transaktion Read Committed (RC) ist, deaktiviert MySQL Gap-Locks. Wie ich gerade sagte, werden Datensatzsperren in gemeinsam genutzte und exklusive Sperren unterteilt, und Lückensperren sind eigentlich dasselbe. Aber im Gegensatz zu Datensatzsperren schließen sich gemeinsame Lückensperren und exklusive Lückensperren nicht gegenseitig aus. Was ist hier los? Wir müssen das Wesentliche noch durch das Phänomen erkennen. Was ist der Zweck der Lückensperre? Um zu verhindern, dass andere Transaktionen Daten in die Lücke einfügenGemeinsam genutzte und exklusive Gap-Locks sind in diesem Ziel konsistent und können daher gleichzeitig existieren. Pro-TastensperreNext-Key-Locks sind die letzte Art der Zeilensperrenimplementierung in InnoDB. Next-Key-Locks sind eigentlich eine Kombination aus Datensatzsperren und Lückensperren. Mit anderen Worten: Die angrenzende Schlüsselsperre fügt dem entsprechenden Index eine Datensatzsperre hinzu und sperrt zusätzlich ein Intervall. Aber nicht alle temporären Schlüsselsperren funktionieren auf diese Weise. Für das folgende SQL: Wählen Sie * aus dem Studenten, wobei ID = 23 ist. In diesem Fall ist die Angenommen, wir haben drei Indexdatenelemente: 10, 20 und 30. Der mögliche Sperrbereich bei der temporären Tastensperre ist dann wie folgt:
Die standardmäßige Transaktionsisolationsebene von InnoDB ist Repeatable Read (RR). In diesem Fall verwendet InnoDB temporäre Schlüsselsperren, um Phantom-Lesevorgänge zu verhindern. Um Phantom Read kurz zu erklären: Innerhalb einer Transaktion führen Sie zwei Abfragen aus. Die erste Abfrage gibt 5 Datenelemente zurück, die zweite Abfrage gibt jedoch 7 Datenelemente zurück. Dies ist ein Phantom Read. Sie haben vielleicht in vielen früheren Blogs oder Interview-Essays erfahren, dass die RR-Transaktionsisolationsebene von InnoDB Phantom-Lesevorgänge verhindern kann. Der Schlüssel zur Verhinderung von Phantom-Lesevorgängen in RR ist die temporäre Schlüsselsperre. Angenommen, die Studententabelle enthält zwei Zeilen mit den IDs 90 und 110. Wählen Sie * aus dem Studenten, wobei ID > 100 für Update ist. Nach der Ausführung dieser SQL-Anweisung fügt InnoDB Lückensperren zu den Intervallen (90, 110] und (110, ∞) hinzu und fügt eine Datensatzsperre zum Index mit der ID = 110 hinzu. Auf diese Weise können andere Transaktionen diesem Intervall keine neuen Daten hinzufügen, selbst wenn 100 überhaupt nicht existiert. Absichtssperre einfügen Als nächstes folgen die Insert Intention Locks, die hinzugefügt werden, bevor wir Nehmen wir noch einmal ein Beispiel. Angenommen, wir haben jetzt die Indexdatensätze 10 und 20. Die Transaktionen A und B fügen Daten mit den Indexwerten 14 bzw. 16 ein. Zu diesem Zeitpunkt verwenden die Transaktionen A und B die Einfügeabsichtssperre, um die Lücke zwischen 10 und 20 zu sperren. Nachdem sie die Einfügeabsichtssperre erhalten haben, erhalten sie exklusive Sperren für 14 und 16. Zu diesem Zeitpunkt blockieren sich die Transaktionen A und B nicht gegenseitig, da sie unterschiedliche Zeilen einfügen. Auto-Inkrement-Sperre Schließlich gibt es noch AUTO-INC-Sperren. AUTO-INC-Sperren sind im Wesentlichen Tabellensperren, die etwas ganz Besonderes sind. Wenn Transaktion A Daten zu einer Tabelle hinzufügt, die Holen Sie sich die MQ-Lernmaterialien über den unten stehenden Link, einschließlich der Analyse grundlegender Konzepte und der detaillierten RocketMQ-Quellcodeanalyse. Sie werden ständig aktualisiert, verpassen Sie diese Lernmaterialien also nicht. http://xiazai.jb51.net/202105/yuanma/RocketMQ_jb51.rar (Muss gesammelt werden) Das Obige ist eine kurze Einführung in die Details der relevanten Sperren in MySQL. Weitere Informationen zu MySQL-Sperren finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
>>: Beispiele für minimalistisches Website-Design
Inhaltsverzeichnis Vorwort Beziehungen zwischen v...
In diesem Artikel wird der spezifische Code für J...
Grundlegende Syntax: <Eingabetyp="versteck...
Installationsvorschlag : Versuchen Sie, für die I...
Die spezifische Verwendung der Drag & Drop-Zo...
Inhaltsverzeichnis Was ist ein Headless-Browser? ...
Ergebnisse erzielen Umsetzungsideen Der Schmelzef...
Vorwort Bei Verwendung der MySQL-Datenbank muss s...
Inhaltsverzeichnis 1. Dateien importieren 2. HTML...
Sublime Text 2 ist ein leichter, einfacher, effiz...
Inhaltsverzeichnis 1. Container-Service-Update un...
Hash-Modus (Standard) Funktionsprinzip: Überwache...
Vorwort Ich habe zuvor eine Komponente im Ladesti...
1. <dl> definiert eine Liste, <dt> de...
Erstellen Sie eine Animation der acht Planeten de...