Задать вопрос
fast-je
@fast-je
Пишу на php.

Как правильно настроить table_open_cache в mysql 8?

Конфигурация сервера.
4 cpu, 8 gb memory, 15 gb ssd disk.
mysql 8, centos 8.1.1911.
Всего 114 таблиц и все InnoDB, вся бд занимает 1.4 гб.

my.cnf
mysqltuner

Решил поставить mysqltuner и проверить все ли в порядке с моими настройками.
Первые разы что-то менял, что-то убирал. Изначально были сделаны настройки не мной и они казались мне окей, но сама бд могла со временем работы есть всю ОЗУ и скриптом чистил память, потому как она заканчивалась, сис админы говорил что это ок.

Далее я закомментировал некоторые из них и стало намного есть меньше памяти.
Оставались в mysqltuner для смены данные директивы.
Variables to adjust:
join_buffer_size (> 8.0M, or always use indexes with JOINs)
table_open_cache (> 4000)
join_buffer_size я решил что надо переписывать запросы с использованием индексов, а потом уже увеличивать или уменьшать.

Мне не нравится table_open_cache, а точнее Table cache hit rate: 19% (3K open / 16K opened)

Идем на сайт mysql
table_open_cache is related to max_connections. For example, for 200 concurrent running connections, specify a table cache size of at least 200 * N, where N is the maximum number of tables per join in any of the queries which you execute. You must also reserve some extra file descriptors for temporary tables and files.

И не совсем понимаю это, то есть я понимаю это так, максимальное кол-во таблиц которое ты используешь в одном запросе.
То есть если у меня есть запрос с 10 join'ами таблиц, то мой N это 10 ?

Итого: макс коннектов у меня 151 и 151 * 10 = 1510.
table_open_cache = 1510 Это нормально ? Правильно ли я вообще понял ?
Почему у меня сейчас 4000 и все равно бд идет на диск и читает таблицы заново в обход кэша ?
Что касается ограничений чтения файлов, в /usr/lib/systemd/system/mysqld.service стоит LimitNOFILE = 10000
ulimit -Hn
4096

Что я не так понимаю ? Как надо правильно и сколько у меня должен быть table_open_cache на самом деле ?
А может стоит и вовсе забить на это ? mysqltuner не объективен ? Но почему тогда тогда много читается с диска а не кэша ?

И какие еще директивны у меня настроены могут не правильно ? Или которые влияют на table_open_cache неправильно ?
  • Вопрос задан
  • 1324 просмотра
Подписаться 4 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы