1. Überprüfung Der Pufferpool wird nach dem Start von MySQL initialisiert. Der Pufferpool initialisiert außerdem N leere Cache-Seiten und ihre Beschreibungsdaten werden in einer LRU-verknüpften Liste und einer doppelt verknüpften FreeList-Liste organisiert. Wenn Sie zu diesem Zeitpunkt eine Datenseite von der Festplatte lesen, suchen Sie zuerst die Beschreibungsinformationen einer freien Cache-Seite in der freien Liste und laden dann die gelesene Datenseite in die Cache-Seite. Gleichzeitig werden die Beschreibungsinformationen der Cache-Seite aus der freien Liste entfernt. Darüber hinaus wird der Beschreibungsinformationsblock auch in der LRU-verknüpften Liste verwaltet. Nachdem die Datenseite in den Pufferpool geladen wurde, können Sie Änderungen daran vornehmen. 2. Liste leeren Um die Antwort an den Client zu beschleunigen, ändert MySQL die Daten im Pufferpool. Sobald Sie jedoch die Cache-Seite in der LRU-verknüpften Liste ändern, stimmen die Daten auf der Seite nicht mehr mit den Datenseiteninformationen auf der Festplatte überein! Diese Art von Datenseite wird im Allgemeinen als „Dirty Page“ bezeichnet. Um die endgültige Konsistenz der Daten sicherzustellen, muss MySQL fehlerhafte Seiten zurück auf die Festplatte schreiben! Die Frage ist jedoch: Welche Datenseiten müssen wieder auf die Festplatte geschrieben werden? Dies bringt uns zur Flush List. Die Flush-Liste ist der Free-Liste sehr ähnlich. Bei beiden handelt es sich um bidirektional verknüpfte Listen, die nach den Datenbeschreibungsinformationen im Pufferpool organisiert sind. Sobald Sie eine Änderung an der Pufferseite im Speicher vornehmen, wird der der Pufferseite entsprechende Beschreibungsinformationsblock zur Flush-Liste hinzugefügt. Auf diese Weise können wir, wenn im Pufferpool nicht genügend Datenseiten vorhanden sind, dem Aktualisieren der fehlerhaften Datenseiten in der Flush-Liste auf der Festplatte Priorität einräumen. Wenn Sie die vorherigen Artikel gelesen haben, kennen Sie sicherlich LRUList, FreeList, FlushList, Buffer Pool, Dirty Pages und Dirty Data. Lasst uns den Sieg anstreben! Werfen wir einen Blick auf den Dirty Page Drop-Mechanismus 3. Was ist eine Dirty Page? Was sind schmutzige Daten? Was sind schmutzige Seiten? Im Einführungsartikel „Flush List“ habe ich erwähnt, dass schmutzige Seiten Cache-Seiten sind, die in der LRU-verknüpften Liste geändert wurden. Sie stimmen nicht mit den Datenseiten auf der Festplatte überein und fehlerhafte Seiten müssen wieder auf die Festplatte zurückgeschrieben werden. Was sind schmutzige Daten? Dieses Problem führt tatsächlich zum Konzept des Dirty Read. Beispiel: Transaktion A liest nicht festgeschriebene Daten aus Transaktion B. Diese Daten werden als „Dirty Data“ bezeichnet. 4. Wann sollten verschmutzte Seiten wieder auf die Festplatte geschrieben werden? Wenn der Pufferpool nicht ausreicht, verschiebt MySQL gemäß dem LRU-Mechanismus die Cache-Seiten des alten Unterlistenteils aus der LRU-verknüpften Liste. Wenn die Beschreibungsinformationen der entfernten Cache-Seite in der Flush-Liste enthalten sind, muss MySQL sie wieder auf die Festplatte zurücksetzen. Es gibt viele Möglichkeiten für die InnoDB-Speicher-Engine, schmutzige Seiten zurück auf die Festplatte zu schreiben. Sie können sich das als erweitertes Wissen ansehen. 1. Wenn die MySQL-Datenbank geschlossen wird, werden alle fehlerhaften Datenseiten zurück auf die Festplatte geschrieben. Diese Funktion wird durch den Parameter innodb_fast_shutdown=0 gesteuert. Standardmäßig schreibt InnoDB vor dem Herunterfahren verschmutzte Seiten zurück auf die Festplatte und bereinigt das Undo-Protokoll. 2. Es gibt einen Hintergrund-Thread (Master-Thread), der jede Sekunde oder alle zehn Sekunden einen bestimmten Anteil der Seiten im Pufferpool asynchron auf die Festplatte zurückaktualisiert. 3. In MySQL 5.7 wird der Pufferpool durch Seitenbereinigungs-Threads aktualisiert. Wir können die Anzahl der Seitenbereinigungs-Threads über den Parameter innodb_page_cleaners steuern. Wenn Sie diesen Wert jedoch so einstellen, dass er größer als die Anzahl der Pufferpools ist, setzt MySQL die Anzahl der innodb_page_cleaners automatisch auf die Anzahl der innodb_buffer_pool_instances. 5. Wenn das Redo-Protokoll nicht verfügbar ist, werden die schmutzigen Seiten in der Liste der schmutzigen Seiten zwangsweise wieder auf die Festplatte aktualisiert. Dieser Mechanismus wird zusätzlich durch einen Hintergrund-Thread vervollständigt. 5. Weitere Wissenspunkte zum schmutzigen Seiten-Refresh Angrenzende Datenseiten aktualisieren: Dies bedeutet, dass MySQL beim Aktualisieren einer fehlerhaften Seite zurück auf die Festplatte auch die an die fehlerhafte Seite angrenzenden fehlerhaften Seiten auf die gleiche Weise aktualisiert. Dieser Vorgang kann durch den Parameter innodb_flush_neighbors gesteuert werden.
Wie wählen Sie also aus, auf welchen Status es eingestellt werden soll? Sie können dies anhand des Speichertyps der Maschine entscheiden, auf der sich die MySQL-Instanz befindet. Wenn der Speicher eine Festplatte ist, wird empfohlen, ihn einzuschalten, da die Festplattenaktualisierungsrate der Festplatte niedrig ist. Durch das Einschalten dieses Parameters können E/A-Vorgänge effektiv reduziert werden. Wenn hingegen SSD-Speicher verwendet wird, weist dieser die Eigenschaft einer hohen Festplatten-E/A auf. Daher wird empfohlen, diesen Parameter zu deaktivieren. Oben sind die Details zu MySQL Flush-List und Dirty Page Disk Mechanismus aufgeführt. Weitere Informationen zu MySQL Flush-List und Dirty Page Disk Mechanismus finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Der Unterschied zwischen HTML-Iframe und Frameset_PowerNode Java Academy
>>: Document Object Model (DOM) in JavaScript
Inhaltsverzeichnis Webkomponenten benutzerdefinie...
Primärschlüssel: Schlagwort: Primärschlüssel Funk...
Um eine hohe Verfügbarkeit des Netzwerks zu gewäh...
CSS-Schreibreihenfolge 1. Positionsattribute (Pos...
1. Gehen Sie zur offiziellen Website, um das Inst...
Ich habe schon immer Graustufenbilder bevorzugt, d...
Vor etwa einem Jahr habe ich einen Artikel geschr...
In diesem Artikel wird der spezifische JavaScript...
Win10 installiert die dekomprimierte Version von ...
Programme in Docker-Containern müssen häufig auf ...
Ich wollte schon immer etwas über Caching lernen....
Inhaltsverzeichnis 1. MySQL aus einer Makroperspe...
Das <a>-Tag wird hauptsächlich verwendet, u...
1 MySQL5.6 1.1 Verwandte Parameter MySQL 5.6 fügt...
Wenn MySQL zu viel CPU beansprucht, wo sollten wi...