Увеличиваем значение 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
После этого на странице “Сервер БД” вы должны увидеть измененные значения.