Ich habe aus einer Beispielkonfigurationsdatei gelesen, die Folgendes enthält:
# Sort buffer is used to perform sorts for some ORDER BY and GROUP BY
# queries. If sorted data does not fit into the sort buffer, a disk
# based merge sort is used instead - See the "Sort_merge_passes"
# status variable. Allocated per thread if sort is needed.
Ich habe ein paar Fragen, die Dateisortierung verwenden. Wie bestimme ich die Größe des Puffers, den ich benötige, damit Abfragen reibungslos ausgeführt werden können, ohne die Festplatte zu berühren?
Antworten:
Es gibt nur eine Statusvariable, die sich um sort_buffer_size kümmert . Das haben Sie in der Nachricht zurück in der Frage: Sort_merge_passes . Die MySQL-Dokumentation sagt:
Bitte beachten Sie eines bei sort_buffer_size
Während das
sort_buffer_size
Erhöhen Abfragen mitGROUP BY
s undORDER BY
s unterstützen kann, ist es besser, die Abfragen zu verbessern, die Sie verbessern können, und Indizes hinzuzufügen, die vom Abfrageoptimierer verwendet werden können.Frage bleibt: Wie prüft man die Sort_merge_passes ???
Verwenden Sie diesen Code, um zu überprüfen, wie viele Sort_merge_passes in den letzten 5 Minuten aufgetreten sind. Außerdem werden die Sort_merge_passes pro Stunde berechnet.
Wenn Sie die Sort_merge_passes und die Geschwindigkeit zu hoch finden, dann fühlen Sie sich frei zu erhöhen sort_buffer_size . Angenommen, Sie möchten auf 4M erhöhen. Sie würden dies ausführen:
Sie würden dies dann zu my.cnf hinzufügen
Sie würden den Code regelmäßig ausführen, um zu anderen Zeiten nach Sort_merge_passes- Spitzen zu suchen .
quelle
Sie müssen die sort_buffer_size nicht von der Standardeinstellung ändern. Sie verstehen die Verwendung aufgrund der Frage falsch. Sie sollten zunächst die SQL untersuchen, um festzustellen, ob Sie sie optimieren und die ORDER BY / GROUP BY-Bedingungen mithilfe eines Index erfüllen können. Es wird im Allgemeinen ein zusammengesetzter Index sein.
Weiter: http://www.xaprb.com/blog/2010/05/09/how-to-tune-mysqls-sort_buffer_size/
quelle
.cnf
verwenden die mit MySQL gelieferten Beispieldateien nicht die Standardeinstellung.Die Anleitung im Handbuch (5.0-5.5) lautet
Ab 5.6 zeigt der Wortlaut an, dass der Optimierer einen Wert für eine Abfrage auswählen kann und dass der Server den Puffer bis zum Limit erweitern kann. Dies verringert die Kosten für die Einstellung eines zu hohen Werts. Es hört sich also so an, als ob Sie konservativ sein möchten, niedriger als der Standardwert (wie es die Release-CNF-Dateien tun) für Releases unter 5.6.4, aber es sich leisten können, ein höheres Limit von beispielsweise Standard-2 MB oder sogar mehr von 5.6 festzulegen. 4, da der volle Betrag nicht blind zugeteilt wird.
quelle
Der beste Weg, um das Optimum zu bestimmen,
sort_buffer_size
ist das Benchmarking.Wie? Wie bei @RolandoMySQLDBA
Sort_merge_passes
könnte die Überprüfung hilfreich sein, aber das ist nicht der einzige Faktor, der die Leistung beeinflusst. Sie sollten vorsichtig sein, wenn Sie die erhöhensort_buffer_size
.Das Dokument sagt das
Es gibt einen Beitrag über die Tests, der daraus schließt
Beim Testen erhalte ich auch ein ähnliches Ergebnis.
Im Idealfall ist es am besten, die Situation zu vermeiden, die Sie zur Optimierung benötigen
sort_buffer_size
. Wie? Dieses Dokument ORDER BY Optimization kann Ihnen helfen, die Funktionsweise unter der Haube zu verstehen.quelle
"mysql> SET GLOBAL sort_buffer_size = 1024 * 1024 * 4;" Es ist eine schlechte Möglichkeit, die Größe des Sortierpuffers in 4 m einzugeben. Dadurch wird die Größe des Sortierpuffers für 4 GB verwendet
"mysql> SET GLOBAL sort_buffer_size = 1024 * 4;"
Wenn ich Ihr gewesen bin, versuche ich nicht, die Größe des kurzen Puffers zu ändern. Dies ist ein guter Weg, um Ihren Server zum Absturz zu bringen und die Leistung in den Papierkorb zu senden. Es ist besser, bessere Abfragen zu machen.
quelle
1024 * 4
. Das sind 4096, 4K.