Vorne geschrieben Eine Datenbank ist im Wesentlichen eine gemeinsam genutzte Ressource. Daher muss bei der Maximierung der Leistung bei gleichzeitigem Zugriff sichergestellt werden, dass jeder Benutzer die Daten auf konsistente Weise lesen und ändern kann. Zur Lösung derartiger Probleme ist eine Sperre die beste Waffe. Erstellen Sie zunächst einen neuen Tabellentest mit der ID als Primärschlüssel, dem Namen als sekundärem Index und der Adresse als eindeutigem Index. CREATE TABLE `test` ( `id` int(11) NICHT NULL AUTO_INCREMENT, `name` int(11) NICHT NULL, `Adresse` int(11) NICHT NULL, Primärschlüssel (`id`), EINZIGARTIGER SCHLÜSSEL `idex_unique` (`Adresse`), SCHLÜSSEL `idx_index` (`Name`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4; Zeilensperren in INSERT-Methoden Es ist ersichtlich, dass, wenn zwei Transaktionen nacheinander INSERT-Operationen an Zeilendatensätzen mit demselben Primärschlüssel ausführen, Transaktion B nur warten kann, bis die Zeilensperre nach dem Commit von Transaktion A freigegeben wird, da Transaktion A zuerst die Zeilensperre erhält. Wenn Sie Daten in die eindeutige Indexfeldadresse einfügen, müssen Sie ebenfalls eine Zeilensperre erwerben. Das Diagramm ähnelt dem Einfügen des Primärschlüssels und wird hier nicht wiederholt.
Die Update-Methode hat ähnliche Ergebnisse wie die Insert-Methode. Tabellensperren und Zeilensperren unter SELECT FOR UPDATE Die SELECT FOR UPDATE-Anweisung von Transaktion A erhält die Tabellensperre des Tabellentests. Zu diesem Zeitpunkt wird Transaktion B beim Ausführen des Einfügevorgangs blockiert. Erst nachdem Transaktion A die Tabellensperre festgeschrieben und freigegeben hat, kann Transaktion B die entsprechende Zeilensperre erhalten und den Einfügevorgang ausführen.
Lückensperren unter sekundären Indizes Schauen Sie sich zunächst die Daten unter der Testtabelle an: mysql> wähle * aus Test; +----+------+---------+ | ID | Name | Adresse | +----+------+---------+ | 3 | 1 | 3 | | 6 | 1 | 2 | | 7 | 2 | 4 | | 8 | 10 | 5 | +----+------+---------+ 4 Zeilen im Satz (0,00 Sek.) Gap Lock kann als eine Art Zeilensperre bezeichnet werden. Der Unterschied besteht darin, dass es Datensätze innerhalb eines Bereichs sperrt. Seine Funktion besteht darin, Phantom-Lesevorgänge zu vermeiden, d. h. die plötzliche Erhöhung oder Verringerung von Intervalldateneinträgen. Die wichtigsten Lösungen sind:
Die Bedingungen für die automatische Verwendung von Gap-Locks durch InnoDB sind:
Wenn InnoDB Indexdatensätze scannt, fügt es zuerst eine Zeilensperre zum ausgewählten Indexzeilendatensatz hinzu und fügt dann eine Lückensperre zu den Lücken auf beiden Seiten des Indexdatensatzes hinzu (durch Scannen nach links, um den ersten Wert zu finden, der kleiner als der angegebene Parameter ist, und durch Scannen nach rechts, um den ersten Wert zu finden, der größer als der angegebene Parameter ist, wodurch ein Intervall erstellt wird). Wenn eine Lücke durch Transaktion A gesperrt ist, kann Transaktion B keine Datensätze in diese Lücke einfügen.
Schauen wir uns ein Beispiel an. Wenn wir eine Tabelle erstellen, geben wir die Spalte Name als Hilfsindex an. Derzeit sind die Werte dieser Spalte [1,2,10]. Die Lückenbereiche sind (-∞, 1], [1,1], [1,2], [2,10], [10, +∞) Runde 1:
Runde 2:
Runde 3:
Zusammenfassung des InnoDB-Sperrmechanismus Verweise
Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: Implementierung eines einfachen Chatroom-Dialogs basierend auf WebSocket
>>: CentOS 8: Installation des benutzerdefinierten Verzeichnisses nginx (Details zum Tutorial)
Als ich mir heute die Laborprojekte ansah, stieß ...
Inhaltsverzeichnis 1. Datentyp 1.1 Warum brauchen...
Wenn Sie zum Starten der Seite das Plugin „html-w...
Hintergrund Um die Docker-Containerisierung währe...
1. Verwenden Sie das Playbook von Ansible, um htt...
Das Tutorial zur Installation von OpenStack Ussur...
Umfassendes Systemüberwachungstool dstat dstat is...
Kurzbeschreibung Der Editor hat häufig Probleme m...
In Unternehmen hat die hohe Verfügbarkeit von Dat...
Es besteht ein Unterschied zwischen src und href ...
Hintergrund Alle Server des Unternehmens sind gek...
Inhaltsverzeichnis 01 Einführung in YAML-Dateien ...
Inhaltsverzeichnis Vorwort Zentrieren von Inline-...
In diesem Artikel wird der spezifische JavaScript...
Crontab installieren yum install crontabs CentOS ...