批量INSERT来自多个主机的性能优化

时间:2013-05-12 23:44:07

标签: mysql performance amazon-web-services amazon-ec2 amazon-rds

我有15个Amazon AWS EC2 t1.micro注释,它们使用大INSERTs(查询中40000行)同时填充Amazon RDS MySQL d2.m2.xlarge数据库。

查询会不断发送。该表是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个索引,因为我无法按uiddata值获取数据。

我使用INSERT INTO UserData (uid, data) VALUES (1,2),(1,3),(1,10),...和40000 (uid,data)对插入数据。

15个并行实例在2小时内插入~1​​12 000 000行,但我相信它可以更快。

1 个答案:

答案 0 :(得分:0)

我可以在这些方面感受到问题:

第1点)t1.micro是突发实例,通常适用于spikey计算工作负载。由于您曾提到过,您将继续使用它进行数据库查询/事务处理,因此可能会降低整体性能。请将实例类型更改为更好的可预测值。

第2点)m2.xlarge和t1.micro具有有限的NW带宽容量。如果您使用DB进行交易/查询的数据量(以MB /秒为单位)高于NW带宽容量,那么您也可以观察到吞吐量降低。想象一下,如果15 t1.micro试图推动100MB /秒,它可能比t1.micros和数据库实例类型之间存在的NW管道更多