我有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