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_size
Erhöhen Abfragen mit GROUP BY
s und ORDER 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.
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 .