sort_buffer_sizeに関係するステータス変数は1つだけです。それはあなたが質問のメッセージに戻ってきたものです:Sort_merge_passes。MySQLのドキュメントは言う:
Sort_merge_passes:ソートアルゴリズムが実行しなければならないマージパスの数。この値が大きい場合は、sort_buffer_sizeシステム変数の値を増やすことを検討してください。
sort_buffer_sizeについて1つ注意してください
SHOW GLOBAL STATUS出力に毎秒多くのSort_merge_passesが表示される場合は、sort_buffer_size値を増やして、クエリの最適化または改善されたインデックス作成では改善できないORDER BYまたはGROUP BY操作を高速化することを検討できます。
レイジングsort_buffer_size
はGROUP BY
sとORDER BY
s を使用したクエリに役立ちますが、改善できるクエリを改善し、クエリオプティマイザーで使用できるインデックスを追加することをお勧めします。
質問は残ります:Sort_merge_passesをどのようにチェックしますか???
このコードを使用して、過去5分間に発生したSort_merge_passesの数を確認します。また、1時間あたりのSort_merge_passesも計算します。
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;
Sort_merge_passesと速度が高すぎる場合は、sort_buffer_sizeを増やしてもかまいません。4Mにレイズしたいとします。あなたはこれを実行するでしょう:
mysql> SET GLOBAL sort_buffer_size = 1024 * 1024 * 4;
次に、これをmy.cnfに追加します
[mysqld]
sort_buffer_size = 4M
コードを定期的に実行して、Sort_merge_passesスパイクの他の時間をチェックします。