Таблица памяти MySQL 5.1 - PullRequest
       13

Таблица памяти MySQL 5.1

2 голосов
/ 05 декабря 2010

Кто-нибудь может понять следующее:

Я использую MySQL 5.1 на 64-битной установке Linux и создал пару таблиц памяти. Документация для таблиц памяти MySQL гласит, что оперативная память не будет "освобождена", пока таблица не будет удалена или урезана. Я удалил все эти таблицы, но использование оперативной памяти (из верхней части команды) немного не уменьшилось, даже после нескольких часов (90% на 48 ГБ после удаления таблиц). Он работал в течение пары дней с созданием и удалением нескольких таблиц.

Спасибо, Джеймс

Ответы [ 3 ]

1 голос
/ 05 декабря 2010

Возможно, ОС еще не удалила эти страницы из ОЗУ. Попробуйте использовать память в другом процессе и посмотрите, уменьшатся ли числа для процесса сервера MySQL.

0 голосов
/ 15 сентября 2011

В последний раз я использовал таблицу MEMORY 4 года назад, и я думаю, что мы решили проблему с помощью команды OPTIMIZE TABLE. Я не могу найти документацию в Интернете, чтобы подтвердить, что этот способ работает: S, но попробуйте и посмотрите, поможет ли это.

Кроме того, Ebay выпустил патч, чтобы у таблицы MEMORY были динамические строки вместо фиксированных. Это означает, что они будут занимать меньше памяти. Это также (недавно) доступно на сервере Percona http://www.mysqlperformanceblog.com/2011/09/06/dynamic-row-format-for-memory-tables/

0 голосов
/ 05 декабря 2010

Возможно, вы захотите рассмотреть возможность использования таблиц MyISAM в tmpfs. Недостатком является то, что вам придется заново создавать их при каждом перезапуске сервера (таблицы обработчиков памяти сохраняются при перезапуске).

MyISAM намного более экономно использует память, чем механизм памяти, и, вероятно, так же быстро работает на некоторых рабочих нагрузках (вам нужно протестировать его в непроизводственной системе)

Вы, вероятно, хотите попытаться диагностировать, что именно использует память - это могут быть не таблицы памяти. К сожалению, трудно понять, что использует память в MySQL.

Память из таблиц памяти должна быть освобождена, но возможно, что она не сможет освободить ее из-за фрагментации, то есть другие виды памяти будут размещены в промежутках между ними. Обычно «большие» выделения в MySQL появляются при запуске (например, буферный пул innodb), но если вы неправильно настроили my.cnf, они могут произойти и позже.

Попробуйте опубликовать этот вопрос в my.cnf на сервере.

...