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:
Sort_merge_passes: Die Anzahl der Zusammenführungsdurchläufe, die der Sortieralgorithmus ausführen musste. Wenn dieser Wert groß ist, sollten Sie den Wert der Systemvariablen sort_buffer_size erhöhen.
Bitte beachten Sie eines bei sort_buffer_size
Wenn in der Ausgabe von SHOW GLOBAL STATUS viele Sort_merge_passes pro Sekunde angezeigt werden, können Sie den Wert sort_buffer_size erhöhen, um ORDER BY- oder GROUP BY-Operationen zu beschleunigen, die durch Abfrageoptimierung oder verbesserte Indizierung nicht verbessert werden können
Während das sort_buffer_sizeErhöhen Abfragen mit GROUP BYs und ORDER BYs 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.
SET @SleepTime = 300;
SELECT variable_value INTO @SMP1
FROM information_schema.global_status WHERE variable_name = 'Sort_merge_passes';
SELECT SLEEP(@SleepTime) INTO @x;
SELECT variable_value INTO @SMP2
FROM information_schema.global_status WHERE variable_name = 'Sort_merge_passes';
SET @SMP = @SMP2 - @SMP1;
SET @SMP_RATE = @SMP * 3600 / @SleepTime;
SELECT @SMP,@SMP_RATE;
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:
mysql> SET GLOBAL sort_buffer_size = 1024 * 1024 * 4;
Sie würden dies dann zu my.cnf hinzufügen
[mysqld]
sort_buffer_size = 4M
Sie würden den Code regelmäßig ausführen, um zu anderen Zeiten nach Sort_merge_passes- Spitzen zu suchen .