Моя база данных содержит три таблицы, имеющие 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.