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

Installation und Verwendung der MySQL MyCat-Middleware

1. Was ist mycat Ein vollständig Open Source-Groß...

Drei gängige Möglichkeiten zum Einbetten von CSS in HTML-Dokumente

Die folgenden drei Methoden werden häufig verwende...

Detaillierte Erklärung zur Verwendung von Titel-Tags und Absatz-Tags in XHTML

XHTML-Überschriftenübersicht Wenn wir Word-Dokume...

Natives JS zum Erzielen von Laufschrifteffekten

Heute werde ich Ihnen einen Laufschrifteffekt zei...

Verwenden von Schleifen in awk

Lernen wir verschiedene Arten von Schleifen kenne...

So fügen Sie einer Tabelle in SQL Felder und Kommentare hinzu

1. Felder hinzufügen: Tabelle Tabellennamen änder...

Vergleich zwischen Node.js und Deno

Inhaltsverzeichnis Vorwort Was ist Deno? Vergleic...

Detaillierte Installation und Verwendung von SSH in der Ubuntu-Umgebung

SSH steht für Secure Shell, ein sicheres Übertrag...

Erfahren Sie schnell, wie Sie mit der Vuex-Statusverwaltung in Vue3.0 beginnen

Vuex ist ein speziell für Vue.js-Anwendungen entw...

Tutorial zur HTML-Tabellenauszeichnung (10): Zell-Padding-Attribut CELLPADDING

Unter Zellenabstand versteht man den Abstand zwis...

CSS zum Erzielen des Effekts einer rotierenden Flip-Card-Animation

Die CSS-Animation des rotierenden Flip-Effekts, d...

Ein- und Ausblenden von HTML-Elementen durch Anzeige oder Sichtbarkeit

Manchmal müssen wir steuern, ob HTML-Elemente auf ...

So installieren Sie nginx unter Linux

Nginx wurde in der Programmiersprache C entwickel...

Vue implementiert grafischen Überprüfungscode

In diesem Artikelbeispiel wird der spezifische Co...