2012-07-19 164 views
1

我對PHP中持久數據庫連接存在一些疑問。PHP中的持久數據庫連接

我知道使用持久連接可能很有效,因爲每個需要與同一主機/用戶建立連接的PHP進程都可以共享該連接,而無需重新建立連接。

我不確定最新的實現引入了克服未知連接狀態問題的功能。

但是!如果我有10萬個進程共享相同的連接,這將會降低我的應用程序的性能,因爲它們只能一次使用一個連接!這是真的還是我錯了?

+0

如果它創建了10萬個非持續連接,那麼你的性能將會怎樣! – Rikesh 2012-07-19 15:57:02

+2

10k連接我會使用負載均衡mysql集羣 – MilMike 2012-07-19 15:58:34

+0

你的意思是10K獨特的查詢,如果結果沒有改變,以前提交的查詢可能會被緩存,所以它會更快地返回結果並繼續下一個查詢 – Gntem 2012-07-19 16:01:45

回答

1

在任何情況下使用永久連接都會更快,因爲您可以節省建立連接的開銷。

使用持久連接不會限制您到單個連接,您可以擁有包含100個或1000個持久連接的連接池。

處理10000個並行查詢需要採取一些負載平衡和數據庫集羣,但是如果您嘗試同時通過它推送10k查詢,則單個數據庫將與非持久連接和持久連接重載。

1

如果您實際上有10k個進程查詢數據庫,持久連接(特別是建立連接)所帶來的效率優勢將會非常巨大。

假設您在Apache下運行PHP,第一次建立SQL連接時,Apache「子進程」將保持其打開狀態(即 - 持久連接)。如果連接信息與當然相同,則屬於該特定「Apache子進程」的所有PHP請求都將重用該連接。 Apache的配置定義了單個子進程在重新啓動之前可以處理多少個請求 - 它應該清除持久連接。

現在,還有一種情況是您正在循環中運行查詢甚至是 - 我敢說它是一個無限循環。在這種情況下,即使是非持久連接也是致命的。

使用持久連接的進程數量將成爲服務器效率的一個因素(除非,正如我所提到的,您使用查詢有一些無效代碼),這值得懷疑。應該關注的是應該允許多少個持續連接以及數據庫/服務器可以處理多少個連接?

持久連接的MySQL手冊http://php.net/manual/en/features.persistent-connections.php也覆蓋了我剛剛總結的大部分(以及更多)內容。