1. Prozess2. Kernarchitektur
2.1 Einführung in die grundlegenden Komponenten der Serverschicht 1. Anschlüsse Bei Konnektoren geht es in erster Linie um Authentifizierungs- und Berechtigungsfunktionen, beispielsweise einen Portier auf hoher Ebene.
Der Abfragecache wird hauptsächlich zum Zwischenspeichern der von uns ausgeführten SELECT-Anweisung und des Ergebnissets der Anweisung verwendet.
3. Analysator
4. Optimierer
5. Aktuator
3. Anweisungsanalyse3.1 Abfrageanweisung
wähle * aus tb_student A, wobei A.Alter='18' und A.Name='Student'; In Kombination mit der obigen Beschreibung analysieren wir den Ausführungsfluss dieser Anweisung: Überprüfen Sie zunächst, ob die Anweisung die Berechtigung hat. Wenn nicht, wird direkt eine Fehlermeldung zurückgegeben. Wenn die Berechtigung erteilt ist, wird vor MySQL 8.0 zuerst der Cache abgefragt und mit dieser SQL-Anweisung als Schlüssel geprüft, ob ein Ergebnis im Speicher vorhanden ist. Wenn ja, wird der Cache direkt zwischengespeichert. Wenn nicht, fahren Sie mit dem nächsten Schritt fort. Durch den Analysator wird eine lexikalische Analyse durchgeführt, um die Schlüsselelemente der SQL-Anweisung zu extrahieren. Beispielsweise ist die obige Anweisung eine Abfrageauswahl, der abzufragende Tabellenname ist tb_student, alle Spalten müssen abgefragt werden und die Abfragebedingung ist die ID dieser Tabelle = „1“. Stellen Sie anschließend fest, ob die SQL-Anweisung syntaktische Fehler enthält, also etwa, ob die Schlüsselwörter korrekt sind etc. Ist die Prüfung in Ordnung, fahren Sie mit dem nächsten Schritt fort. Im nächsten Schritt bestimmt der Optimierer den Ausführungsplan. Die obige SQL-Anweisung kann zwei Ausführungspläne haben: a. Fragen Sie zunächst die Studententabelle nach dem Studenten mit dem Namen „Zhang San“ ab und ermitteln Sie dann, ob er 18 Jahre alt ist. Der Optimierer wählt dann basierend auf seinem eigenen Optimierungsalgorithmus die Lösung mit der besten Ausführungseffizienz aus (der Optimierer glaubt, dass dies möglicherweise nicht immer die beste Lösung ist). Nachdem Sie den Ausführungsplan bestätigt haben, können Sie mit der Ausführung beginnen. Führen Sie eine Berechtigungsprüfung durch. Wenn keine Berechtigung vorliegt, wird eine Fehlermeldung zurückgegeben. Wenn eine Berechtigung vorliegt, wird die Datenbank-Engine-Schnittstelle aufgerufen und das Ausführungsergebnis der Engine zurückgegeben. 3.2 Update-AnweisungOben sehen Sie den Ausführungsprozess einer SQL-Abfrage. Sehen wir uns also an, wie eine Update-Anweisung ausgeführt wird. Die SQL-Anweisung lautet wie folgt: Lassen Sie uns Zhang Sans Alter ändern. In der tatsächlichen Datenbank wird dieses Altersfeld definitiv nicht festgelegt, sonst werden Sie vom technischen Direktor geschlagen. Tatsächlich folgt diese Anweisung im Wesentlichen dem Prozess der vorherigen Abfrage, aber es ist notwendig, beim Ausführen von Aktualisierungen Protokolle aufzuzeichnen, wodurch das Protokollmodul eingeführt wird. Das in MySQL integrierte Protokollmodul ist binlog (Archivprotokoll), das von allen Speicher-Engines verwendet werden kann. Unsere häufig verwendete InnoDB-Engine verfügt auch über ein Protokollmodul Redo Log (Redo-Log). Wir werden den Ausführungsprozess dieser Anweisung im InnoDB-Modus besprechen. Der Ablauf ist wie folgt: Fragen Sie zuerst die Daten von Zhang San ab. Wenn ein Cache vorhanden ist, wird dieser auch verwendet. Holen Sie sich dann die Abfrageanweisung, ändern Sie das Alter auf 19 und rufen Sie die API-Schnittstelle der Engine auf, um diese Datenzeile zu schreiben. Die InnoDB-Engine speichert die Daten im Speicher und zeichnet das Redo-Protokoll auf. Zu diesem Zeitpunkt wechselt das Redo-Protokoll in den Vorbereitungszustand und teilt dem Executor mit, dass die Ausführung abgeschlossen ist und jederzeit übermittelt werden kann. Nach Erhalt der Benachrichtigung zeichnet der Executor das Binärprotokoll auf und ruft dann die Engine-Schnittstelle auf, um das Redo-Protokoll an den festgeschriebenen Status zu übermitteln. Update abgeschlossen. Einige Studenten werden hier sicherlich fragen, warum wir zwei Log-Module brauchen. Können wir nicht ein Log-Modul verwenden? Dies liegt daran, dass MySQL ursprünglich nicht mit der InnoDB-Engine kompatibel war (die InnoDB-Engine wurde von anderen Unternehmen als Plug-In in MySQL eingefügt). Die native Engine von MySQL ist MyISAM, aber wir wissen, dass das Redo-Log nur der InnoDB-Engine vorbehalten ist und andere Speicher-Engines nicht haben. Dies führt dazu, dass die Absturzsicherheit fehlt (die Absturzsicherheit bedeutet, dass selbst bei einem abnormalen Neustart der Datenbank zuvor übermittelte Datensätze nicht verloren gehen) und Binlog-Protokolle nur zum Archivieren verwendet werden können. Dies bedeutet nicht, dass es nicht möglich ist, nur ein Protokollmodul zu verwenden, aber die InnoDB-Engine unterstützt Transaktionen über das Redo-Log. Dann fragen sich manche Studenten vielleicht: Kann ich zwei Protokollmodule verwenden, ohne es so kompliziert zu machen? Warum muss Redo Log den Status „Prepare Pre-Commit“ einführen? Hier verwenden wir einen Beweis durch Widerspruch, um zu erklären, warum wir das tun. Schreiben Sie zuerst das Redo-Log und führen Sie ein direktes Commit durch, dann schreiben Sie das Binlog. Angenommen, die Maschine stürzt nach dem Schreiben des Redo-Logs ab und das Binlog wird nicht geschrieben. Nach dem Neustart der Maschine stellt die Maschine die Daten über das Redo-Log wieder her. Das Binlog zeichnet die Daten zu diesem Zeitpunkt jedoch nicht auf. Wenn die Maschine später gesichert wird, gehen diese Daten verloren. Gleichzeitig gehen diese Daten auch bei der Master-Slave-Synchronisierung verloren. Schreiben Sie zuerst das Binärprotokoll und dann das Redo-Protokoll. Angenommen, die Maschine startet nach dem Schreiben des Binärprotokolls abnormal neu. Da kein Redo-Protokoll vorhanden ist, kann die Maschine diesen Datensatz nicht wiederherstellen. Das Binärprotokoll enthält jedoch einen anderen Datensatz. Dann führt der gleiche Grund wie oben zu Dateninkonsistenzen. Wenn die zweiphasige Redo-Log-Commit-Methode angewendet wird, ist die Situation anders. Nach dem Schreiben des Binglogs verhindert das Senden des Redo-Logs das Auftreten der oben genannten Probleme und stellt so die Datenkonsistenz sicher. Die Frage ist also: Gibt es eine Extremsituation? Angenommen, das Redo-Protokoll befindet sich im Pre-Commit-Zustand und das Bing-Protokoll wurde geschrieben. Was passiert, wenn zu diesem Zeitpunkt ein abnormaler Neustart erfolgt? Dies hängt vom Verarbeitungsmechanismus von MySQL ab. Der Verarbeitungsprozess von MySQL ist wie folgt: Stellen Sie fest, ob das Redo-Protokoll vollständig ist. Wenn dies der Fall ist, führen Sie sofort ein Commit durch. Wenn sich das Redo-Protokoll im vorab festgeschriebenen, aber noch nicht festgeschriebenen Zustand befindet, wird die Transaktion zurückgesetzt, wenn das Binärprotokoll abgeschlossen ist. Dadurch wird das Problem der Datenkonsistenz gelöst. 4. Fazit
Dieser Artikel endet hier. Ich hoffe, Sie können den anderen Inhalten auf 123WORDPRESS.COM mehr Aufmerksamkeit schenken! Das könnte Sie auch interessieren:
|
<<: Beispielcode für HTML-Layout links und rechts
>>: Verwendung regulärer Ausdrücke in CSS-Selektoren
Gehen Sie zu https://dev.mysql.com/downloads/mysq...
Inhaltsverzeichnis 1. Einführung in Rechnerfunkti...
In diesem Artikel werden MySQL-Funktionen zum Abf...
Inhaltsverzeichnis 1. Was ist der Nutzen von Prov...
Inhaltsverzeichnis Vorwort 1. Trigger-Übersicht 2...
Ich habe gehört, dass es eine Interviewfrage gibt...
Inhaltsverzeichnis HTTP-Hijacking, DNS-Hijacking ...
Die folgenden beiden Funktionen werden auf die gl...
1. Ändern Sie die Docker-Konfigurationsdatei des ...
Die spezifische Verwendung der Drag & Drop-Zo...
Mit dem obigen Artikel habe ich meine Einführung i...
Der Docker-Daemon verwendet HTTP_PROXY , HTTPS_PR...
Sie können sehen, dass ihre visuellen Effekte sehr...
Im Entwicklungsprozess eines Vue-Projekts konfigu...
Inhaltsverzeichnis 1. Rufen Sie das Bild ab 2. Br...