我有15 Amazon AWS EC2 t1.microinctances同时填充Amazon RDS MySQL d2.m2.xlarge数据库与数据使用大型INSERTs
(查询40000行)。来自多个主机的批量插入preformace优化
查询不断发送。该表是INNODB,两个INT列,两列都有索引。数据接收期间RDS实例的CPU利用率约为30%。
当我有一个EC2实例时,速度更快,然后我同时运行15个实例。 15个实例组的工作速度越来越慢,直到速度变得完全不令人满意。
如何优化此过程的性能?
UPD: 我SHOW CREATE TABLE
结果如下:
CREATE TABLE `UserData` (
`uid` int(11) NOT NULL,
`data` int(11) NOT NULL,
PRIMARY KEY (`uid`,`data`),
KEY `uid` (`uid`),
KEY `data` (`data`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
我需要2个指标导致它是nessecary对我来说,通过uid
和data
值获取数据。
我用INSERT INTO UserData (uid, data) VALUES (1,2),(1,3),(1,10),...
和40000 (uid,data)
对插入数据。
15个并行实例在2小时内插入〜121 000 000行,但我相信它可以更快。
您可能正在运行锁和IO等待。插入行后是否有可能创建索引? – datasage 2013-05-13 02:34:09
我插入了非常大量的数据,数百Gb。事后创建索引需要多长时间? – zavg 2013-05-13 12:23:56
如果你正在做你现在正在做的事情,索引会在每次插入后更新。随着您的表格变大,这些索引更新需要更多时间才能完成,因为可能需要重新制定数据。如果你可以放弃你的索引并在最后添加它们,那么它将一次创建索引。索引仍然可能需要大量时间才能完成,但是如果您在每次插入之后进行更新,索引的数量可能会减少。 – datasage 2013-05-13 13:35:06