我有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个索引,因为我无法按uid
和data
值获取数据。
我使用INSERT INTO UserData (uid, data) VALUES (1,2),(1,3),(1,10),...
和40000 (uid,data)
对插入数据。
15个并行实例在2小时内插入~112 000 000行,但我相信它可以更快。
答案 0 :(得分:0)
我可以在这些方面感受到问题:
第1点)t1.micro是突发实例,通常适用于spikey计算工作负载。由于您曾提到过,您将继续使用它进行数据库查询/事务处理,因此可能会降低整体性能。请将实例类型更改为更好的可预测值。
第2点)m2.xlarge和t1.micro具有有限的NW带宽容量。如果您使用DB进行交易/查询的数据量(以MB /秒为单位)高于NW带宽容量,那么您也可以观察到吞吐量降低。想象一下,如果15 t1.micro试图推动100MB /秒,它可能比t1.micros和数据库实例类型之间存在的NW管道更多