php - 当最大执行时间为 30 秒时,如何在 php 中执行冗长的任务?

标签 php mysql

我正在将数据从文本文件解析到 mysql 数据库。问题是,在解析了一定数量的记录(从 250,000 到 380,000 之间的任意位置)后,我得到了 fatal error :超过 30 秒的最大执行时间。我可以通过将文件拆分成更小的文件来解决这个问题,但这很痛苦,我想找到一种方法来欺骗 PHP 处理整个文件。

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

顺便说一下,here's my parsing script .也许我的 php 代码有问题。

最佳答案

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

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

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

正如有人在评论中提到的,一次放入太多可能会耗尽 CPU,并引起服务器管理员的注意。如果这是您需要在主机上小心处理的事情,请一次尝试 200,然后在迭代之间进行一个小的 usleep

同样值得查看与您的数据库的连接 - 这是在同一台服务器上,还是在另一台服务器上?连接速度可能很慢。添加一些计时,例如,插入 5,000 行需要多长时间,然后尝试看看如何减少它。

这是 manual reference对于插入;请注意,这是非标准 SQL,不适用于其他数据库引擎。

关于php - 当最大执行时间为 30 秒时,如何在 php 中执行冗长的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18882490/

相关文章:

mysql - 如何将 mysql 列的默认值设置为 unix_timestamp?

mysql - 从 MySQL 迁移到 NoSQL 的例子?

mysql - 如果在插入时为空,node-mysql 使用默认值

php - 如何使用 javascript 动态更改 HTML 值

php - 如何在 Laravel 中将时间作为输入?

php - 如何防止跨域ajax请求?

php - mysqli_connect() 导致 fatal error - PHP

mysql - MySQL如何设置初值和自增?

php - 使用 jquery 的 .error() 进行多次 PHP 数据库更新

PHP递归函数不循环更深