Є лише одна змінна статусу, яка дбає про sort_buffer_size . Це те, що ви маєте в повідомленні ще в питанні: Sort_merge_passes . Документація MySQL говорить:
Sort_merge_passes: кількість проходів злиття, які повинен був зробити алгоритм сортування. Якщо це значення велике, слід розглянути можливість збільшення значення системної змінної sort_buffer_size .
Будь ласка, пам’ятайте про одне про sort_buffer_size
Якщо ви бачите багато параметрів Sort_merge_passes в секунду на виході SHOW GLOBAL STATUS, ви можете розглянути можливість збільшення значення sort_buffer_size для прискорення операцій ЗАМОВЛЕННЯ ПО ГРУПІ або ГРУПІ, які неможливо покращити за допомогою оптимізації запитів або покращеної індексації
Хоча підвищення sort_buffer_size
може допомогти запитам з GROUP BY
s і ORDER BY
s, вам краще покращити запити, які ви можете вдосконалити, та додавши індекси, які можуть використовуватися Оптимізатором запитів.
Залишається питання: Як перевірити Sort_merge_passes ???
Скористайтеся цим кодом, щоб перевірити, скільки сортувальних_посадок трапилося за останні 5 хвилин. Він також обчислює параметри 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 . Припустимо, ви хочете підвищити до 4М. Ви б запустили це:
mysql> SET GLOBAL sort_buffer_size = 1024 * 1024 * 4;
Потім ви додасте це до my.cnf
[mysqld]
sort_buffer_size = 4M
Ви періодично запускаєте код, щоб перевірити наявність інших шипів Sort_merge_passes .