На этот вопрос уже есть ответ:
Я использую сервер с 24 ГБ оперативной памяти. Единственное, что здесь работает, - это сервер MySQL, настроенный как Master.
Когда я проверяю память с помощью команды free -m, я получаю следующее:
total used free shared buffers cached
Mem: 24158 24027 131 0 131 23050
Прибл. 23G находится в кеше. Мне кажется, это много.
Я также установил кеширование на 0 в my.cnf
query_cache_size = 0
Как я могу проверить, что именно кешируется?
Также перезапуск mysql не очищает кеш. флеш-таблицы
также не помогли.
Вы смотрите на два разных кэша. free -m
сообщает вам, сколько памяти используется операционной системой для дискового кеша, а не сколько MySQL использует для кеша базы данных. И операционная система должна использовать как можно больше памяти для дискового кеша - почему бы вам не захотеть кеш-памяти как можно большего размера? Эта память всегда доступна для использования, если она требуется приложению. См. здесь , где подробно обсуждается использование памяти Linux для кэширования.
Это означает, что почти вся память используется ядром для кэширования данных. У вас, вероятно, почти простаивающая система, поэтому это не имеет большого значения, но для ее оптимизации вам следует взглянуть на конфигурацию mysql ...
Если вы думаете, что можете извлечь выгоду из кеширования запросов, включите его и дайте ему например 128 Мб. Затем вы можете проверить в mysql, как он используется. Если вы выполняете в основном запросы SELECT и не так много INSERT / UPDATE, кеш запросов может вам подойти. Это очень редко вызывает проблемы, поэтому вы можете спокойно оставить его включенным.
Затем, если вы используете механизм хранения MyISAM, вам следует включить некоторую память с помощью переменной kay_buffer. Если вы используете InnoDB, общий совет - отдать 50-80% доступной памяти innodb_buffer_pool_size (если это выделенный сервер mysql). Mysql и InnoDB лучше знают, что именно кэшировать, чем ядро Linux.
Для освобождения кешей mysql (чтения), я думаю, помогает только перезапуск mysql. Чтобы освободить системные кеши, используйте команду:
echo 3 > /proc/sys/vm/drop_caches