Увеличиваем значение table_open_cache
В какой-то момент существования сайта или портала на платформе Битрикс возникает необходимость увеличить значение параметра table_open_cache. Система об этом сигнализирует на странице “Сервер БД” в административной части в секции “Настройки”. В этой статье я опишу шаги которые необходимо выполнить для обновления этого значения. Настройка будет производиться на рекомендуемом Битрикс окружении: ОС CentOS и веб-окружение Bitrix Virtual Appliance.
На странице административного раздела "Настройки"-"Производительность"-"Сервер БД" содержится информация по основным параметрам сервера БД и рекомендации по улучшению. Параметры которые стоит изменить система будет подсвечивать красным цветом. Для переопределения практически всех значений достаточно переопределить их в файле /etc/mysql/conf.d/z_bx_custom.cnf. Но для параметра table_open_cache этого недостаточно, так как он связан с лимитом на количество открытых файлов, который является системным параметром, а значит потребуется изменить и его. Здесь важно понимать, что параметр table_open_cache зависит от параметра max_connections и для рассчета оптимального значения можно воспользоваться следующей формулой: max_connections * кол-во таблиц в базе. Например если у вас значение max_connections = 245, а количество таблиц 1090. То значение table_open_cache должно быть не меньше чем 245 * 1090 = 267050. С этими знаниями приступим к настройке.
В первую очередь пропишем полученное значение в файле /etc/mysql/conf.d/z_bx_custom.cnf:
...
table_open_cache = 267050
open_files_limit = 267050
Теперь нам нужно поднять лимиты на количество открытых файлов в системе. Здесь можно поставить значения в среднем в 2 раза выше чем параметры для сервера БД – 534 100. Для этого нам потребуется сделать следующие шаги.
В файле /etc/security/limits.conf пропишем такие лимиты
* hard nofile 534100
* soft nofile 534100
root hard nofile 534100
root hard nofile 534100
Чтобы не перезагружать сервер изменим значения “в живую”
ulimit -n 534100
Проверить можно с помощью следующих команд:
ulimit -Sn
ulimit -Hn
Теперь остается только перезаписать значение лимита которое устанавливается при запуске службы mysql. Для этого отредактируем файл /usr/lib/systemd/system/mysqld.service в котором находим параметр LimitNOFILE и устанавливаем нужное значение
LimitNOFILE = 534100
Теперь нужно перезагрузить демонов и перезапустить службу mysqld:
systemctl daemon-reload
systemctl restart mysqld
После этого на странице “Сервер БД” вы должны увидеть измененные значения.