mysql – 将大型MyISAM表转换为InnoDB
我有一个MyISAM表(10M行,3.5G,计划达到~80M),我总是无法将其转换为InnoDB. 我试过了 : > ALTER TABLE – 2分钟后失去连接.也许我做错了. 它开始很好但随着新表中行数的增长(~3M),它变得越来越慢,最后几个小时后它超时(–reconnect为ON). 如果我将缓冲池大小增加到2G,它会在更多行(~6M)之后减慢,但机器会耗尽RAM. 在转储恢复期间的SHOW PROCESSLIST中,我看到许多查询在“查询结束”状态下停留了2-3分钟.从google-ing无法理解是什么意思. > INSERT INTO … SELECT * FROM – 创建了相同结构的表并尝试了这一点.在数百万行之后也会减速然后超时. (感谢@ErnestasStankevi?ius提醒我这个.) 服务器: Aws EC2 4GB Ubuntu14.04 my.cnf文件:
最佳答案
对于4GB的机器,innodb_buffer_pool_size = 2G可能是危险的.试试1500M.交换或耗尽内存比使用小缓存更糟糕.
从mysql命令行工具运行ALTER,而不是某些UI. (UI可能有你要打的时间限制. 你在运行什么版本的MySQL?你有多少指数?请告诉我们SHOW CREATE TABLE.删除所有辅助密钥,仅保留PRIMARY KEY.转换后添加其他索引; 5.6或后者可以做到“就地”. 如果您没有PRIMARY KEY,请创建一个; InnoDB确实需要一个. 这可能涵盖大多数情况:
注意:如果您运行的是5.5或更早版本,请在一个ALTER中添加所有辅助密钥.如果您运行的是5.6或更高版本,请一次添加一个. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |