MySQL потребляет почти всю память в кэше? [дубликат]

На этот вопрос уже есть ответ:

Я использую сервер с 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 не очищает кеш. флеш-таблицы также не помогли.

1
задан 29 December 2011 в 20:12
2 ответа

Вы смотрите на два разных кэша. free -m сообщает вам, сколько памяти используется операционной системой для дискового кеша, а не сколько MySQL использует для кеша базы данных. И операционная система должна использовать как можно больше памяти для дискового кеша - почему бы вам не захотеть кеш-памяти как можно большего размера? Эта память всегда доступна для использования, если она требуется приложению. См. здесь , где подробно обсуждается использование памяти Linux для кэширования.

5
ответ дан 3 December 2019 в 17:59

Это означает, что почти вся память используется ядром для кэширования данных. У вас, вероятно, почти простаивающая система, поэтому это не имеет большого значения, но для ее оптимизации вам следует взглянуть на конфигурацию 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

http://linux-mm.org/Drop_Caches

-1
ответ дан 3 December 2019 в 17:59

Теги

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