2010-09-02 39 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