Hanya ada satu variabel status yang peduli tentang sort_buffer_size . Itulah yang Anda miliki dalam pesan di pertanyaan: Sort_merge_passes . Dokumentasi MySQL mengatakan:
Sort_merge_passes: Jumlah penggabungan melewati yang harus dilakukan algoritma sortir. Jika nilai ini besar, Anda harus mempertimbangkan untuk meningkatkan nilai variabel sistem sort_buffer_size .
Harap diingat satu hal tentang sort_buffer_size
Jika Anda melihat banyak Sort_merge_passes per detik di SHOW GLOBAL STATUS output, Anda dapat mempertimbangkan untuk meningkatkan nilai sort_buffer_size untuk mempercepat ORDER BY atau operasi GROUP BY yang tidak dapat ditingkatkan dengan optimasi kueri atau pengindeksan yang ditingkatkan
Meskipun meningkatkan sort_buffer_size
dapat membantu kueri dengan GROUP BY
s dan ORDER BY
s, Anda lebih baik meningkatkan kueri yang dapat Anda tingkatkan dan menambahkan indeks yang dapat digunakan oleh Pengoptimal Kueri.
Pertanyaan tetap: Bagaimana Anda memeriksa Sort_merge_passes ???
Gunakan kode ini, untuk memeriksa berapa banyak Sort_merge_passes yang terjadi dalam 5 menit terakhir. Itu juga menghitung Sort_merge_passes per jam.
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;
Jika Anda menemukan Sort_merge_passes dan nilai terlalu tinggi, jangan ragu untuk meningkatkan sort_buffer_size . Misalkan Anda ingin menaikkan ke 4M. Anda akan menjalankan ini:
mysql> SET GLOBAL sort_buffer_size = 1024 * 1024 * 4;
Anda kemudian akan menambahkan ini ke my.cnf
[mysqld]
sort_buffer_size = 4M
Anda akan menjalankan kode secara berkala untuk memeriksa waktu lain Sort_merge_passes paku.