MySQL-Optimierung: InnoDB-Optimierung

MySQL-Optimierung: InnoDB-Optimierung

Lernpläne werden leicht unterbrochen und es ist schwierig, daran festzuhalten. Vor Kurzem gab es im Unternehmen ein Meeting zur Anpassung der Geschäftsausrichtung und es wurde empfohlen, NodeJS zu erlernen. Ich wusste vorher schon ein wenig über NodeJS, habe mich aber nicht eingehend damit beschäftigt. Die Syntax von Node ist grundsätzlich die gleiche wie die von clientseitigen Js. In den letzten sechs Monaten gab es sehr wenig Entwicklung im Bereich clientseitiger Dinge. Obwohl ich über gute JS-Kenntnisse verfüge, bin ich auf diesem Gebiet noch nicht vertraut. Es scheint, dass Wissen genutzt wird oder verloren geht. Wenn es nicht häufig genutzt wird, wird es bald vergessen. Daher habe ich die relevanten JS-Kenntnisse noch einmal aufgefrischt. Erfahren Sie mehr über den Server und Socket von Node. Der MySQL-Plan wurde auf Eis gelegt. Am Sonntag habe ich gegessen, getrunken und geschlafen. Am Morgen war ich so faul, dass ich es erst am Nachmittag geschafft habe. Lassen Sie uns ohne weitere Umschweife mit der MySQL-Optimierungsreihe fortfahren. Schauen wir uns dieses Mal die Optimierungselemente von InnoDB an.

Der Primärindex von InnoDB ist ein Clusterindex, und Index und Daten teilen sich denselben Tabellenbereich. Bei InnoDB sind die Daten der Index und der Index die Daten. Der größte Unterschied zwischen dem Cache-Mechanismus von InnoDB und MyISAM besteht darin, dass InnoDB nicht nur Indizes, sondern auch Daten zwischenspeichert.

1. InnoDB-Cache-Pool

Der InnoDB-Pufferpool ist der Schlüssel zur Verbesserung der InnoDB-Leistung. Er kann Daten, Indizes und sogar andere Verwaltungsdaten (Metadaten, Sperren auf Zeilenebene) zwischenspeichern. Sie können Show-Variablen wie „innodb%pool%“ verwenden, um zugehörige Parameteroptionen anzuzeigen.

mysql> Variablen wie „innodb%pool%“ anzeigen;
+-------------------------------------+----------------+
| Variablenname | Wert |
+-------------------------------------+----------------+
| innodb_additional_mem_pool_size | 8388608 |
| innodb_buffer_pool_dump_at_shutdown | AUS |
| innodb_buffer_pool_dump_now | AUS |
| innodb_buffer_pool_Dateiname | ib_buffer_pool |
| innodb_buffer_pool_instances | 8 |
| innodb_buffer_pool_load_abort | AUS |
| innodb_buffer_pool_load_at_startup | AUS |
| innodb_buffer_pool_load_now | AUS |
| innodb_buffer_pool_size | 134217728 |
+-------------------------------------+----------------+

innodb_buffer_pool_size

innodb_buffer_pool_size wird verwendet, um die Größe des InnoDB-Pufferpools (InnoDBBufferPool) festzulegen. Der Standardwert ist 128 M. Die Größe des InnoDB-Pufferpools hat einen großen Einfluss auf die Gesamtleistung von InnoDB. Wenn der aktuelle MySQL-Server dem MySQL-Dienst gewidmet ist, können Sie die Größe dieses Parameters so weit wie möglich erhöhen.

innodb_buffer_pool_instance

Der Standardwert von innodb_buffer_pool_instance ist 1, was bedeutet, dass der InnoDB-Pufferpool in einen Bereich unterteilt ist. Eine entsprechende Erhöhung dieses Parameterwerts kann die Parallelitätsleistung von InnoDB verbessern.

innodb_additional_mem_pool_size

Gibt die Cachegröße an, die von InnoDB zum Speichern des Datenwörterbuchs und anderer interner Daten verwendet wird. Der Standardwert ist 2 M. Je mehr InnoDB-Tabellen vorhanden sind, desto mehr sollte dieser Parameter erhöht werden.

2. Interne Struktur des InnoDB-Cache-Pools

InnoDB verwaltet einen Pufferpool im Speicher zum Zwischenspeichern von Daten und Indizes. Der Cache-Pool kann als sehr lange verknüpfte Liste betrachtet werden. Die verknüpfte Liste ist in zwei Unterlisten unterteilt. Eine Unterliste speichert alte Seitendaten, also Datenseiten, auf die lange Zeit nicht zugegriffen wurde. Die andere Unterliste speichert neue Seitendaten, also die zuletzt aufgerufenen Datenseiten. Standardmäßig machen alte Seiten 37 % der gesamten Größe der verknüpften Liste aus, was über den Parameter innodb_old_blocks_pct angezeigt werden kann.

mysql> Variablen wie „innodb_old_blocks%“ anzeigen;
+------------------------+----------+
| Variablenname | Wert |
+------------------------+----------+
| innodb_old_blocks_pct | 37 |
| innodb_old_blocks_time | 1000 |
+------------------------+----------+

Der Schnittpunkt der alten und der neuen Seite wird als Mittelpunkt bezeichnet.

Wenn ein Benutzer auf Daten zugreift, sucht InnoDB zuerst im InnoDB-Cache nach den Daten. Wenn sich im Cache-Pool keine Daten befinden, fügt InnoDB die Daten auf der Festplatte in den InnoDB-Cache-Pool ein. Wenn der Cache-Pool voll ist, wird der LRU-Algorithmus verwendet, um abgelaufene alte Daten zu löschen.

3. Heizen Sie den InnoDB-Cache-Pool vor.

Nachdem der MySQL-Server eine Zeit lang gestartet wurde, legt InnoDB häufig aufgerufene Daten (Geschäftsdaten, Verwaltungsdaten) in den InnoDB-Cache. Das heißt, der InnoDB-Cache-Pool speichert Daten, auf die häufig zugegriffen werden muss (sogenannte Hot Data). Wenn die Größe des InnoDB-Cache-Pools Dutzende oder Hunderte von GB beträgt und Sie MySQL neu starten, wie laden Sie dann die Hot Data im vorherigen InnoDB-Cache-Pool in den InnoDB-Cache-Pool?

Wenn der InnoDB-Cache-Pool ausschließlich von InnoDB selbst vorgewärmt wird, dauert dies sehr lange. Für ein System mit viel Betrieb ist eine lange Ausfallzeit ein schwerwiegender Produktionsunfall und kann nicht toleriert werden. Glücklicherweise unterstützt MySQL Version 5.6 das Speichern von Hot Data auf der Festplatte beim Herunterfahren des Dienstes. Wenn MySQL neu gestartet wird, werden die Hot Data auf der Festplatte zuerst in den InnoDB-Cache geladen. Dies kann die Aufwärmzeit verkürzen und die Effizienz verbessern, wenn das Geschäft ausgelastet ist und viele parallele Vorgänge ausgeführt werden.

mysql> Variablen wie „%innodb%pool%“ anzeigen;
+-------------------------------------+----------------+
| Variablenname | Wert |
+-------------------------------------+----------------+
| innodb_additional_mem_pool_size | 8388608 |
| innodb_buffer_pool_dump_at_shutdown | AUS |
| innodb_buffer_pool_dump_now | AUS |
| innodb_buffer_pool_Dateiname | ib_buffer_pool |
| innodb_buffer_pool_instances | 8 |
| innodb_buffer_pool_load_abort | AUS |
| innodb_buffer_pool_load_at_startup | AUS |
| innodb_buffer_pool_load_now | AUS |
| innodb_buffer_pool_size | 134217728 |
+-------------------------------------+----------------+

innodb_buffer_pool_dump_at_shutdown

Der Standardwert ist deaktiviert. Wenn der Parameter aktiviert und der MySQL-Dienst gestoppt wird, werden die Hot Data im InnoDB-Cache auf der Festplatte gespeichert.

innodb_buffer_pool_load_at_startup

Die Standardeinstellung ist deaktiviert. Wenn dieser Parameter aktiviert ist, lädt MySQL beim Starten des MySQL-Dienstes die Hot Data auf der lokalen Festplatte in den InnoDB-Cache-Pool.

innodb_buffer_pool_dump_now

Dieser Parameter ist standardmäßig deaktiviert. Wenn dieser Parameter aktiviert ist, werden die Hot Data im InnoDB-Cache-Pool beim Stoppen des MySQL-Dienstes manuell auf der lokalen Festplatte gespeichert.

innodb_buffer_pool_load_now

Die Standardeinstellung ist deaktiviert. Wenn dieser Parameter aktiviert ist, werden beim Start des MySQL-Dienstes die Daten auf der lokalen Festplatte manuell in den InnoDB-Cache-Pool geladen.

innodb_buffer_pool_dateiname

Wenn die InnoDB-Vorwärmfunktion aktiviert ist und der MySQL-Dienst gestoppt wird, speichert MySQL die Hot Data im InnoDB-Cachepool im Stammverzeichnis der Datenbank. Der Standarddateiname ist der Wert dieses Parameters.

Nachdem Sie den InnoDB-Cache aktiviert haben, können Sie mit dem folgenden Befehl die Statusinformationen zum aktuellen Vorheizen des InnoDB-Cache-Pools anzeigen:

Status wie „innodb_buffer%“ anzeigen;
+-----------------------------------------+-------------+
| Variablenname | Wert |
+-----------------------------------------+-------------+
| Innodb_buffer_pool_dump_status | nicht gestartet |
| Innodb_buffer_pool_load_status | nicht gestartet |
| Innodb_buffer_pool_pages_data | 218 |
| Innodb_buffer_pool_bytes_data | 3571712 |
| Innodb_buffer_pool_pages_dirty | 0 |
| Innodb_buffer_pool_bytes_dirty | 0 |
| Innodb_buffer_pool_pages_flushed | 1 |
| Innodb_buffer_pool_pages_free | 7973 |
| Innodb_buffer_pool_pages_misc | 0 |
| Innodb_buffer_pool_pages_total | 8191 |
| Innodb_buffer_pool_read_ahead_rnd | 0 |
| Innodb_buffer_pool_read_ahead | 0 |
| Innodb_buffer_pool_read_ahead_ausgewiesen | 0 |
| Innodb_buffer_pool_read_requests | 1497 |
| Innodb_buffer_pool_reads | 219 |
| Innodb_buffer_pool_wait_free | 0 |
| Innodb_buffer_pool_write_requests | 1 |
+-----------------------------------------+-------------+

Das Englisch hier ist relativ einfach, deshalb werde ich es nicht erklären.

4. InnoDB Echtzeitüberwachung

mysql> show engine innodb status\G

Das könnte Sie auch interessieren:
  • Konfiguration und Optimierung der Mysql5.5 InnoDB-Speicher-Engine
  • So ändern Sie die Innodb-Datenseitengröße, um MySQL zu optimieren
  • Austausch über Probleme bei der Zähloptimierung in InnoDB in MySQL
  • Detaillierte Erläuterung des chinesischen Konfigurationsschemas my.ini zur MySql-Optimierung: InnoDB, 4 GB Speicher und mehrere Abfragen
  • MySQL InnoDB MRR-Optimierungshandbuch

<<:  Lösung für die Koexistenz mehrerer PHP-Versionen unter Linux-Systemen (super einfach)

>>:  Detaillierte Erklärung, wann Javascript-Skripte ausgeführt werden

Artikel empfehlen

Oberflächliches Webdesign

<br />Ich war schon immer der Meinung, dass ...

Vue-CLI - Aufzeichnung der Schritte zur mehrseitigen Verzeichnisverpackung

Seitenverzeichnisstruktur Beachten Sie, dass Sie ...

Zusammenfassung der XHTML-Anwendung im Webdesign-Studium

<br />Im Allgemeinen ist die Dateiorganisati...

So verwenden Sie Indizes zur Optimierung von MySQL ORDER BY-Anweisungen

Tabelle erstellen und Index erstellen Tabelle tbl...

Zusammenfassung aller HTML-Interviewfragen

1. Die Rolle des Doctypes, der Unterschied zwisch...

Grundlegendes zum MySQL-Abfrageoptimierungsprozess

Inhaltsverzeichnis Parser und Präprozessoren Abfr...

Beispielcode zum Festlegen des Beschriftungsstils mithilfe des CSS-Selektors

CSS-Selektoren Durch Festlegen des Stils für das ...

Beispielcode zum Erzielen eines Aushöhlungseffekts mit reinem CSS

Ich habe kürzlich den Aushöhlungseffekt untersuch...

Zusammenfassung der React-Grundlagen

Inhaltsverzeichnis Vorwort Start React-Lebenszykl...

Analyse des MySQL-Beispiels DTID Master-Slave-Prinzip

Inhaltsverzeichnis 1. Grundkonzepte von GTID 2. G...

Verstehen Sie das CSS3-Rasterlayout in 10 Minuten

Grundlegende Einführung Im vorherigen Artikel hab...

Implementierung des Wasserfall-Layouts im Uni-App-Projekt

GitHub-Adresse, Sie können es mit einem Stern mar...

Praktisches Beispiel einer virtuellen Vue-Liste

Inhaltsverzeichnis Vorwort Design erreichen Zusam...

Mysql-Operation zum Abrufen von Tabellenkommentarfeldern

Ich werde nicht viel Unsinn erzählen, schauen wir...