Thank you for reading this post, don't forget to subscribe!
Практически всегда сталкиваюсь с предупреждением Mysql сервера, когда оптимизирую работу сайтов на Bitrix, работающих в окружении bitrixenv.
настройках Mysql сервера есть два очень важных параметра, которые влияют на его производительность:
- table_open_cache
- open_files_limit
Какие значения нужно выбирать, тема отдельной статьи и сильно зависит от конкретной ситуации, так что сейчас не об этом. Допустим, вы выставили эти значения в 15000 и 30000 соответственно. При запуске Mysql сервера вы увидите в логе для ошибок следующие строки:
1 2 |
[Warning] Changed limits: max_open_files: 5000 (requested 30000) [Warning] Changed limits: table_open_cache: 2452 (requested 15000) |
Mysql сервер не может выставить указанные параметры. Причина этого — лимит операционной системы для конкретного процесса, в данном случае mysql. Посмотреть его лимиты можно командой:
1 |
# cat /proc/$(pgrep mysqld)/limits |
Bitrixenv ставит значение Max open files в 5000 для службы базы данных. По дефолту в Centos 7 оно равно 1024 на процесс. Нам этого мало, поэтому увеличиваем его конкретно для mysql до 65535. Для этого создаем отдельный конфиг в systemd для службы mysql.
1 2 |
# mkdir /etc/systemd/system/mysqld.service.d # touch limit.conf |
Содержимое файла очень простое:
1 2 |
[Service] LimitNOFILE=65535 |
Объясняю, почему мы сделали именно так. По идее, можно было бы просто отредактировать файл /etc/systemd/system/mysql.service. Там уже есть параметр LimitNOFILE и ему указано значение 5000. Но если мы отредактируем его, то изменение будет сброшено при очередном обновлении mysql сервера. А создав отдельный внешний конфиг для службы, мы обезопасили его от изменения. Теперь можно спокойно обновляться, установленный параметр никуда не денется.
Так же можно было изменить системные лимиты для всех процессов разом, через указание нужного параметра в конфигурационном файле /etc/security/limits.conf. До появления systemd так обычно и делали. С появлением последнего управлять лимитами для процессов стало проще, поэтому лучше настраивать все точечно именно там, где это необходимо.
После изменения конфигурационных файлов systemd, надо перечитать настройки:
1 |
# systemctl daemon-reload |
И перезапускаем Mysql для применения изменений в самой службе.
1 |
# systemctl restart mysql |
Проверяйте лог mysql. Больше предупреждения на тему Changed limits быть не должно. Смотрим.
1 |
# cat /proc/$(pgrep mysqld)/limits |