MySQL具有強制執行最大連接數的功能,max_user_connections。PHP到MySQL連接:等到連接可用時,而不是拋出「max_user_connections超出」錯誤?
從PHP(和other languages)連接時,如果您超過該數字,我的理解是您的連接將失敗,並顯示錯誤,指出您已超出最大連接數。正確?
我的意願是讓連接呼叫等待(達到某個超時限制)以使連接可用。但是,我一直無法通過閱讀MySQL文檔和搜索網頁來確定一種方法。
我擔心的是,如果我們的網絡應用流量氾濫,導致大量的MySQL連接嘗試同時發生,我們的一些用戶腳本將以錯誤結束。當然,我們可以修改調用代碼以嘗試重新連接達到特定次數,但如果我們可以修改連接嘗試本身來處理此操作,而不必將每個「連接」調用包裝在一個循環。此外,循環不會導致真正的FIFO隊列,因爲每個單獨的調用線程都會等待一段時間並再次嘗試,並且它是否獲得連接取決於在該特定時刻是否有連接可用。然後再等待,等待連接可能打開,另一個線程「進一步」可能會抓住它。
因此,當使用任何PHP API連接到MySQL時,有沒有辦法在「等到連接可用」時尚時嘗試連接?
多年來我已經看到這個問題幾十次了。我認爲你的做法有缺陷。原因很可能是編程效率低下,比如查詢花費太長時間(所以優化有問題的查詢或優化表索引等),或者你太頻繁地訪問數據庫並獲取應該緩存的數據。如果你真的需要更多的連接(這是非常令人懷疑的),只需創建一個新用戶並拆分兩個用戶之間的連接即可。 – dataskills
我很欣賞架構反饋,但請記住,在網絡世界中,請求可能會同時發生。如果你碰到10個併發請求,你的max_user_connections是4,你只允許一個用戶(這是最低ClearDB層的情況,btw),那麼你有6個連接太多。您的查詢可能只需25ms即可完成,但如果這十個請求確實是併發的,那麼您有六個請求失敗。 – Josh
另外,這完全是假設。我目前沒有遇到「超出max_user_connections限制」錯誤。我試圖找出避免出現這種情況的最佳策略,並且允許連接請求等待似乎只有一種策略。你提到的其他人,如適當的緩存數據,肯定是有效的,但不是我的問題。 – Josh