MySQL – оптимизация быстродействия в my.cnf

В файле my.cnf (по умолчанию /etc/my.cnf) существует достаточно много настроек, которые влияют на быстродействие MySQL, при этом универсального рецепта нет. На серверах, где много оперативной памяти, можно попробовать уменьшить количество операций с жестким диском (которые будут выполняться дольше и потреблять больше ресурсов процессора) путем увеличения работы с RAM и так далее. В общем для разных конфигураций железа, будут разные конфигурации my.cnf, однако сама настройка my.cnf должна иметь общие принципы и зависимости. Правильная настройка требует концептуального понимания, процессов происходящих в MySQL, а эта информация не лежит на поверхности. Но все же оптимальные настройки прямо сейчас – так хочется! И я начал делать первые шаги в этом направлении…

Для начала, обнаружил замечательный perl скрипт mysqltuner.pl, скачать который можно на сайте www.mysqltuner.com
Данный скрипт, при запуске анализирует текущее состояние MySQL и дает рекомендации по настройкам.

Еще один скрипт tuning-primer.sh так же делает нечто подобное – анализирует большое количество параметров и логов, после чего дает рекомендации. Скачать скрипт можно отсюда.
Данный скрипт так же очень хорошо помогает понять некоторые процессы и взаимосвязи и дает весьма полезные рекомендации.
Использование двух этих скриптов позволяет выполнить аудит текущих настроек MySQL и привести их к более оптимальному виду, за несколько минут.

Upd:
Рекомендации – рекомендациями, однако все равно, необходимо понимать, что делаешь и взаимосвязи действий и последствий.
Например, параметр table_cache
Скрипт tuning-primer.sh показывает процент использования данного кеша, например разрешено 100 таблиц, открыто 100 таблиц, таким образом кеш использован на 100%, а далее рекомендация гласит “вероятно вам стоит увеличить table_cache”. Здесь есть один нюанс, о котором не сказано в скрипте – table_cache влияет на общее количество файлов, которые могут быть mysql и как следствие на общее количество файлов, которые в какой-то момент смогут быть открытыми в операционной системе. Однако же есть общее ограничение в ОС, и слишком большое значение tablce_cache может привести к тому, что будут использованы все доступные файловые дескрипторы.
Команда:

sysctl fs.file-max

Покаже максимальное количество файлов, которые могут быть открыты в ОС.
Поменять это значение можно например так:

sysctl -w fs.file-max=399086

Посмотреть же, сколько файлов открыто в системе в текущий момент можно командой:

lsof | wc -l

Это позволит сориентироваться в том, какое значение table_cache допустимо.

P.S.
Данная заметка создана в большей степени для себя (чтобы не забыть о скриптах). В дальнейшем, мне придется вернуться к вопросу быстродействия MySQL более основательно и эта заметка будет пополняться. А также, может быть, помогут Ваши комментарии.

Опубликовано 24 октября 2009 - информация могла устареть.

Ответить