Eine kurze Analyse der LRU-verknüpften Liste von MySQL

Eine kurze Analyse der LRU-verknüpften Liste von MySQL

1. Beschreiben Sie kurz die traditionelle LRU-verknüpfte Liste

LRU: Am wenigsten verwendet

Ich glaube, jeder ist mit der LRU-verknüpften Liste vertraut. Es handelt sich um eine grundlegende Datenstruktur. Ich glaube, Sie wurden während eines Vorstellungsgesprächs gefragt, was eine LRU-verknüpfte Liste ist, oder sogar gebeten, eine LRU-verknüpfte Liste von Hand zu schreiben.

Wenn Sie den vorherigen Artikel gelesen haben: Sind Sie zwischen Abfrage-Cache und BufferPool verwechselt? Lass uns darüber reden!

Sie kennen sicherlich den Buffer Pool-Mechanismus von MySQL und wissen, dass die Datenseite die kleinste Einheit der MySQL-Datenorganisation ist. Und Sie wissen auch, dass Datenseiten mithilfe der LRU-Datenstruktur mit verknüpften Listen gemeinsam im Pufferpool organisiert sind.

Tatsächlich ist die sogenannte LRU-verknüpfte Liste im Wesentlichen eine bidirektionale zirkuläre verknüpfte Liste, wie unten gezeigt:

Als Nächstes beschreiben wir den Mechanismus zum Laden von MySQL-Daten durch Kombination der LRU-verknüpften Liste und des Datenseitenmechanismus:

Wir nennen die von der Festplatte gelesene Datenseite eine junge Seite, und die junge Seite wird direkt am Anfang der verknüpften Liste platziert. Wenn eine Datenseite verwendet wird, die bereits in der LRU-verknüpften Liste vorhanden ist, wird die Datenseite ebenfalls als junge Seite betrachtet und an den Anfang der verknüpften Liste verschoben. Auf diese Weise sind die Daten am Ende der verknüpften Liste die am wenigsten verwendeten Daten. Wenn die Kapazität des Pufferpools nicht ausreicht oder der Hintergrundthread die Datenseite aktiv aktualisiert, wird zuerst die Datenseite am Ende der verknüpften Liste aktualisiert.

2. Nachteile der herkömmlichen LRU-Linkliste

Sie haben sicher schon einmal vom Prinzip der räumlichen Lokalität auf Betriebssystemebene gehört:

Räumliche Lokalität: Dies bedeutet, dass beim Lesen eines Datenelements wahrscheinlich auch die in den umgebenden Speicheradressen gespeicherten Daten gelesen werden. Daher unterstützt Sie das Betriebssystem beim Vorablesen eines Teils der Daten.

MySQL verfügt auch über einen Vorlesemechanismus!

  1. Wenn der Pufferpool 13 aufeinanderfolgende Datenseiten in einer Zone speichert und Sie aus dieser Zone lesen, lädt MySQL alle Datenseiten in dieser Zone in die LRU-verknüpfte Liste im Pufferpool. (Und dann verwenden Sie diese vorab gelesenen Datenseiten möglicherweise überhaupt nicht)
  2. Wenn Sie sequenziell auf mehr als innndb_read_ahead_threshold=56 Datenseiten in einer Zone zugreifen, hilft Ihnen MySQL automatisch dabei, die Datenseiten in der nächsten angrenzenden Zone in die LRU-verknüpfte Liste zu lesen. (Dieser Mechanismus ist standardmäßig deaktiviert)
  3. Wenn Sie „select * from xxx;“ ausführen und die Tabelle viele Datenseiten enthält, verdrängen diese Datenseiten nacheinander die häufig verwendeten Cache-Seiten im Pufferpool, und in der LRU-Verknüpfungsliste verbleiben möglicherweise nur die Daten, die Sie nicht häufig verwenden.

Aus dem Obigen ist ersichtlich, dass der Vorteil des sogenannten Vorlesemechanismus eigentlich der ursprünglichen Designabsicht von LRU zuwiderläuft, die am wenigsten kürzlich verwendeten Datenseiten auf die Festplatte zu schreiben.

3. MySQL LRU-verknüpfte Liste

Als Nächstes wollen wir uns ansehen, wie der Pufferpool von MySQL die LRU-verknüpfte Liste anpasst und welche Probleme InnoDB mithilfe von LRU lösen konnte.

Wenn das Unternehmen eine große Menge an CRUD ausführt, müssen Datenseiten kontinuierlich in die LRU-verknüpfte Liste im Pufferpool gelesen werden.

Die Länge der LRU-verknüpften Liste von MySQL ist wie folgt.

Die LRU-verknüpfte Liste ist von MidPoint in zwei Teile unterteilt: Neue Unterliste und Alte Unterliste.

Davon entfallen etwa 5/8 auf die neue Unterliste und 3/8 auf die alte Unterliste.

In der neuen Unterliste werden neue Seiten gespeichert, in der alten Unterliste alte Seiten.

Wir können den Standardwert von MidPoint wie folgt anzeigen.

Benutzer können diesen Parameter entsprechend ihrer Geschäftsdynamik anpassen!

Dies ist eigentlich eine Designidee zur Trennung heißer und kalter Daten. Es bietet große Vorteile gegenüber der herkömmlichen LRU-verknüpften Liste.

4. Vorteile der angepassten MySQL-LRU-verknüpften Liste <br /> Bei der MySQL-LRU-verknüpften Liste wird die verknüpfte Liste durch MidPoint in zwei Teile aufgeteilt.

Die neu von der Festplatte gelesenen Daten werden an den Anfang der alten Unterliste gestellt. Auf diese Weise werden die häufig aufgerufenen Datenseiten in der neuen Unterliste nicht auf die Festplatte geschrieben, selbst wenn Sie tatsächlich „select * from t;“ verwenden.

Unter normalen Umständen wird beim Zugriff auf eine Cache-Seite in der alten Unterliste die Cache-Seite in die neue Unterliste befördert und wird zu Hot Data.

Wenn Sie jedoch mit „select * from t“ eine große Datenmenge in die alte Unterliste laden und dann in weniger als 1 Sekunde erneut darauf zugreifen, werden die während dieses Zeitraums aufgerufenen zwischengespeicherten Seiten nicht zu Hot Data heraufgestuft. Diese 1 Sekunde wird durch den Parameter innodb_old_blocks_time gesteuert.

Darüber hinaus ist auch New SubList optimiert. Wenn Sie auf das erste Viertel der Daten in New SubList zugreifen, werden diese nicht an den Anfang der LRU-verknüpften Liste verschoben.

Das Obige ist eine kurze Analyse der Details der LRU-verknüpften Liste von MySQL. Weitere Informationen zur LRU-verknüpften Liste von MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Analyse der Prinzipien von MySQL Dirty Page Flush und Shrinking Table Space
  • Empfehlen Sie mehrere MySQL-bezogene Tools
  • MySQL-Abfrage-Cache und Pufferpool
  • Eine kurze Analyse der MySQL-Kardinalitätsstatistiken
  • MySQL-Methode zum rekursiven Suchen nach allen untergeordneten Knoten eines Menüknotens
  • Was ist ein MySQL-Tablespace?
  • So finden Sie langsame MySQL-Abfragen
  • MySQL Flush-List und Flushing-Mechanismus für Dirty Pages

<<:  Die HTML-Eingabedateisteuerung begrenzt den Typ der hochgeladenen Dateien

>>:  Detaillierte Erläuterung der Idee zum Einrichten einer Abfangfunktion für die Anmeldeüberprüfung in Vue

Artikel empfehlen

Installieren Sie MySQL (einschließlich utf8) mit Docker unter Windows/Mac

Inhaltsverzeichnis 1. Docker-Installation auf dem...

Bereinigungsmethode für das Docker-Verzeichnis /var/lib/docker/aufs/mnt

Der Dienst des Unternehmens verwendet Docker und ...

So implementieren Sie verschiebbare Komponenten in Vue

In diesem Artikel erfahren Sie, wie Sie ziehbare ...

Lösung für FEHLER 1054 (42S22) beim Ändern des Passworts in MySQL 5.7

Ich habe MySQL 5.7 neu installiert. Beim Anmelden...

Detailliertes Verständnis des Lebenszyklusvergleichs zwischen Vue2 und Vue3

Inhaltsverzeichnis Zyklusvergleich Verwendung Zus...

Tipps zum reflektierenden Lernen von JavaScript

Inhaltsverzeichnis 1. Einleitung 2. Schnittstelle...

Zusammenfassung des Speicherorts und Tipps für Docker-Konfigurationscontainer

Tipps zur Verwendung von Docker 1. Bereinigen Sie...

Beispielanalyse des Seitenaufteilungsprinzips des MySQL-Clusterindex

Dieser Artikel veranschaulicht anhand eines Beisp...