2010-09-02 83 views
4

我有一个加载〜5000-8000对象之间的脚本,对它们执行一些逻辑,然后尝试插入/更新MySQL表。〜2500查询后PHP/MySQL脚本挂起

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

在所有查询之后,我已经将mysql_error语句与退出命令放在一起,并且它们从不触发。我也设置了

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

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

你会用什么类型的技术来描述这个bug?

+0

发布代码? – 2010-09-02 22:05:41

回答

1

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

除此之外,唯一的另一种方法是错开插入,如2200查询,然后做一个页面重新加载头重定向加载下一个集等等(存储最后一个ID或在会话中唯一的东西在恢复)。另外,如果你可以做查询扩展插入,并且一次加载大约500个,那也是有帮助的。我一次说500个,因为根据数据的大小,如果您尝试通过扩展插入一次输入太多数据,MySQL会打嗝。

+0

我要读取加载数据infile,因为我不知道它,看看如何结果。我将重定向作为最后的手段。扩展插入让我进一步执行脚本,但它仍然停止执行。谢谢+1 – krx 2010-09-02 20:10:43

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

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

+0

同样的事情发生,因为我刚刚从命令行尝试。根据您的帮助,配置中会显示更改。感谢您的建议+1 – krx 2010-09-02 20:09:05