我的数据库包含三个表,分别有 50k、50k 和 5m 行。它们都是 InnoDB。(最大的一个包含 varchar[256])。我的数据库大小是 214MB,我通过查询得到的information_schema.TABLES
(我猜这给出了磁盘上数据+索引的大小?)
我有 1.5GB 的 RAM,我想我会将所有表的引擎转换为 MEMORY。但是当我开始转换最大的表时,我得到了 1114 错误。
经过一番研究,我发现max_heap_table_size
只有 16MB。因此,我将max_heap_table_size
and设置tmp_table_size
为 1GB。
当我再次尝试转换时,我看到mysqld.exe进程的内存使用量超过 1.2GB,然后在转换一半行之前再次抛出同样的错误!我从最大的表中删除了一半的行,它终于适合了——内存为 700MB!
为什么一个214MB的数据库,竟然装不下4倍多的内存?
除了数据+索引之外,进程中还有其他东西在消耗内存吗?
机器:Intel P4 - 1.9GHz,1.5GB RAM,Win7 Ultimate。