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
Ich habe bereits einige grundlegende CSS-Selektor...
Dieser Artikel stellt die Installation und Verwen...
Der Code sieht folgendermaßen aus: <!DOCTYPE h...
Überblick Das Builder-Muster ist ein relativ einf...
Vorwort: MYSQL dürfte die beliebteste WEB-Backend...
<br />Das Navigationsdesign stellt eine der ...
Inhaltsverzeichnis Vorwort LED-Trigger Entdecken ...
Inhaltsverzeichnis 1. Was ist ein Abschluss? 2. D...
Inhaltsverzeichnis 1. Holen Sie sich den Wert des...
Ich bin heute auf ein sehr seltsames Problem gesto...
In SQL wird GROUP BY verwendet, um Daten in den E...
1. Herunterladen Gehen Sie zur offiziellen Apache...
Inhaltsverzeichnis 1. Registrieren Sie ein Konto ...
Heute möchte ich einige sehr nützliche HTML-Tags z...
Inhaltsverzeichnis Docker-Images Was ist ein Spie...