Chỉ có một biến trạng thái quan tâm đến sort_buffer_size . Đó là những gì bạn có trong tin nhắn trở lại trong câu hỏi: Sort_merge_passes . Tài liệu MySQL nói:
Sort_merge_passes: Số lượng các phép hợp nhất mà thuật toán sắp xếp phải thực hiện. Nếu giá trị này lớn, bạn nên xem xét tăng giá trị của biến hệ thống sort_buffer_size .
Hãy ghi nhớ một điều về sort_buffer_size
Nếu bạn thấy nhiều đầu ra Sort_merge_passes mỗi giây trong đầu ra SHOW GLOBAL STATUS, bạn có thể xem xét tăng giá trị sort_buffer_size để tăng tốc các thao tác ORDER BY hoặc GROUP BY không thể cải thiện bằng tối ưu hóa truy vấn hoặc lập chỉ mục được cải thiện
Mặc dù việc nâng cao sort_buffer_size
có thể giúp truy vấn với GROUP BY
s và ORDER BY
s, nhưng tốt hơn hết là bạn nên cải thiện các truy vấn mà bạn có thể cải thiện và thêm các chỉ mục có thể được Trình tối ưu hóa truy vấn sử dụng.
Câu hỏi vẫn còn: Làm thế nào để bạn kiểm tra Sort_merge_passes ???
Sử dụng mã này, để kiểm tra số lượng Sort_merge_passes đã xảy ra trong 5 phút qua. Nó cũng tính toán Sort_merge_passes mỗi giờ.
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;
Nếu bạn tìm thấy Sort_merge_passes và tốc độ quá cao, thì hãy thoải mái tăng sort_buffer_size . Giả sử bạn muốn tăng lên 4M. Bạn sẽ chạy cái này:
mysql> SET GLOBAL sort_buffer_size = 1024 * 1024 * 4;
Sau đó, bạn sẽ thêm nó vào my.cnf
[mysqld]
sort_buffer_size = 4M
Bạn sẽ chạy mã định kỳ để kiểm tra các lần khác Sort_merge_passes gai.