使用LOAD DATA LOCAL INFILE将csv文件加载到MySQL时如何限制CPU负载?

时间:2015-11-24 06:57:20

标签: php mysql csv load

我在php脚本中使用LOAD DATA LOCAL INFILE,因此用户可以将csv文件加载到MySQL中(所有数据都已预先转义),这是好的和快速的,但是当脚本执行此操作时,它& #39;在进程发生时将CPU负载加重到100% - 有时长达2-3分钟。

csv文件最多包含5000行。

我认为问题的一部分是表现在已经有3000万行了,所以重新索引会使问题复杂化。

有没有办法通过php脚本告诉MySQL限制负载?

谢谢你看看。

2 个答案:

答案 0 :(得分:2)

在基于Linux的服务器上,您可以使用PHP的proc_nice()功能来降低优先级,尽管存在一些限制:

a = 'abccac'.chars
# => ["a", "b", "c", "c", "a", "c"]

a.group_by(&:???)
# should produce...
# { "a" => ["a", "a"],
#   "b" => ["b"],
#   "c" => ["c", "c", "c"] }

根据您运行脚本的环境,您可能需要使用proc_nice(10); 将脚本末尾的优先级恢复为正常,以避免PHP陷入低优先级。

更轻松&更麻烦的方法可能是在每个循环结束时简单地添加sleep()命令,以便处理器有机会执行其他任务:

proc_nice(0);

答案 1 :(得分:2)

首先尝试导入唯一的数据结构,然后尝试导入可避免延迟或连接丢失的数据。

尝试以块的形式导入数据,而不是一次导入所有数据。这可以帮助您高效,快速地导入数据。

相关问题