我有一个非常简单的表格MySQL索引的创建是缓慢的(在EC2)
requestparams (
requestid varchar(64) NOT NULL,
requestString text,
) ENGINE=MyISAM;
与“LOAD DATA”,我改变架构填充表,并制作“的requestId”主键后。
该表中有1100万行,数据大小小于2GB(MYD文件的大小)。在过程结束时,索引文件大小约为600M。
在我的笔记本电脑上创建索引需要不到20分钟。但是,当我在亚马逊的EC2(中等实例)上运行这个流程时,这个过程花费了12个多小时。在整个过程中,磁盘超级繁忙,IO等待(见top
)在40-100%之间。 CPU大部分空闲。我不认为,EC2上的磁盘速度很慢。
在MySQL邮件列表上,有人建议更改服务器变量myisam_sort_buffer_size & myisam_max_sort_file_size。我将它们分别设置为512MB & 4GB。但索引的创建同样缓慢。事实上,MySQL的内存使用率很少超过40M。
我该如何解决这个问题?
解决方案:增加“key_buffer_size”帮助。我将此值设置为1GB,并在4分钟内完成该过程。确保使用mysqladmin variables
命令验证新设置。
如果在CREATE INDEX运行时运行SHOW PROCESSLIST,CREATE INDEX进程的状态是什么? – 2009-10-12 02:26:29
11.5小时,状态为“复制到tmp表”。 – 2009-10-12 16:52:33