Проблема со сменой table_open_cache в mysql 5.6 и ее решение

mysql-56-performance

На моей текущей работе возникла проблема с текущим сервером, на котором находится высоконагруженый сервис. Выгорело половина сервера, а значит процессор стал 8-ми ядерным из 16-ти и , которая требовательна к ресурсу, перестала тянуть нагрузку. Было принято решение переехать на новый сервис. Переезд прошел удачно и я решил так же обновиться  с 5.5 до 5.6 версии и тут я столкнулся со следующей проблемой…

Во первых апдейт я для начала провел на локальной машине, чтобы исследовать возможные проблемы и разницу в конфигурации. Я сразу же столкнулся с единственной ошибкой

Unknown system variable

Быстро нагуглив, тчо ее название сменилось на table_open_cache я подправил конфиг. Все зарабтало, тесты прошли все. Далее я обновился на сервере и повозился с оптимизацией.
Для проведения нагрузочное тестирвоания на mysql я использовал утилиту sysbench.

Для начала подготавливается таблица на 500000 записей. Предварительно надо создать базу с именем sbtest.

Потом выполняется тестирование

Начиная с версии sysbench 0.5 надо указывать полный путь к oltp.lua. У меня на локалке это выглядит так

Далее я решил прогнать свою конфигурацию через mysqltuner и tuner-primer.sh утилиты.  Советую устанавливать их не из репозиториев, а с офф. сайтов.
И тут я очень удивился, обе утилиты советовали увеличить лимит table_open_cache > 400. Однако в своем конфиге я имел такие значения.

= 30000
table_open_cache = 15000
table_open_cache_instances = 16

Я начал пробовать менять конфиг, перезагружать mysql, гуглить решение почему конфиг может не читаться и все бестолку. Тогда я нагуглил данный ответ
http://stackoverflow.com/questions/19705738/mysql-table-cache-refuses-to-change-value/28936292

Сейчас там уже написан мой ответ с решеним, до этого была только идея поискать локальные переопределния table_open_cache. Я их поискал

И не нашел ничего такого. Сначала я пошел по ложному пути и пробовал изменить настройку innodb_open_files. Но как выяснилось — эта настройка высчитывается автоматически в зависимости от table_open_cache.  Тогда я начал просто изучать всю конфигурацию mysql через mysqladmin variables и команды show status like %something%.

Ничего не меняется.

А вот это уже интереснее. Я же поставил open_files_limit = 30000. И тут меня осенило, что нет проблемы с конфигурацией mysql, а это проблема с операционной системой.
Быстро нагуглив open files limit я обнаружил, что мой системный soft limit стоит как раз на 1024!
Далее я выполнил настройку в файле

И установил там такие лимиты

И чтобы не перезагружать сервер изменил настройку «на живом».

Можно проверить так

После выполнения mysql restart конфигурация считалась и table_open_cache стал равен тому значению, которое я установил.

 

  • jemali_m

    Спасибо👍🏻 Около 2 лет не занимался оптимизацией сайтов, многое уже забыл. И тут как раз все вспомнил 🙂