Erhöhen Sie nicht die Puffer pro Verbindung!
Nicht alle Puffer in my.cnf werden nur einmal für die Serverinstanz zugewiesen. Für jede Verbindung sind einige Puffer zugeordnet. Weitere Informationen finden Sie unter https://haydenjames.io/my-cnf-tuning-avoid-this-common-pitfall/ :
Zitat:
Puffer wie join_buffer_size, sort_buffer_size, read_buffer_size und read_rnd_buffer_size werden pro Verbindung zugewiesen. Daher fordert eine Einstellung von read_buffer_size = 1M und max_connections = 150 MySQL auf, vom Start an 1 MB pro Verbindung x 150 Verbindungen zuzuweisen. Seit mehr als einem Jahrzehnt bleibt der Standardwert bei 128 KB. Das Erhöhen der Standardeinstellung ist nicht nur eine Verschwendung von Serverspeicher, sondern trägt häufig nicht zur Leistungssteigerung bei. In fast allen Fällen ist es am besten, die Standardeinstellungen zu verwenden, indem diese vier Pufferkonfigurationszeilen entfernt oder auskommentiert werden. Reduzieren Sie sie für einen schrittweisen Ansatz um die Hälfte, um verschwendeten Arbeitsspeicher freizugeben, und reduzieren Sie sie im Laufe der Zeit weiter auf Standardwerte. Ich habe tatsächlich einen verbesserten Durchsatz durch Reduzieren dieser Puffer gesehen. Aber es gibt wirklich keine Leistungssteigerungen durch das Erhöhen dieser Puffer, außer in Fällen von sehr hohem Datenverkehr und / oder anderen besonderen Umständen. Vermeiden Sie es, diese willkürlich zu erhöhen!
Die Geschwindigkeit des Speicherzugriffs
Im Gegensatz zur üblichen Logik ist der Zugriff auf den Speicher nicht O (1).
Je mehr RAM Sie haben, desto langsamer ist der Zugriff auf alle Daten in diesem RAM.
Die Verwendung von weniger RAM kann also tatsächlich einen schnelleren Zugriff auf den RAM ermöglichen - dies ist eine allgemeine Regel, die nicht nur für MySQL gilt. Bitte lesen Sie The Myth of RAM - warum ein zufälliger gelesener Speicher O (√N) ist
Kehren wir nun zu MySQL join_buffer_size zurück.
Optimieren von MySQL join_buffer_size
Die join_buffer_size wird für jeden vollständigen Join zwischen zwei Tabellen zugewiesen. In der MySQL-Dokumentation wird join_buffer_size wie folgt beschrieben: "Die Mindestgröße des Puffers, der für einfache Index-Scans, Bereichsindex-Scans und Joins verwendet wird, die keine Indizes verwenden und daher vollständige Tabellenscans durchführen." Weiter heißt es: "Die Speicherzuweisungszeit kann zu erheblichen Leistungseinbußen führen, wenn die globale Größe größer ist als von den meisten Abfragen, die sie verwenden, benötigt wird." Der Join-Puffer wird Cache-Tabellenzeilen zugewiesen, wenn der Join keinen Index verwenden kann. Wenn Ihre Datenbank (en) unter vielen Verknüpfungen leiden, die ohne Indizes ausgeführt werden, kann dies nicht durch einfaches Erhöhen von join_buffer_size gelöst werden. Das Problem ist "Verknüpfungen ohne Indizes". Daher besteht die Lösung für schnellere Verknüpfungen darin, Indizes hinzuzufügen.
Ändern Sie die MySQL-Konfiguration so, dass Abfragen ohne Indizes protokolliert werden, sodass Sie solche Abfragen finden und Indizes hinzufügen und / oder die Anwendung ändern können, die solche fehlerhaften Abfragen generiert. Sie sollten "Protokollabfragen, die keine Indizes verwenden" aktivieren. Suchen Sie dann im Protokoll für langsame Abfragen nach nicht indizierten Verknüpfungen.