我切換到使用PDO持久連接。我遇到了以下情況:MySQL(正確)在其端點關閉連接(由於處於非活動狀態),並且PDO沒有啓動它,將連接保留在其緩存中,並且從此開始 - 任何嘗試使用此連接的結果失敗了。PDO是否關閉永久連接?
從我讀過的這種行爲是「通過設計」(對我來說,看起來PDO正在走出不支持持續連接的方式)。
無論哪種方式,我想知道PDO是否會在之前關閉其連接池。我知道它不檢查連接的狀態,但是有沒有任何種類的定時器或定期清理,可配置或硬編碼?
我切換到使用PDO持久連接。我遇到了以下情況:MySQL(正確)在其端點關閉連接(由於處於非活動狀態),並且PDO沒有啓動它,將連接保留在其緩存中,並且從此開始 - 任何嘗試使用此連接的結果失敗了。PDO是否關閉永久連接?
從我讀過的這種行爲是「通過設計」(對我來說,看起來PDO正在走出不支持持續連接的方式)。
無論哪種方式,我想知道PDO是否會在之前關閉其連接池。我知道它不檢查連接的狀態,但是有沒有任何種類的定時器或定期清理,可配置或硬編碼?
人們不應該擔心連接的持久性。
如果您正在構建一個網頁 - 它應該在連接超時之前完成。
如果您有一個長時間運行的應用程序沒有觸及數據庫的時間跨度很長,那麼請考慮重新安排代碼或關閉並重新打開或發現它已關閉並重新打開。
請注意,連接可能會因爲任何原因而關閉 - 許多原因與網絡中的打嗝有關。因此,應用程序應該準備好從關閉的連接中恢復,無論它聲稱如何「持久」。
「連接池」在許多層次上處理 - 在客戶端庫中,在「代理服務器」中,即使在MySQL服務器中。他們的行爲不同。
連接池並不是那麼有用。事實上,我追逐的每個性能問題都與不是有關[重新]建立連接所需的時間。
其他RDBMS供應商的連接時間極其緩慢,導致業界發明連接池和持久連接。但MySQL對這種需求不大。
有幾個超時可觸發關閉連接;您受DBA/SE/Cloud提供程序的限制,即它們設置了哪些值。
PDO只是衆多圖層中的一個,所以您的問題太窄了。我希望我提供了更廣泛的答案。
如果您希望保持與數據庫的工作連接,您必須不時在PHP中手動ping連接。 MySQL關閉非活動連接的時間可以在MySQL配置中更改 –
有關某些錯誤消息,您會得到什麼? –
@YourCommonSense嘗試使用已關閉的連接時出現的錯誤類似於「MySQL服務器已經消失」。 – obe