我有一个进程,它将 1000 万条记录插入到 mysql db 中,并在具有 (4 * 2.13GHz 处理器 + 4 GB 内存) 的 Linux 机器上运行。现在需要大约 2 小时才能完成,我不确定该进程是否利用了所有处理器。使用 top 我增加了优先级 (reniced 到 -20),运行时间缩短到 20 分钟。
我想让该过程利用所有处理器,并且想知道可以使用什么工具来查找它?
还有其他方法可以给我正在运行的进程投入更多的 CPU/内存并提高执行速度吗?
答案1
您知道如果此进程是单线程的,则它只能在单个核心上运行,对吗?除非您使用的程序是多线程的(或您编写的程序是多线程的),否则可以肯定它不会使用所有 CPU。快速谷歌搜索一下,如果您成功进行多线程插入,您还可能会遇到死锁,具体取决于您的数据库结构。这里还有一些其他建议:使用批量加载器。
如果这些还不足以帮助您,请告诉我们您试图解决的实际问题。您需要在 20 分钟内完成插入吗?少于 10 分钟?少于 5 分钟?您正在解决什么业务问题,或者您在工作中遇到了哪些限制?
答案2
我想让该过程利用所有处理器,并且想知道可以使用什么工具来查找它?
分割你的输入集。