Empfohlen (kostenlos): SQL
Zero, Datenbanktreiber
- MySQL-Treiber hilft uns, eine Verbindung zur Datenbank auf der untersten Ebene herzustellen. Erst nachdem die Verbindung hergestellt wurde, können wir die folgende Interaktion.
1. Datenbankverbindungspool
- Zu den Datenbankverbindungspools gehören Druid, C3P0, DBCP
- Die Verwendung von Verbindungspools erspart den Aufwand für das ständige Erstellen und Zerstören von Threads erheblich. Dies ist die berühmte „Pooling“-Idee Unabhängig davon, ob es sich um einen Thread-Pool oder einen HTTP-Verbindungspool handelt, können Sie dessen Vorhandensein sehen SQL-Schnittstelle zur Verarbeitung.
3. Der Abfrageparser
- analysiert die von der SQL-Schnittstelle übergebene SQL-Anweisung und übersetzt sie in eine Sprache, die MySQL verstehen kann.
4. MySQL-Abfrageoptimierer
- MySQL wählt den entsprechenden Index basierend auf dem
Minimalkostenprinzip
Kosten = IO-Kosten + CPU-Kosten
IO-Kosten
: das heißt, das Laden von Daten von der Festplatte Die Speicherkosten betragen standardmäßig 1. MySQL liest Daten in Form von Seiten. Das heißt, wenn bestimmte Daten verwendet werden, werden diese Daten nicht nur gelesen Lesen Sie auch in den Speicher neben den Daten. Dies ist das berühmte Prinzip der Programmlokalität, sodass MySQL jedes Mal eine ganze Seite liest und die Kosten für eine Seite 1 betragen. Daher hängen die IO-Kosten hauptsächlich mit der Größe der Seite zusammen.
-
CPU-Kosten: Nach dem Einlesen der Daten in den Speicher muss auch festgestellt werden, ob die Daten die Bedingungen erfüllen, sowie die Kosten für Sortierung und andere CPU-Vorgänge Offensichtlich hängt es von der Anzahl der Zeilen ab. Standardmäßig betragen die Kosten für die Erkennung von Datensätzen 0,2.
- Der MySQL-Optimierer berechnet den Index mit den geringsten Kosten von „IO-Kosten + CPU“ für die Ausführung
-
5. Speicher-Engine
-
Der Abfrageoptimierer ruft die Speicher-Engine-Schnittstelle auf, um SQL auszuführen, was bedeutet, dass Es ist wirklich
Die Aktion der SQL-Ausführung ist in der Speicher-Engine abgeschlossen- .
Daten werden im Speicher oder auf der Festplatte gespeichert
Jedes Mal, wenn SQL ausgeführt wird, werden die Daten in den Speicher geladen: Pufferpool
-
6. Executor
-
- Der Executor ruft schließlich die Speicher-Engine-Schnittstelle gemäß einer Reihe von Ausführungsplänen auf, um die Ausführung von SQL abzuschließen. 7. Pufferpool: Pufferpool (Pufferpool) ist eine sehr wichtige Speicherstruktur in der Die InnoDB-Speicher-Engine fungiert als Cache. Pufferpool bedeutet, dass wir die Abfrageergebnisse im Pufferpool speichern, sodass später Anfragen vorliegen Wenn nicht, werden sie auf der Festplatte gesucht und dann im Pufferpool abgelegt. Die im Pufferpool verwendeten Daten werden gesperrt.
8. Drei Protokolldateien
1. Protokolldatei rückgängig machen
: Das Erscheinungsbild der Daten aufzeichnen, bevor sie geändert werden
Funktion: Protokolldateien rückgängig machen, um das Transaktions-Rollback abzuschließen
-
- 2. Redo-Protokolldatei
: Zeichnet die geänderten Daten auf-
Redo zeichnet den Wert nach der Datenänderung auf. Unabhängig davon, ob die Transaktion übermittelt wird oder nicht, wird sie aufgezeichnet
Um die Effizienz zu verbessern, setzt MySQL alles Diese Vorgänge werden zuerst im Speicher gespeichert. Zum Abschluss werden die aktualisierten Daten im Redo-Log-Puffer aufgezeichnet und dann bei einer bestimmten Gelegenheit auf der Festplatte gespeichert.
3. Bin-Protokolldatei: Zeichnen Sie den gesamten Vorgang auf
Eigenschaften: Redo-Log log kann übergeben werden. Der Konfigurationsparameter max_bin log_size legt die Größe jeder bin log -Datei fest (es wird jedoch im Allgemeinen nicht empfohlen, sie zu ändern). |
|
Implementierungsmethode |
redo log
wird von der InnoDB
-Engine-Schicht implementiert (d. h. sie ist einzigartig für den Innodb-Speicher)
bin log
wird von der MySQL-Ebene implementiert. Alle Engines können das Protokoll bin log
verwenden. Die Schleife kehrt zum Anfang zurück und schreibt das Protokoll.
bin-Protokoll wird durch Anhängen aufgezeichnet. Wenn die Dateigröße größer als der angegebene Wert ist, werden nachfolgende Protokolle in neuen Dateien aufgezeichnet. |
|
Nutzungsszenarien. max_bin log_size 设置每个bin log 文件的大小(但是一般不建议修改)。 |
实现方式 |
redo log 是InnoDB 引擎层实现的(也就是说是 Innodb 存储引起过独有的) |
bin log 是 MySQL 层实现的,所有引擎都可以使用 bin log 日志 |
记录方式 |
redo log 采用循环写的方式记录,当写到结尾时,会回到开头循环写日志。 |
bin log 通过追加的方式记录,当文件大小大于给定值后,后续的日志会记录到新的文件上 |
使用场景 |
redo log 适用于崩溃恢复(crash-safe)(这一点其实非常类似与 Redis 的持久化特征) |
bin log |
redo log
ist für die Wiederherstellung nach einem Absturz geeignet (absturzsicher) (Dies ist tatsächlich der Persistenzfunktion von Redis sehr ähnlich)
bin log
eignet sich für die Master-Slave-Replikation und Datenwiederherstellung.
🎜🎜bin log zeichnet den gesamten Vorgang auf Datensatz (Dies ist sehr wichtig für die Master-Slave-Replikation)🎜
Das obige ist der detaillierte Inhalt vonAusführung einer SQL-Anweisung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!