Низкий MySQL Table Cache Hit Rate

Я работал над оптимизацией моего сайта и баз данных, и я использовал mysqltuner.pl для помощи с этим. Я добрался примерно, все исправляет, за исключением уровня удачного обращения в кэш таблицы, неважно, как высоко я повышаю его в my.cnf, я все еще поражаю приблизительно 0% (284 открытых / 79k открытый).

Моя проблема состоит в том, что я действительно не понимаю точно, что влияет на это так, я действительно не знаю, что искать в моих запросах/структуре базы данных для фиксации этого.

6
задан James Simpson 25 December 2009 в 19:23
поделиться

2 ответа

Кэш должен поддерживать копии горячих данных. Горячие данные - это данные, которые часто используются. Если вы не можете извлечь данные из определенного кэша, это означает, что для их извлечения БД должна зайти на диск.

--dit --

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

--edit: некоторые исследования --

Ok, кажется (из ответа на этот пост), что Mysql использует кэш таблиц для структур данных, используемых для представления таблицы. структуры данных также (посредством инкапсуляции или путем дублирования записей таблицы для каждой таблицы) представляют собой набор файловых дескрипторов, открытых для файлов данных в файловой системе. Механизм MyIsam использует один для таблицы и один для каждого индекса, дополнительно каждый активный элемент запроса требует своих дескрипторов.

Файловый дескриптор - это сущность ядра, используемая для файла IO, она представляет собой низкоуровневый контекст для чтения или записи конкретного файла.

Я думаю, что вы либо неправильно интерпретируете значение, либо его нужно интерпретировать по-другому в этом контексте. 284 - это количество активных таблиц в том экземпляре, в котором вы сделали снэпшот, а второе значение - количество раз, когда таблица была получена с момента запуска Mysql.

Я бы рискнул предположить, что вам нужно сделать несколько снэпшотов этого чтения и посмотреть, не превысит ли первое значение (активное fd в этом экземпляре) емкость вашего кэша.

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

.
3
ответ дан 10 December 2019 в 00:39
поделиться

Кэш таблиц определяет количество одновременно открытых файловых дескрипторов MySQL. Таким образом, скорость попадания в кэш таблиц будет зависеть от того, сколько таблиц вы имеете относительно вашего лимита, а также от того, как часто вы делаете повторные ссылки на таблицы (учитывая, что учитывается не только одно соединение, но и одновременные соединения)

Например, если ваш лимит составляет 100 и у вас 101 таблица, и вы опрашиваете каждую таблицу по порядку, вы никогда не получите никаких попаданий в кэш таблиц. С другой стороны, если у вас только 1 таблица, вы, как правило, должны получать близкие к 100% хиты, если только вы не запустите FLUSH TABLES много (до тех пор, пока ваш table_cache установлен выше, чем количество типичных одновременных подключений).

Итак, для настройки вам нужно посмотреть, сколько различных таблиц вы можете ссылаться на один процесс/клиент, а затем посмотреть, сколько одновременных подключений у вас обычно бывает.

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

.
7
ответ дан 10 December 2019 в 00:39
поделиться
Другие вопросы по тегам:

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