Я прочитал из примера файла конфигурации, который говорит следующее:
# Sort buffer is used to perform sorts for some ORDER BY and GROUP BY
# queries. If sorted data does not fit into the sort buffer, a disk
# based merge sort is used instead - See the "Sort_merge_passes"
# status variable. Allocated per thread if sort is needed.
У меня есть пара запросов, которые используют файловую сортировку. Как определить, какой размер буфера мне нужен, чтобы запросы работали без проблем с диском?
Ответы:
Существует только одна переменная состояния, которая заботится о sort_buffer_size . Вот что у вас есть в ответном вопросе: Sort_merge_passes . Документация MySQL гласит:
Пожалуйста, имейте в виду одну вещь о sort_buffer_size
Хотя повышение
sort_buffer_size
может помочь запросам сGROUP BY
s иORDER BY
s, вам лучше улучшить запросы, которые вы можете улучшить, и добавить индексы, которые могут использоваться оптимизатором запросов.Остается вопрос: как вы проверяете Sort_merge_passes ???
Используйте этот код, чтобы проверить, сколько Sort_merge_passes произошло за последние 5 минут. Он также вычисляет Sort_merge_passes в час.
Если вы обнаружите, что Sort_merge_passes и скорость слишком высоки, не стесняйтесь увеличивать sort_buffer_size . Предположим, вы хотите повысить до 4М. Вы бы запустить это:
Затем вы добавили бы это в my.cnf
Вы должны периодически запускать код, чтобы проверять другие времена Sort_merge_passes пики.
источник
Вам не нужно менять sort_buffer_size по умолчанию. Вы неправильно понимаете его использование на основе вопроса. Вы должны начать с изучения SQL, чтобы увидеть, можете ли вы его настроить и удовлетворить условиям ORDER BY / GROUP BY, используя индекс. Как правило, это будет составной индекс.
Далее: http://www.xaprb.com/blog/2010/05/09/how-to-tune-mysqls-sort_buffer_size/
источник
.cnf
файлы примеров, поставляемые с mysql, не используют настройку по умолчанию.Руководство в руководстве (5.0-5.5)
Начиная с версии 5.6, формулировка указывает, что оптимизатор может выбрать значение для запроса и что сервер может расширить буфер до предела. Это снижает стоимость установки значения слишком высоко. Похоже, вы хотите быть консервативным, ниже, чем по умолчанию (как это делают файлы cnf выпуска) для выпусков под 5.6.4, но вы можете позволить себе иметь более высокий предел, скажем, по умолчанию 2 МБ, или даже больше, от 5.6. 4, так как полная сумма не выделяется вслепую.
источник
Лучший способ определить оптимальный
sort_buffer_size
- это сравнить его.Как? Как и @RolandoMySQLDBA, проверка
Sort_merge_passes
может быть полезной, но это не единственный фактор, влияющий на производительность. Вы должны быть осторожны, когда вы увеличиваетеsort_buffer_size
.В документе говорится, что
Там есть пост о тестировании, который заключает, что
Когда я проверил, я также получил аналогичный результат.
В идеале было бы лучше всего избегать ситуации, которую нужно оптимизировать
sort_buffer_size
. Как? Этот документ ORDER BY Optimization может помочь вам понять, как все работает под капотом.источник
"mysql> SET GLOBAL sort_buffer_size = 1024 * 1024 * 4;" Это плохой способ поместить размер буфера сортировки в 4 м, что делает размер буфера сортировки более 4 ГБ.
"mysql> SET GLOBAL sort_buffer_size = 1024 * 4;"
Если я ваш, я не пытаюсь изменить короткий размер буфера, это хороший способ сделать сбой вашего сервера, и отправить в корзину производительность. Лучше попытаться сделать лучшие запросы.
источник
1024 * 4
. Это 4096, 4K.