關於PHP+MYSQL 批次更新多筆資料產生的問題

如標題:關於PHP+MYSQL 批次更新多筆資料產生的問題

小弟本身設計一資料庫系統,也於國外的hosting24註冊付費空間使用。

大致上的使用上都是正常沒有問題的,但以下困擾一直無法解決,希望有經驗的前輩能夠指教。

問題:

使用FOREACH做迴圈UPDATE MYSQL,當批次更新資料筆數少於500(大約是這數目)筆時,是完全沒有問題可以批次更新的。

但是一旦批次更新數目大於500筆(大約是這數目或是更多),則更新失敗,所謂更新失敗指的是似乎是完全沒有執行到更新指令,原資料原封不動,請問是那邊需要設定?該如何設定?

補充說明:有在個人電腦上架設的APPSERV環境做過測試,無論更新多少筆(大於500筆或是上千筆)都是可以正常批次更新沒有問題的,更新速度也是相當之快,我想批次更新的程式碼部分應該是沒問題的,此方面可以排除。唯有上傳到網路空間上,才會產生無法批次更新大於一定數量。

請問前輩,該朝哪個方向去做故障排除?如果是伺服器設定的問題,可否點出是哪一個設定值需要做更改,好讓我更網路空間商提出要求,抑或者說可以從程式指令碼下手?添加指令碼達成目的?

請多多指教,謝謝



2013-06-12 19:55 發佈

荒野遊龍 wrote:
也於國外的hosting24註冊付費空間使用。

這就是問題,google一下hosting24 scam就知道,爛到爆的service。

不要浪費你的時間,找個好的hosting service吧。

bazinewbie wrote:
這就是問題,goog...(恕刪)


謝謝大大指教,礙於已經續費(還有半年多使用時間)也不是說換就換,而且價格還算便宜,使用2年來沒其他狀況,其他工作都可以順利完成,就是最近出現這批次更新問題讓人困擾。

小弟的英文程度中下,不太懂HOSTING24是怎麼樣的騙局?是否可以請大大提示一下?

回題目:是否是因為伺服器商設定有所限制,可否提示是哪一個MYSQL參數的限制所導致的呢?

題外話:如果是其他HOSING的話,大大建議哪一間伺服器商值得推薦的,價格不要相差太多,畢竟是個人工作室使用非大量商業用途,能省則省,15美金/月左右都還能接受。

再次謝謝指教
1. 程式寫法調整
2. 聯絡hosting,詢問此問題是否可以幫你調整設定參數
3. 換一間

荒野遊龍 wrote:
謝謝大大指教,礙於已...(恕刪)

荒野遊龍 wrote:
如標題:關於PHP+...(恕刪)


1.拆成小於500筆的筆數逐次更新 (畢竟主機商不太會白白地將全部的系統資源都給你用)
(建議不要依據內測結果, 畢竟是自己熟悉的環境)

2.程式優化 (如果無法變更主機資料庫設定話)

3.跟樓上一樣, 換一間 (盡量找VPS的供應商, 至少設定可以自己改)
荒野遊龍 wrote:
謝謝大大指教,礙於已...(恕刪)

Another horror story about 000webhost.com and hosting24.com。基本上,只要loading大一點,馬上就出問題。這是無解。

php hosting service,我沒用過,所以不敢推薦。
但我個人還滿喜歡nearlyfreespeech,service非常好,不過他的charge是用多少算多少。

如果是vps,linode, rackspace都不錯。我目前喜歡用amazon aws。不過這都需要自己管理server,比較麻煩。

yhls810187 wrote:
1.拆成小於500筆...(恕刪)


方法1有嘗試做少量的逐次更新,但似乎還是無法解決。似乎是程式的執行時間不夠?或者具體說起來是伺服器端程式並沒有跑完就終止了。

但不解的是,程式也不是跑一半就終止,而是筆數少時,全部都可以跑過,但若筆數過多就乾脆全部都不跑?(因為原資料上是沒有任何異動的,也不會因為如此而導致資料錯誤)

有大大知道是哪一個伺服器參數來用來判斷程式的多寡(或者說是快取?),而執不執行的嗎?

知道參數是哪個,我可以試圖與服務商聯絡是否能作調整。

方法2.程式優化具體指的是什麼?是加入程式碼,可以做出類似調整伺服器端設定的動作嗎?是否可舉例?小弟不太明白還請大大指教。

若真不能解決,等這會期結束真的要考慮換了,

再次謝謝大大指教。

bazinewbie wrote:
Another ho...(恕刪)


謝謝大大的建議,小弟會納入參考

如果是負載過大所造成的,那這服務器還真的是讓人啞口無言(不過才超過500筆就跑不來),也許一分錢一分貨吧。

目前還是傾向能從程式端做解決,是否程式端方面做怎麼樣的改良可以處理?
(不過我想FOREACH函數以迴圈來說應該已經夠效率,小弟程度不夠不知是否還有更佳的PHP批次更新方式)


請用phpinfo()檢查二個設定
1. 主機的max_execution_time 是不是太短
2. memory_limit 大小
3. post_max_size 是不是太小

如果foreach 是每筆寫入一次, 那應該不會寫不成功,
如果是整批送出時就全部不執行

那很能是 post_max_size超出限制
所以全部都不接收了


edwintsai wrote:
請用phpinfo檢...(恕刪)


謝謝大大的指教,小弟已發現問題原因:

確實是伺服器的"post_max_size"設定太小所導致,原設定只有8M,難怪整批交件出去的資料超過就無法執行。

經過與HOSTING24的管理員多次溝通,根據他們的說法,因"效能問題"所以不提供修改"post_max_size",最大就是"8M"。

天啊,難怪上面有大大說超爛,現在真的感覺到了,只有"8M"隨便的批次更新交件都很容易超過。HOSING24真是太令人失望。

為了這問題,立馬申請了另一個美國主機HOSTMONSTER,網路上的風評很好,價錢也差不多,很合理。最重要的是它提供了"php.ini"的自訂,現在發現這功能真的十分重要,立刻修改"post_max_size"到150M,小弟的問題迎刃而解了。

再次感謝以上大大撥空指導,也在這邊提醒若有要租用美國主機的,千萬別選hosting24,伺服器的限制會任你欲哭無淚阿!

內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?