Ich erhalte diese Nachricht von MysqlTunner.pl:
join_buffer_size> = 4 M Dies wird nicht empfohlen
Andererseits habe ich in Debians my.cnf-Handbuch über jont_buffer_size gelesen, dass:
Dieser Puffer wird zur Optimierung vollständiger JOINs (JOINs ohne Indizes) verwendet. Solche JOINs sind in den meisten Fällen ohnehin sehr schlecht für die Leistung, aber wenn Sie diese Variable auf einen großen Wert setzen, werden die Auswirkungen auf die Leistung verringert. In der Statusvariablen "Select_full_join" finden Sie eine Anzahl der vollständigen JOINs. Wird pro Thread zugewiesen, wenn eine vollständige Verknüpfung gefunden wird
Also frage ich mich, welchem ich glauben soll? Derzeit habe ich join_buffer_size = 64M festgelegt, um das Skalierbarkeitsproblem einer Site mit hohem Datenverkehr zu bewältigen, deren Abfragen nicht besonders optimiert sind. Ich schätze Ihre Hinweise dazu.
Antworten:
join_buffer_size
= 64 MB sind irgendwie verrückt, das sind + 64 MB, die jedem neuen Thread zugewiesen werden.Ich würde sagen, Sie sollten
join_buffer_size
auf einen Wert zwischen128K
und reduzieren ,256K
während Sie Indizes zu Ihren Tabellen hinzufügen und den soeben gespeicherten Speicher verwenden, umkey_buffer_size
> + 10x zu erhöhen .Mehr Speicher übersetzen nicht immer zu mehr Geschwindigkeit, allgemeine Beispiele:
sort_buffer_size
,read_buffer_size
,read_rnd_buffer_size
undtable_open_cache
. Google es.quelle
Beide scheinen mir dasselbe zu sagen. Sie sagen dir beide, dass FULL JOINS SCHLECHT sind .
Haben Sie die
Select_full_join
Variable überprüft ? Sehen Sie tatsächlich diesen Zähleranstieg? Sind Sie sicher, dass das Reparieren des Codes oder das Anschreien der für das Reparieren Verantwortlichen keine Option ist?quelle
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:
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
Ä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.
quelle
Das glaube ich nicht. Es ist wahrscheinlich, dass mysqltuner Ihnen eine Konfiguration vorschlägt, die auf der Konfiguration basiert, die Sie möglicherweise benötigen. wenn ich mysqltuner auf einem DB-Server ausführe. Hier ist es eine Empfehlung, die ich bekomme:
Ich denke, es ist nicht immer eine schlechte Größe auf einem anderen Server und braucht.
quelle
JOINS ohne INDEXES sollten durch Analyse und entsprechende Indexerstellung aufgelöst werden.
Verwenden Sie mysqlcalculator.com mit Ihrer join_buffer_size, um die Auswirkungen auf den Speicherbedarf zu sehen. Sollte weniger als 1 Minute Ihrer Zeit für ein dramatisches Ergebnis dauern.
quelle