2009-10-09 78 views
2

我有一个非常简单的表格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命令验证新设置。

+0

如果在CREATE INDEX运行时运行SHOW PROCESSLIST,CREATE INDEX进程的状态是什么? – 2009-10-12 02:26:29

+0

11.5小时,状态为“复制到tmp表”。 – 2009-10-12 16:52:33

回答

2

您收到的建议是正确的。我怀疑你所做的更改实际上没有生效。尝试在my.cnf中进行更改并重新启动服务器。

+0

是的,我尝试更改my.cnf并重新启动服务器。但它没有帮助。 – 2009-10-13 08:29:35

+0

如果运行'SHOW VARIABLES LIKE'myisam_sort%',会发生什么情况;' - 您可以在这里粘贴输出吗? – 2009-10-13 18:30:27

+0

如果这些值符合您的预期,您可能还会考虑增加“key_buffer_size”和“sort_buffer_size” - 特别是前者 – 2009-10-13 18:50:51