MySQL selbst wurde auf Basis des Dateisystems entwickelt, das sich durch die Existenz von Sperren unterscheidet. Als Datenbanksoftware hat MySQL zwangsläufig gleichzeitigen Zugriff auf seine gemeinsam genutzten Ressourcen. Um den gleichzeitigen Zugriff auf verschiedene Ressourcen zu koordinieren und zu verwalten, wird ein Sperrmechanismus erstellt, da die Existenz des Sperrmechanismus die Datenintegrität und -konsistenz für die Datenbank gewährleistet. Je nach Sperrebene können Sperren in folgende Kategorien unterteilt werden: Sperren auf Zeilenebene, Sperren auf Tabellenebene und Sperren auf Seitenebene. Gemeinsam genutzte Sperre, die Transaktionen das Lesen von Daten ermöglicht. Für die MyISAM-Speicher-Engine werden nur Tabellensperren unterstützt, während die InnoDB-Speicher-Engine Zeilensperren und Tabellensperren unterstützt. Wenn die MyISAM-Speicher-Engine Daten ändert oder löscht, wird eine exklusive Sperre generiert, die die gesamte Tabelle sperrt und die gleichzeitige Schreibleistung schlecht ist. Beim Lesen wird eine gemeinsame Sperre generiert, die die Tabelle nicht sperrt und eine bessere Leseleistung aufweist. Wenn die InnoDB-Speicher-Engine Daten ändert oder löscht, wird eine exklusive Sperre generiert. Die Sperrung eines bestimmten Indexdatensatzes wirkt sich im Allgemeinen nicht auf andere Zeilen in der Tabelle aus und die gleichzeitige Schreibleistung ist besser. Beim Lesen wird eine gemeinsame Sperre generiert, die die Tabelle und die Zeilen nicht sperrt und die Leseleistung ist besser. Zeilensperren sperren Indexdatensätze und nicht Datensatzzeilen. Wenn kein Index vorhanden ist, wird zum Sperren ein impliziter Index verwendet. Wenn einige Zeilen einer Tabelle exklusive Sperren erhalten haben, wird in der Tabelle eine beabsichtigte exklusive Sperre generiert. Wenn eine Transaktion zu diesem Zeitpunkt die gesamte Tabelle sperren möchte, wird die Transaktion blockiert, wenn sie das Vorhandensein der beabsichtigten exklusiven Sperre erkennt. Die beabsichtigte Sperre kann direkt bestimmen, ob die Tabelle gesperrt werden kann, ohne jede Zeile durchlaufen zu müssen, um zu prüfen, ob eine exklusive Sperre vorhanden ist. Die beabsichtigte Sperre koordiniert effizient die Beziehung zwischen Zeilensperren und Tabellensperren. Zeilensperren werden je nach Sperrumfang in drei Typen unterteilt:
Natürlich haben Sperren ihre Vor- und Nachteile und es können auch Deadlocks auftreten. Schließlich bereichert die Existenz von Sperren die Funktionalität nachfolgender Transaktionen. MySQL entwickelt einen Mechanismus, der es ermöglicht, Daten vollständig von einem Konsistenzzustand in einen anderen zu überführen. Dieser Mechanismus wird als Transaktion bezeichnet. Transaktionen haben vier Hauptmerkmale: Atomarität (A), Konsistenz (C), Isolation (I) und Dauerhaftigkeit (D), die als ACID bezeichnet werden.
Atomarität und Dauerhaftigkeit werden durch Redo-Protokolle erreicht, Konsistenz durch Undo-Protokolle und Isolation durch Sperrmechanismen. Im Wesentlichen dient die Atomizität der Unterstützung der Persistenz. Wenn ein Teil einer Transaktion in das Redo-Log geschrieben wird und ein Absturz oder Stromausfall auftritt, sollte die Transaktion gemäß der Atomizität wiederhergestellt werden. In diesem Fall müssen die in der Protokolldatei persistent gespeicherten Daten durch Backtracking rückgängig gemacht werden. In der InnoDB-Speicher-Engine entsprechen die Redo-Protokolle ib_logfile0 und ib_logfile1. Wenn die Transaktion zurückgesetzt werden muss, muss dies durch Konsistenz gewährleistet sein. Um Konsistenz zu erreichen, wird das Undo-Protokoll verwendet. Das Undo-Protokoll speichert einige Informationen zu mehreren Versionen der Transaktion. Über das Undo-Protokoll kann die Transaktion auf den Zustand vor der Änderung zurückgesetzt werden. Hier müssen wir MySQLs MVCC-Mehrversions-Parallelitätskontrolle erwähnen, die auch durch Undo-Protokolle implementiert wird. Während der Ausführung einer Transaktion können gleichzeitig andere Transaktionen vorhanden sein. Mehrere Transaktionen müssen voneinander isoliert werden, d. h. es muss eine Parallelitätskontrolle erreicht werden. Sperren werden verwendet, um eine Isolierung zu erreichen. Zu den Transaktionsisolationsebenen von MySQL gehören: Read Uncommitted, Read Committed, Read Repeatable und Serializable. Darunter werden „Commited Read“ und „Repeatable Read“ basierend auf der MVCC-Mehrversions-Parallelitätskontrolle implementiert. Sperren bieten Vorteile für die Transaktionsparallelitätskontrolle, bringen aber auch Nachteile mit sich, darunter Dirty Reads, nicht wiederholbare Lesevorgänge und Phantomlesevorgänge. Dirty Read bedeutet, dass eine Transaktion den nicht festgeschriebenen Inhalt einer anderen Transaktion liest. Sobald die andere Transaktion zurückgesetzt wird, erscheinen schmutzige Daten. Um das Problem des Dirty Read zu lösen, müssen Sie die Isolationsebene mindestens auf „Read Committed“ einstellen. Oben finden Sie eine kurze Analyse der Details zu MySQL-Sperren und -Transaktionen. Weitere Informationen zu MySQL-Sperren und -Transaktionen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
>>: Detaillierte Erklärung der beiden Modi des Router-Routings in Vue: Hash und Verlauf
Vorwort: In den vorherigen Artikeln wurde die Ver...
Inhaltsverzeichnis 1. Warum Redux 2. Redux-Datenf...
Vorwort Glauben Sie mir, solange Sie sich an die ...
Bei der Entwicklung begegnen wir häufig dieser Sit...
Simulationstabellen und Datenskripte Kopieren Sie...
Inhaltsverzeichnis Optimieren von Sortierabfragen...
Code kopieren Der Code lautet wie folgt: <!--[...
Das Erstellen von Webseiten, die Webstandards ents...
Verzeichnisstruktur . │ .env │ docker-compose.yml...
In diesem Artikel wird der spezifische Code zur V...
Inhaltsverzeichnis 0. Was ist Webpack 1. Einsatz ...
Tastaturzeichen Englisch ` Rückwärtszitat ~ Tilde...
Pseudoelemente und Pseudoklassen Apropos, schauen...
Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...
Da Raspberry Pi auf der ARM-Architektur basiert, ...