MySQL ist eine der am häufigsten verwendeten Datenbanken in unserer täglichen Produktion und beim Lernen. Lassen Sie uns heute über die Isolationsebenen in MySQL (oder anderen ähnlichen Datenbanken) und die zur Verbesserung der Effizienz verwendete Multi-Version Concurrency Control (MVCC) sprechen. 1. Isolationsstufe Zuerst müssen wir ein Konzept erwähnen: Transaktion. Was ist eine Transaktion? Eine Transaktion ist eine Sammlung einer Reihe von Operationsanweisungen, die eine grundlegende Operation abschließen. Wenn ich beispielsweise 200 Yuan von Konto A auf Konto B überweisen möchte, könnte ich Folgendes tun: LESEN SIE UNVERBINDLICHAuf dieser Isolationsebene wird das Lesen von Daten in keiner Weise beeinträchtigt. Das heißt, Sie können sogar Daten lesen, die gerade durch andere Transaktionen geändert werden, und Sie können sie jederzeit lesen und ändern. Dies hat sicherlich wenig Mehraufwand, kann aber viele Probleme verursachen, wie zum Beispiel „Dirty Reads“. Das heißt, dass Daten gelesen werden, die geändert, aber noch nicht übermittelt wurden, was zu Lesefehlern führt. In Bezug auf die Leistung ist READ UNCOMMITED nicht viel besser als andere Ebenen, bringt jedoch viele lästige Probleme mit sich, sodass es in der Praxis selten verwendet wird. READ COMMITED (Read Committed/nicht wiederholbares Lesen) Diese Ebene fügt einige Bestimmungen basierend auf READ UNCOMMITED hinzu und ist die Standardisolationsebene für einige Datenbanken. Der Unterschied zu READ UNCOMMITED besteht darin, dass beim Lesen nur die festgeschriebenen Daten gelesen werden dürfen. Beispielsweise ist der Wert von Daten a nach der letzten Übermittlung 1. Zu diesem Zeitpunkt kommt ein Thread herein, um a zu ändern, und ändert a in 2, aber die Transaktion (COMMIT) wird zu diesem Zeitpunkt nicht festgeschrieben. In diesem Fall ist der Wert eines Lesevorgangs auf der Ebene READ UNCOMMITED der aktuelle Wert 2, aber der auf der Ebene READ COMMITED gelesene Wert ist immer noch der Wert nach der letzten Übermittlung, d. h. a ist 1. Der Wert von a muss gelesen werden, nachdem der Änderungsthread den Wert von a in 2 geändert hat und die Transaktion festgeschrieben wurde, damit er 2 ist. Das Problem, das diese Ebene mit sich bringt, ist das nicht wiederholbare Lesen. Das heißt, der beim letzten Mal gelesene Wert von a war 1, aber als der Änderungsthread die Transaktion festschrieb, änderte sich der Wert von a auf 2 und der zu diesem Zeitpunkt gelesene Wert war 2, d. h. die durch zweimaliges Ausführen desselben Lesevorgangs erhaltenen Werte sind unterschiedlich. WIEDERHOLTES LESEN REPEATED READ fügt einige restriktive Regeln basierend auf READ COMMITED hinzu und ist auch die Standardisolationsebene der MySQL-Datenbank. Einfach ausgedrückt ist es anderen Transaktionen untersagt, die entsprechenden Daten während der Ausführung einer Transaktion zu ändern. Dadurch wird sichergestellt, dass die während der Ausführung einer Transaktion abgefragten Daten konsistent sind, wodurch die Probleme von Dirty Reads und nicht wiederholbaren Lesevorgängen gelöst werden. Es bringt jedoch ein neues Problem mit sich, nämlich „Phantom-Lesevorgänge“. SERIALISIERBARDies ist die strengste Isolationsstufe. Es vermeidet das Problem von Phantomlesevorgängen, indem es die serielle Ausführung von Transaktionen erzwingt. Diese Isolationsebene ist jedoch sehr teuer und wird nicht oft verwendet. Die Beziehung zwischen verschiedenen Isolationsebenen und möglichen Problemen ist wie folgt:
MVCC Stellen Sie sich vor, dass bei jeder SQL-Operation eine Sperre auf Zeilenebene hinzugefügt werden muss, um Datenkonsistenz und -genauigkeit sicherzustellen. Dies ist zwar sehr zuverlässig, aber der daraus resultierende Systemaufwand und die verringerte Sucheffizienz sind ebenfalls sehr offensichtlich. Daher wurde MVCC entwickelt, um diesen Widerspruch aufzulösen.
a. Die Zeilenversionsnummer ist kleiner oder gleich der Transaktionsversionsnummer Nach dem Speichern dieser beiden Versionsnummern können die meisten Vorgänge ohne Sperren korrekt ausgeführt werden, wodurch Leistung und Effizienz gewährleistet werden. Oben finden Sie eine ausführliche Erläuterung der MySQL-Datenbankisolationsebene und von MVCC. Weitere Informationen zur MySQL-Datenbankisolationsebene und zu MVCC finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Implementierung der Knotenverbindung zur MySQL-Abfragetransaktionsverarbeitung
>>: Deaktivieren der AutoVervollständigen-Funktion im Eingabefeld
<br />Es ist nicht länger als zwei Jahre her...
Überprüfen Sie zunächst die von Ihnen verwendete ...
Inhaltsverzeichnis Typische Wasserfall-Website Wa...
In diesem Artikelbeispiel wird der spezifische Co...
Dockerfile ist eine Textdatei, die zum Erstellen ...
Kürzlich hat Microsoft das Serversystem 2019 verö...
In diesem Artikel werden hauptsächlich drei Metho...
Beim Installieren von Paketen auf einem Ubuntu-Se...
In diesem Artikelbeispiel wird der spezifische Co...
6 Lösungen für Netzwerkfehler im Docker-Container...
Hallo zusammen, heute möchte ich Ihnen zeigen, wi...
Verwenden Sie gespeicherte Prozeduren, um Transak...
Inhaltsverzeichnis 1. Zeichenfunktion 1. Fallkont...
Hier nehmen wir den Jenkins-Container als Beispie...
Der Syntaxstil der CSS-Stilregel ist die Grundein...