Существует только одна переменная состояния, которая заботится о 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 для ускорения операций ORDER BY или GROUP BY, которые нельзя улучшить с помощью оптимизации запросов или улучшенной индексации
Хотя повышение sort_buffer_size
может помочь запросам с GROUP BY
s и ORDER BY
s, вам лучше улучшить запросы, которые вы можете улучшить, и добавить индексы, которые могут использоваться оптимизатором запросов.
Остается вопрос: как вы проверяете Sort_merge_passes ???
Используйте этот код, чтобы проверить, сколько 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 пики.