0

我有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對我來說,通過uiddata值獲取數據。

我用INSERT INTO UserData (uid, data) VALUES (1,2),(1,3),(1,10),...和40000 (uid,data)對插入數據。

15個並行實例在2小時內插入〜121 000 000行,但我相信它可以更快。

+0

您可能正在運行鎖和IO等待。插入行後是否有可能創建索引? – datasage 2013-05-13 02:34:09

+0

我插入了非常大量的數據,數百Gb。事後創建索引需要多長時間? – zavg 2013-05-13 12:23:56

+0

如果你正在做你現在正在做的事情,索引會在每次插入後更新。隨着您的表格變大,這些索引更新需要更多時間才能完成,因爲可能需要重新制定數據。如果你可以放棄你的索引並在最後添加它們,那麼它將一次創建索引。索引仍然可能需要大量時間才能完成,但是如果您在每次插入之後進行更新,索引的數量可能會減少。 – datasage 2013-05-13 13:35:06

回答

0

我可以在這些領域的感知問題:

點1)t1.micro被爆實例,它通常用於spikey計算負載好。既然你已經提到過,你將繼續使用它來進行數據庫查詢/事務處理,它可能會降低整體性能。請將實例類型更改爲更好的可預測的類型。

點2)m2.xlarge和t1.micro帶有有限的NW帶寬容量。如果您使用數據庫進行交易/查詢的數據量(以MB /秒爲單位)高於NW帶寬容量,那麼您也可以觀察到吞吐量降低。想象一下,如果15個t1.micro試圖推動100MB /秒,它可能比t1.micros和數據庫實例類型之間存在的NW管道多

+0

所以這個想法是將我的MySQL服務器分成幾個,從而平衡流量? – zavg 2013-05-13 14:43:28

+0

關於第1點:當只有一個t1.micro運行時,它將數據非常快地推入數據庫。 – zavg 2013-05-13 15:12:42