我試圖插入大約5億行垃圾數據到數據庫中進行測試。現在我有一個PHP腳本循環遍歷TRANSACTION
中的幾個SELECT/INSERT
語句 - 顯然這不是最好的解決方案。這些表是InnoDB(行級鎖定)。Fork MySQL INSERT INTO(InnoDB)
我想知道如果我(正確)分叉進程,這會加快INSERT
進程嗎?按照它的速度,它將需要140小時才能完成。我擔心兩件事情:
如果
INSERT
語句必須獲取寫鎖,然後將它呈現分叉沒用,因爲多個進程不能同時寫入同一個表?我使用
SELECT...LAST_INSERT_ID()
(在TRANSACTION
內)。在數據庫中有多個進程INSERT
時,此邏輯會中斷嗎?我可以爲每個叉創建一個新的數據庫連接,所以我希望這可以避免這個問題。我應該使用多少個進程?查詢本身很簡單,我有一個2GB RAM的常規雙核開發盒。我將InnoDB設置爲使用8個線程(
innodb_thread_concurrency=8
),但我不確定是否應該使用8個進程,或者如果這是考慮匹配的正確方法。
感謝您的幫助!
感謝您的詳細回覆!很高興知道沒有什麼值得關注的。 – ash 2009-09-02 16:35:17