So verbessern Sie die Leistung von MySQL-Servern mit der richtigen Optimierung

5. Einrichten des Arbeitsspeichers für das Betriebssystem

Berechnung des für das Betriebssystem erforderlichen Arbeitsspeichers

Bevor MySQL Arbeitsspeicher zugewiesen wird, muss sichergestellt werden, dass das Betriebssystem (OS) über genügend Arbeitsspeicher verfügt, um seine grundlegenden Aufgaben auszuführen. Wenn das Betriebssystem nicht über genügend Arbeitsspeicher verfügt, kann dies zu ernsthaften Leistungsproblemen führen, einschließlich der Auslagerung von Arbeitsspeicher auf die Festplatte, was die MySQL-Leistung drastisch verlangsamen kann.

Berücksichtigen Sie bei der Berechnung des für das Betriebssystem erforderlichen Arbeitsspeichers die folgenden Faktoren:

Basisspeicher des Betriebssystems:

Das Betriebssystem benötigt eine grundlegende Menge an Arbeitsspeicher, um Kernprozesse und -dienste auszuführen. Auf Linux-Systemen liegt diese je nach Distribution und Konfiguration in der Regel zwischen 200 MB und 1 GB.

Zusätzliche Prozesse und Dienstleistungen:

Wenn auf dem Server zusätzliche Dienste wie Webserver (Apache/Nginx), Anwendungsserver oder Überwachungsdienste ausgeführt werden, sollte ihnen zusätzlicher Arbeitsspeicher zugewiesen werden.

Betriebssystempuffer und Cache:

Betriebssysteme verwenden Puffer und Caches, um die E/A-Leistung zu verbessern. Linux verwendet beispielsweise Datei-Caching, um Daten zu speichern, auf die häufig zugegriffen wird. Dies erfordert ausreichend zusätzlichen Speicher.

Im Allgemeinen ist es eine gute Faustregel, etwa 20-25 % des gesamten physischen Speichers für das Betriebssystem und andere Dienste zu belassen. Auf einem Server mit 16 GB RAM gilt beispielsweise Folgendes:

Memory for OS =  0.20 × 16GB     3.2GB

Vermeiden des Austauschs von virtuellem Speicher auf Festplatte

Swapping ist der Prozess, bei dem Daten aus dem physischen Speicher auf die Festplatte verschoben werden, wenn der physische Speicher voll ist. Dies kann sich sehr nachteilig auf die Leistung von MySQL auswirken, da der Festplattenzugriff viel langsamer ist als der Speicherzugriff. Um ein Tauschen zu vermeiden, können die folgenden Schritte unternommen werden:

Anpassen der Swappiness:

Auf Linux-Systemen bestimmt der swappiness-Parameter, wie aggressiv der Kernel Swaps verwendet. Der Swappiness-Wert kann angepasst werden, um den Einsatz von Swaps zu reduzieren. Niedrigere Werte (z. B. 10) verringern die Tendenz des Systems, Swaps zu verwenden:

sudo sysctl vm.swappiness=10

Um diese Änderungen dauerhaft zu machen, fügen Sie sie in /etc/sysctl.conf hinzu:

vm.swappiness=10

Überwachung der Speicherauslastung:

Verwenden Sie Überwachungstools, um die Speicherauslastung und die Auslagerungen des Systems im Auge zu behalten. Tools wie htop, free oder Grafiküberwachung wie Grafana können helfen, die Speicherauslastung in Echtzeit zu überwachen.

Kluge Speicherzuweisung für MySQL:

Stellen Sie sicher, dass die MySQL-Konfiguration nicht den gesamten physischen Speicher verwendet. Lassen Sie genügend Arbeitsspeicher für das Betriebssystem und andere Dienste. Wenn Sie beispielsweise über 16 GB RAM verfügen und berechnet haben, dass das Betriebssystem etwa 3,2 GB benötigt, weisen Sie etwa 12 bis 13 GB für MySQL zu.

Optimierung der MySQL-Speichernutzung:

Passen Sie, wie bereits erläutert, MySQL-Speicherparameter wie innodb_buffer_pool_size, key_buffer_size und query_cache_size an, um sicherzustellen, dass die gesamte MySQL-Speicherauslastung den verfügbaren Speicher nicht überschreitet.

6. Festlegen des Speichers für den Cache

Cache ist eine wichtige Komponente in MySQL, die zur Verbesserung der Leistung beiträgt, indem häufig abgerufene Daten im Speicher gespeichert werden, wodurch der Zugriff auf langsamere Festplatten reduziert wird. Durch den effektiven Einsatz von Caching können Sie die Abfragegeschwindigkeit verbessern und die Belastung des Speichersystems reduzieren. Die beiden Haupttypen von Caches, die in MySQL verwendet werden, sind MyISAM-Cache und InnoDB-Cache.

Einrichten des Caches für MyISAM und InnoDB

MyISAM-Cache

MyISAM ist eine ältere MySQL-Speicher-Engine und verwendet key_buffer_size als Hauptparameter, um die Größe des Index-Cache festzulegen. Dieser Parameter ist sehr wichtig, da auf zwischengespeicherte Indizes viel schneller zugegriffen werden kann als auf Indizes, die vom Datenträger gelesen werden müssen.

key_buffer_size: Gibt die Cache-Größe für den MyISAM-Index an. Wenn Sie diese Größe zu klein einstellen, kann dies zu häufigen langsamen Festplattenzugriffs führen, während eine zu große Einstellung ein wenig Arbeitsspeicher für andere Anforderungen übrig lassen kann. Als allgemeine Regel gilt, dass key_buffer_size zwischen 25 und 30 % des gesamten physischen Speichers auf einem Server festgelegt werden sollte, der nur MyISAM verwendet.

Beispieleinstellungen in der MySQL-Konfigurationsdatei (my.cnf):

[mysqld]

key_buffer_size = 4G

InnoDB-Cache

InnoDB ist die standardmäßige und am weitesten verbreitete Speicher-Engine in MySQL. InnoDB verwendet innodb_buffer_pool_size, um den Hauptcache einzurichten, in dem die Daten und Indizes der InnoDB-Tabellen gespeichert sind.

innodb_buffer_pool_size: Gibt die Größe des Pufferpools an, der zum Speichern von Daten und Indizes verwendet wird. Diese Einstellung ist entscheidend für die Leistung von InnoDB, da Daten, auf die häufig zugegriffen wird, in einem Pufferpool gespeichert werden, wodurch der Festplattenzugriff reduziert wird. In der Regel sollte innodb_buffer_pool_size zwischen 60 und 80 % des gesamten physischen Speichers auf einem Server festgelegt werden, der nur InnoDB verwendet.

Beispieleinstellungen in der MySQL-Konfigurationsdatei (my.cnf):

[mysqld]

innodb_buffer_pool_size = 12G

innodb_buffer_pool_instances: Wenn der Pufferpool groß ist (mehr als 1 GB), können Sie ihn in mehrere Instanzen aufteilen, um die Parallelität zu erhöhen. Wenn innodb_buffer_pool_size beispielsweise auf 12 GB festgelegt ist, können Sie ihn in 4 Instanzen mit jeweils 3 GB aufteilen:

[mysqld]

innodb_buffer_pool_size = 12G

innodb_buffer_pool_instances = 4

Abfrage-Cache (Allgemein)

MySQL verfügt auch über einen Abfrage-Cache, der die Ergebnisse häufig wiederholter Abfragen speichert, um die Ausführungszeit nachfolgender Abfragen zu beschleunigen. In der neuesten Version gilt der Abfrage-Cache jedoch als veraltet und wurde in MySQL 8.0 aufgrund von Leistungsproblemen in Umgebungen mit vielen Schreibvorgängen entfernt.

query_cache_size: Wenn Sie eine ältere Version von MySQL verwenden, können Sie die Größe der Cache-Abfrage mit diesem Parameter festlegen. Es wird jedoch empfohlen, für eine bessere Verwaltung Caching oder Cacheproxys auf App-Ebene zu verwenden.

[mysqld]

query_cache_size = 256M

Neueste Artikel