我在php脚本中使用LOAD DATA LOCAL INFILE,因此用户可以将csv文件加载到MySQL中(所有数据都已预先转义),这是好的和快速的,但是当脚本执行此操作时,它& #39;在进程发生时将CPU负载加重到100% - 有时长达2-3分钟。
csv文件最多包含5000行。
我认为问题的一部分是表现在已经有3000万行了,所以重新索引会使问题复杂化。
有没有办法通过php脚本告诉MySQL限制负载?
谢谢你看看。
答案 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)
首先尝试导入唯一的数据结构,然后尝试导入可避免延迟或连接丢失的数据。
尝试以块的形式导入数据,而不是一次导入所有数据。这可以帮助您高效,快速地导入数据。