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

Interpretation des Moduls zum Lastenausgleich mit nginx

Inhaltsverzeichnis Zwei Module zur Verwendung von...

Tipps zur HTML-Formatierung und langen Dateien für das Webdesign

<br />Verwandte Artikel: 9 praktische Vorsch...

Lernen Sie die Vue-Middleware-Pipeline in einem Artikel kennen

Beim Erstellen eines SPA müssen Sie häufig bestim...

JavaScript-Objekte (Details)

Inhaltsverzeichnis JavaScript-Objekte 1. Definiti...

Implementierungsbeispiel für ein JS-natives zweispaltiges Shuttle-Auswahlfeld

Inhaltsverzeichnis Verwendung Strukturzweige Code...

Vue3+TypeScript kapselt Axios und implementiert Anforderungsaufrufe

Auf keinen Fall. Es stellt sich heraus, dass es L...

Bild-Scrolling-Effekt mit CSS3 erstellt

Ergebnisse erzielenImplementierungscode html <...

Verwendung und Verständnis von MySQL-Triggern

Inhaltsverzeichnis 1. Was ist ein Auslöser? 2. Er...

Fabric.js implementiert DIY-Postkartenfunktion

In diesem Artikel wird der spezifische Code von F...

Vollständiges Beispiel einer Vue-Polling-Request-Lösung

Verständnis von Umfragen Tatsächlich liegt der Sc...

Webdesign-Dimensionen und Regeln für die Werbegestaltung auf Webseiten

1. Unter 800 x 600 gibt es keine horizontale Bild...