我對PHP中持久數據庫連接存在一些疑問。PHP中的持久數據庫連接
我知道使用持久連接可能很有效,因爲每個需要與同一主機/用戶建立連接的PHP進程都可以共享該連接,而無需重新建立連接。
我不確定最新的實現引入了克服未知連接狀態問題的功能。
但是!如果我有10萬個進程共享相同的連接,這將會降低我的應用程序的性能,因爲它們只能一次使用一個連接!這是真的還是我錯了?
我對PHP中持久數據庫連接存在一些疑問。PHP中的持久數據庫連接
我知道使用持久連接可能很有效,因爲每個需要與同一主機/用戶建立連接的PHP進程都可以共享該連接,而無需重新建立連接。
我不確定最新的實現引入了克服未知連接狀態問題的功能。
但是!如果我有10萬個進程共享相同的連接,這將會降低我的應用程序的性能,因爲它們只能一次使用一個連接!這是真的還是我錯了?
在任何情況下使用永久連接都會更快,因爲您可以節省建立連接的開銷。
使用持久連接不會限制您到單個連接,您可以擁有包含100個或1000個持久連接的連接池。
處理10000個並行查詢需要採取一些負載平衡和數據庫集羣,但是如果您嘗試同時通過它推送10k查詢,則單個數據庫將與非持久連接和持久連接重載。
如果您實際上有10k個進程查詢數據庫,持久連接(特別是建立連接)所帶來的效率優勢將會非常巨大。
假設您在Apache下運行PHP,第一次建立SQL連接時,Apache「子進程」將保持其打開狀態(即 - 持久連接)。如果連接信息與當然相同,則屬於該特定「Apache子進程」的所有PHP請求都將重用該連接。 Apache的配置定義了單個子進程在重新啓動之前可以處理多少個請求 - 它應該清除持久連接。
現在,還有一種情況是您正在循環中運行查詢甚至是 - 我敢說它是一個無限循環。在這種情況下,即使是非持久連接也是致命的。
使用持久連接的進程數量將成爲服務器效率的一個因素(除非,正如我所提到的,您使用查詢有一些無效代碼),這值得懷疑。應該關注的是應該允許多少個持續連接以及數據庫/服務器可以處理多少個連接?
持久連接的MySQL手冊http://php.net/manual/en/features.persistent-connections.php也覆蓋了我剛剛總結的大部分(以及更多)內容。
如果它創建了10萬個非持續連接,那麼你的性能將會怎樣! – Rikesh 2012-07-19 15:57:02
10k連接我會使用負載均衡mysql集羣 – MilMike 2012-07-19 15:58:34
你的意思是10K獨特的查詢,如果結果沒有改變,以前提交的查詢可能會被緩存,所以它會更快地返回結果並繼續下一個查詢 – Gntem 2012-07-19 16:01:45