PHP數據庫永久連接

PHP使用永久連接方式操作MySQL是有前提的:就是PHP必須安裝爲多線程或多進程Web服務器的插件或模塊。最常見的形式是把PHP用作多進程Apache服務器的一個模塊。對於一個多進程的服務器,其典型特徵是有一個父進程和一組子進程協調運行,其中實際生成Web頁面的是子進程。每當客戶端向父進程提出請求時,該請求會被傳遞給還沒有被其它的客戶端請求佔用的子進程。這也就是說當相同的客戶端第二次向服務端提出請求時,它將有可能被一個不同的子進程來處理。在開啓了一個永久連接後,所有不同子進程請求SQL服務的後繼頁面都能夠重新使用這個已經建立的 SQL服務器連接。它使得每個子進程在其生命週期中只做一次連接操作,而非每次在處理一個頁面時都要向 SQL 服務器提出連接請求。每個子進程將對服務器建立各自獨立的永久連接。PHP本身並沒有數據庫連接池的概念,但是Apache有進程池的概念, 一個Apache子進程結束後會被放回進程池, 這也就使得用mysql_pconnect打開的的那個mysql連接資源可以不被釋放,而是依附在相應的Apache子進程上保存到了進程池中。於是在下一個連接請求時它就可以被複用。一切看起來似乎都很正常,但是在Apache併發訪問量大的時候,如果使用mysql_pconnect,會由於之前的Apache子進程佔用的MySQL連接沒有close, 很快使MySQL達到最大連接數,使得之後的請求可能得不到響應。

主要是數據庫負載和Web服務器負載之間的協調問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章