2016-05-02 249 views
0

我有我的Linux機器上運行的MySQL/PHP腳本。它基本上將文件內容遷移到MySql表。大約有4400,000個文件,每個文件的內容都被放置在一個表中的一行中。它已經14個小時,迄今爲止它只完成了300,000個賬戶。提高mysql速度?

起初它非常快,每秒處理大約1000個文件,現在每秒減少到50個文件,而且mysql進程佔用了95%的服務器CPU。

雖然該機器有多個核心,我在想如果它可能分配多個核心到MySQL進程佔用95%的CPU。
或者還有其他方法可以使流程更快嗎?

謝謝。

這裏是腳本 https://paste.ee/p/LZwlH#GHxpgqiUUPsVQFchdKVny2DEJQxaXH9V

+0

您需要顯示MySQL表結構/索引,正在執行的代碼,正在執行的查詢等。如果沒有代碼/表模式,這是任何人的猜測至於問題是什麼。 – Marcus

+0

我已將鏈接添加到腳本粘貼。請檢查,謝謝 –

+0

仍然沒有表架構。是'p_name'索引?隨着表的增長,如果不是這樣,你的'SELECT'查詢將變得越來越慢。如果你實際上不需要所有列,請不要使用SELECT *。如果您只需檢查記錄是否存在,請選擇主鍵。 – Marcus

回答

0

使用mysql_* API。切換到mysqli_*PDO

請提供這些:

SHOW CREATE TABLE 
SHOW VARIABLES LIKE '%buffer%'; 

select * from players where p_name=' - 沒有必要選擇*,只需SELECT 1。你有p_name的索引嗎?這非常重要。

它聞起來像索引更新,但不能確定。

加快插入速度的一種方法是「批量化」它們 - 每次100行一次的運行速度通常是1次的10倍。

更好的可能是使用LOAD DATA。您可能需要加載到臨時表中,然後在執行INSERT .. SELECT ..以將數據放入真實表格之前進行按摩。

暫時從程序中刪除INSERT。看看它跑得有多快。 (您還沒有'證明'INSERT是惡棍。)