Моя база данных содержит три таблицы, имеющие 50 тыс., 50 тыс. и 5 млн строк. Все они InnoDB. (самый большой содержит varchar[256]). Размер моей базы данных составляет 214 МБ, что я получил, запросив information_schema.TABLES (я думаю, это дает размер данных + индекс на диске?)
У меня было 1,5гб ОЗУ и я думал переделать движок всех таблиц в ПАМЯТЬ. Но когда я начал конвертировать самую большую таблицу, я получил ошибку 1114.
После некоторых исследований я обнаружил, что max_heap_table_size занимает всего 16 МБ. Итак, я установил max_heap_table_size и tmp_table_size на 1 ГБ.
Когда я снова попытался выполнить преобразование, я увидел, что использование памяти процессом mysqld.exe превышало 1,2 ГБ, а затем он снова выдал ту же ошибку еще до преобразования половины строк! Я удалил половину строк из самой большой таблицы, и она, наконец, поместилась — в памяти 700 МБ!
Почему база данных размером 214 МБ не может уместиться даже в четырехкратном размере памяти?
Есть ли что-то еще внутри процесса, которое съедает память, кроме данных + индекс?
Машина: Intel P4 – 1,9 ГГц, 1,5 ГБ ОЗУ, Win7 Ultimate.
topи/илиhtop, чтобы узнать, что использует вашу оперативную память. Вы используете виртуальный хостинг или VPS? - person Bojangles   schedule 28.09.2012