2016-05-02 38 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是恶棍。)