Увеличиваем значение 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

После этого на странице “Сервер БД” вы должны увидеть измененные значения.