PHP / MySQL脚本在~2500次查询后挂起

时间:2010-09-02 19:03:56

标签: php mysql

我有一个脚本,可以加载~5000-8000个对象,对它们执行一些逻辑,然后尝试插入/更新MySQL表。

在大约2500次查询之后,数据库停止执行查询,并且脚本只是挂起而没有抛出错误。我需要建议你在这种情况下会做些什么。服务器是一个Windows框,如果这有所作为。我在PHP5中使用mysql_connect。

我已经在所有查询之后使用exit命令放置了mysql_error语句,并且它们从不触发。我也设置了

set_time_limit(0);
ini_set("memory_limit", "256M");
error_reporting(E_ALL | E_STRICT);

试图抛出更多错误。什么都没发生,没有错误,也没有完成执行。它停止的行也是随机的,没有任何独特之处,因为它总是在停止之前更新的不同行。

您会使用哪种技术来分析此错误?

2 个答案:

答案 0 :(得分:2)

  1. 您不应该通过apache执行长时间运行的任务。从命令行运行它。

  2. 如果您真的想这样做,请设置“max_execution_time”并运行phpinfo()函数以查看您的配置设置是否真的发生了。根据您的服务器,甚至不允许您更改脚本的执行时间。如果是这种情况,请致电您的托管公司,询问他们是否可以为您更改。

答案 1 :(得分:1)

您是否可以使用LOAD DATA INFILE加载数据?这将需要访问服务器上的mysql控制台。如果可以的话,那将是最佳选择。

除此之外,唯一的另一种方法是交错插入所以运行,比如说2200个查询然后用页面重定向进行页面重定向以加载下一个集合等(将最后一个id或者会话中的唯一内容存储到简历)。

另外,如果您可以进行查询EXTENDED INSERTS并且一次加载大约500个,那么这也会有所帮助。我一次说500个因为根据数据的大小,如果你试图通过扩展插入一次输入太多数据,MySQL会打嗝。