2011-07-28 50 views
2

我試圖將一個非常大的MySQL轉儲文件導入到新的MySQL服務器中。然而,在某一點之後,它似乎陷入了沉寂。我大約有2.5億行,而且它需要10-12秒才能運行一個轉儲線。它似乎掛在「更新」上。緩慢導入大型MySQL轉儲

我是否錯過了一些我應該做的事使這個導入更快?這是一個相當結實的服務器,所以我不認爲這是I/O ..

+4

你是怎麼輸入這個的?也許你可以把所有的外鍵檢查導入以加快速度? – Jacob

+0

你沒有詳細說明你實際在做什麼。你在使用LOAD DATA INFILE嗎?你正在運行一堆INSERT或UPDATE查詢嗎?如果是這樣,他們看起來像什麼?什麼是你正在更新的表格模式? – TehShrike

+0

我正在從MySQL命令提示符下運行它,並將這個文件傳輸到那個文件中。這是一堆INSERT。非常基本的表,沒有外鍵。 –

回答

0

對於我來說,使用「健壯」的服務器似乎有什麼用,是將文件分割成幾個較小的文件並將它們全部並行導入。儘管這可能會破壞你的排序。 (並且結果可能因存儲引擎而異)

IIRC有某種腳本可以這樣做,但它沒有維護。所以當我搞砸的時候,我只用了頭/尾和管道。

如果你插入到多個表中,而不是使用外鍵,我可能可以爲你提供我簡單的perl腳本,用於將一個大轉儲分割成每個錶轉儲,而這些轉儲又可以並行導入。

另外this可能會有所幫助。可以手動完成(在開始處插入disable並在轉儲文件的結尾處啓用)或轉儲數據庫。這應該會加快插入速度,但建立索引需要一段時間。

1

如果你確定你的數據是正確的,請嘗試禁用外國支票所以這個過程可以加快:

SET @@FOREIGN_KEY_CHECKS = 0; 
+0

感謝提示;在查詢開始時我必須這樣做嗎?還是在過程中我可以做些什麼?換句話說,它會在下一行生效嗎? –

+0

是的,它會在你執行後生效 –

+0

不幸的是,它似乎沒有幫助。 –