我有一个MyISAM表(10M行,3.5G,计划达到~80M),我总是无法将其转换为InnoDB。
我尝试过:
ALTER TABLE
- 2分钟后就失去连接了。也许我做错了什么。mysqldump
- 尝试创建转储,然后将ENGINE=MyISAM
更改为ENGINE=InnoDB
。
它开始得很好,但随着新表中的行数增加(~3M),它变得越来越慢,最终在几个小时后超时(--reconnect
已开启)。
如果我将缓冲池大小增加到2G,它会在更多的行(~6M)后变慢,但机器会耗尽内存。
在恢复转储期间,在SHOW PROCESSLIST
中,我看到许多查询在“查询结束”状态下卡住了2-3分钟。从谷歌搜索中无法理解这是什么意思。
INSERT INTO ... SELECT * FROM
- 创建相同结构的表并尝试此操作。在一些百万行之后也会变慢,然后超时。(感谢@Ernestas Stankevičius提醒我这一点。)
服务器:
Aws EC2 4GB Ubuntu14.04
my.cnf
:
wait_timeout=28800
connect_timeout=28800
innodb_lock_wait_timeout=28800
net_read_timeout=7200
net_write_timeout=7200
innodb_buffer_pool_size=1G
innodb_io_capacity=100 /*200 is heavy on the machine*/
innodb_flush_log_at_trx_commit=0
reconnect=1