В файле 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 более основательно и эта заметка будет пополняться. А также, может быть, помогут Ваши комментарии.