基本上我的問題是,我有一個大約17,000,000種產品的大表,我需要應用一堆更新來真正快速。Mysql InnoDB和快速應用大型更新
該表有30列,id設置爲int(10)AUTO_INCREMENT。
我有另一個表格,這個表格的所有更新都存儲在這裏,這些更新必須預先計算,因爲他們需要幾天的時間來計算。該表的格式爲[product_id int(10),update_value int(10)]。
我正在採取的快速發佈這1700萬次更新的策略是,將所有這些更新加載到ruby腳本的內存中,並將它們分組到數組的散列中,以便每個update_value都是一個鍵,每個數組都是一個鍵已排序的product_id的列表。
{
150: => [1,2,3,4,5,6],
160: => [7,8,9,10]
}
更新,然後在
UPDATE product SET update_value = 150 WHERE product_id IN (1,2,3,4,5,6);
UPDATE product SET update_value = 160 WHERE product_id IN (7,8,9,10);
格式出具我敢肯定,我在這個意義上正確地做這個是發佈關於PRODUCT_ID的能跟批次的更新應該是最佳方式用mysql/innodb來做到這一點。
我遇到了一個奇怪的問題,雖然當我測試更新~13萬條記錄時,這隻需要大約45分鐘。現在我正在測試更多的數據,約1700萬條記錄,並且更新時間接近120分鐘。我本來會期望某種速度在這裏下降,但不會達到我所看到的程度。
任何關於如何加快速度的建議或者可能會使這個更大的記錄集放慢速度的建議?
就服務器規格而言,它們非常好,內存/ CPU的堆,整個數據庫應該適合內存有足夠的空間來增長。
您是否調整了您的innodb_ *設置,以利用您的「堆內存」優勢? – hexist
是的,服務器傢伙有一個調整得相當好。 – Marklar