如何在最长执行时间为30秒的情况下在php中执行冗长的任务?

时间:2013-09-18 21:15:55

标签: php mysql

我正在将数据从文本文件解析为mysql数据库。问题是,在解析了一定数量的记录(从250,000到380,000之间)后,我得到Fatal error: Maximum execution time of 30 seconds exceeded。我可以通过将文件拆分成较小的文件来解决这个问题,但这很痛苦,我想找到一种方法来欺骗PHP来处理整个文件。

有没有办法说服PHP运行冗长的进程,即使我无法访问php.ini并且无法更改我的最长执行时间?

顺便说一下,here's my parsing script。也许我的PHP代码做错了。

1 个答案:

答案 0 :(得分:0)

您可能会发现可以通过一次插入多个行来提高性能。试试这个语法:

INSERT INTO
    tbl_name (a,b,c)
    VALUES(1,2,3),(4,5,6),(7,8,9)
;

您应该组合在一起的行数最好通过实验找到。可能是您在一个语句中添加的越多,它就越快,但如果您没有启用自动提交,则同样可能会很慢。

正如有人在评论中提到的那样,一次放入太多内容可能会最大化CPU,并引起服务器管理员的注意。如果您需要在主机上小心,请一次尝试200,然后在迭代之间尝试小usleep

值得查看与数据库的连接 - 这是在同一台服务器上,还是在另一台服务器上?连接可能很慢。添加一些时间,例如,插入5000行需要多长时间,然后四处寻找如何减少它。

以下是INSERT的{​​{3}};请注意,这是非标准SQL,并且不适用于其他数据库引擎。