VorwortDifferenzierung nach Sperrgranularität
Je nach Sperrszenario
Globale SperreDas Sperrobjekt ist: die gesamte Datenbankinstanz Tabellen mit Lesesperre leeren (FTWRL) - macht die gesamte Datenbank schreibgeschützt Anwendungsszenario: Erstellen Sie eine logische Sicherung der gesamten Datenbank Vollständige logische DatenbanksicherungWarum benötigen wir zum Sichern von Daten eine globale Sperre? Beispielsweise habe ich für Verkäufe eine Tabelle, um Lieferungen aufzuzeichnen, und eine andere Tabelle, um Abzüge aufzuzeichnen. Als Ergebnis habe ich die Tabelle mit den Lieferdaten gesichert. Zu diesem Zeitpunkt hat jemand etwas gekauft, aber nur die Zahlung wurde abgezogen, aber es gab keine Lieferdaten. Das ist offensichtlich nicht akzeptabel. Das offizielle logische Backup-Tool ist mysqldump. Wenn mysqldump den Parameter –single-transaction verwendet, wird vor dem Importieren der Daten eine Transaktion gestartet, um eine konsistente Ansicht zu gewährleisten. Dank der Unterstützung von MVCC können die Daten während dieses Vorgangs wie gewohnt aktualisiert werden. Dies ist jedoch transaktionsbasiert und für die MyISAM-Daten-Engine nicht verfügbar. In diesem Fall ist es möglich, dass einige Tabellen nicht auf der InnoDB-Daten-Engine basieren. Wenn es sich bei allen um Tabellen der InnoDB-Daten-Engine handelt, ist es natürlich besser, den Standard-MySQLDump zu verwenden und den Parameter –single-transaction hinzuzufügen, um eine globale logische Sicherung durchzuführen. Unterschied zwischen FTWRL und globalem „readonly=true“ festlegen
TabellensperreBefehl: Tabelle {tableName} lesen/schreiben sperren (Schreiben ist mächtiger als Lesen, wer schreiben kann, kann auch lesen), Tabelle entsperren Die gesperrte Ressource erlaubt nur dem aktuellen Thread, die entsprechende Operation auszuführen. Und der aktuelle Thread kann die entsprechende Operation nur an der gesperrten Tabelle ausführen. Beispiel: Sperrtabelle t1 lesen, der aktuelle Thread kann nur lesen, aber nicht schreiben, und andere Threads können weder lesen noch schreiben MDL-SperreEs ist keine explizite Verwendung erforderlich, es wird automatisch beim Zugriff auf die Tabelle hinzugefügt (um Probleme durch Änderungen in der Tabellenstruktur zu vermeiden) Wenden Sie eine MDL-Lesesperre an, wenn Sie eine Tabelle hinzufügen, löschen, ändern oder überprüfen, und wenden Sie eine MDL-Schreibsperre an, wenn Sie die Struktur einer Tabelle ändern.
ZeilensperreZeilensperren werden von jeder Engine auf Engine-Ebene implementiert (MyISAM unterstützt keine Zeilensperren, daher kann die Engine Aktualisierungsvorgänge immer nur für einen Thread gleichzeitig ausführen). Bei einer Transaktion: Zeilensperren werden hinzugefügt, wenn eine oder mehrere Datenzeilen benötigt werden, aber alle Zeilensperren werden erst freigegeben, wenn die Transaktion festgeschrieben ist. Mit anderen Worten: Wenn andere Threads auf die Zeilendaten zugreifen müssen, müssen sie warten, bis die Transaktion des Threads festgeschrieben ist, bevor sie darauf zugreifen können. Beispiel:
Daher müssen wir auf Folgendes achten: Wenn bei der Durchführung von Transaktionsvorgängen die Aktualisierung nicht sequenziell erfolgt, versuchen Sie, die Anweisung mit den meisten Zugriffen zuletzt auszuführen (da die Sperrung sequenziell erfolgt, das Aufheben der Sperrung jedoch gemeinsam erfolgt).
DeadlockIn vielen Situationen kommt es zu Deadlocks, die meisten davon sind auf Probleme mit Datenbankoperationen zurückzuführen. Zum Beispiel
Es gibt zwei Strategien, um mit diesem Problem umzugehen:
DatensatzsperreEin Fall von Zeilensperre Es zielt darauf ab, bestimmte Datensatzinformationen zu erfassen, die durch die Transaktion nach dem Sperren gesperrt wurden. Auslösende Bedingung: Die Abfragebedingung ist genau erfüllt und das übereinstimmende Bedingungsfeld ist eindeutig Beispiel: update t1 set name="张三" where id=12138 Funktion: Wenn ein Datensatz von der aktuellen Transaktion verwaltet wird, wird er nach dem Sperren nicht von anderen Transaktionen abgerufen, was zu Problemen wie "wiederholtem Lesen" und "Daten-Dirty-Reads" führt LückensperreEin Fall von Zeilensperre Mit der Lücke sind die Daten dazwischen gemeint Es gibt mehrere leere Daten in der Index-ID des Primärschlüssels. Wenn es zu diesem Zeitpunkt zwei Threads A und B gibt, A Daten zwischen 0 und 10 abfragt und B Daten in ID = 3 einfügt, führt dies zu einem Problem beim Lesen von Daten mit fehlerhaftem Lesen. Wenn Sie eine Transaktion in einem Bereich wie „zwischen“ durchführen, wird daher zur Einschränkung eine Lückensperre hinzugefügt. Pro-TastensperreDie temporäre Schlüsselsperre sperrt die abgefragten Datensätze und sperrt außerdem alle Lücken innerhalb der Bereichsabfrage. Anschließend sperrt sie auch das nächste angrenzende Intervall. (Lin bedeutet benachbart) Optimistisches und pessimistisches Sperren
ZusammenfassenDies ist das Ende dieses Artikels über den Sperrmechanismus in MySQL. Weitere Informationen zum Sperrmechanismus in MySQL finden Sie in früheren Artikeln auf 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:
|
<<: Implementierung der One-Click-TLS-Verschlüsselung für die Docker-Remote-API
>>: CSS-Sprites-Technologie integriert mehrere Hintergründe in ein PNG-Bild CSS-Positionierung
Informationen zu CSS3-Variablen Fügen Sie beim De...
Inhaltsverzeichnis Datenbroker und Events Überprü...
1. Herunterladen Laden Sie mysql-5.7.19-linux-gli...
1. Installation Installation mit yum ##Yum nginx ...
Inhaltsverzeichnis 1. Hintergrund 2. Bedienungssc...
Dieser Artikel stellt hauptsächlich das Beispiel ...
Wenn Sie nach der Installation der Datenbank das ...
Inhaltsverzeichnis Vorwort Referenzvergleich Manu...
Da die Nachfrage nach Front-End-Seiten weiter ste...
In diesem Artikel werden MySQL-Protokolle sowie B...
1. Zusammensetzung und verwandte Konzepte der MyS...
Die Standardvorlagenmethode ähnelt vue2 und verwe...
Vorwort Ab MySQL 5.7.11 unterstützt MySQL die Dat...
Die Rolle des virtuellen DOM Zunächst müssen wir ...
Vorwort: js ist eine Single-Thread-Sprache, daher...