【问题标题】:How to limit the CPU load when using LOAD DATA LOCAL INFILE to load csv files into MySQL?使用 LOAD DATA LOCAL INFILE 将 csv 文件加载到 MySQL 时如何限制 CPU 负载?
【发布时间】:2015-11-24 06:57:20
【问题描述】:

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

csv 文件最多为 5000 行。

我认为部分问题在于表现在很大,超过 3000 万行,因此重新编制索引会使问题更加复杂。

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

感谢观看。

【问题讨论】:

    标签: php mysql csv load


    【解决方案1】:

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

    proc_nice(10);
    

    根据您运行脚本的环境,您可能需要在脚本末尾使用proc_nice(0); 将优先级设置回正常,以避免 PHP 卡在低优先级。

    一种更简单且麻烦更少的方法可能是在每个循环的末尾添加一个sleep() 命令,以便处理器有机会执行其他任务:

    sleep(1);
    

    【讨论】:

    • 感谢山羊大师。我会进一步研究它,看看 proc_nice 是否可以加载限制特定的 MySQL LOAD DATA,而不仅仅是 php 脚本。
    【解决方案2】:

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

    尝试分块导入数据,而不是一次全部导入。这可以帮助您高效、快速地导入数据。

    【讨论】:

    • 谢谢马克龙。我明白你的意思,但即使一次将其分块为几千行也会导致长时间等待(2-3 分钟),而 MySQL 正在重新索引,然后才能上传下一个 csv 文件。此外,在重新索引期间,CPU 负载会飙升至 100%。
    猜你喜欢
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 2017-04-12
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    相关资源
    最近更新 更多