php中mysql_connect與mysql_pconncet的用法區別

來源:互聯網
上載者:User
本文為大家介紹php編程中mysql_connect與mysql_pconnect的區別,兩個看著很相似哦,其實功能差別還是很大的。有興趣的朋友,不妨參考下本文的介紹了。

永久串連一樣是每個用戶端來就開啟一個串連,有200人訪問就有200個串連。 mysql_pconnect()本身並沒有做太多的處理, 它唯一做的只是在php運行結束後不主動close掉mysql的串連.

在php經cgi方式運行時pconnect和connect是基本沒有區別的, 因為cgi方式是每一個php訪問起一個進程, 訪問結束後進程也就結束了, 資源也全釋放了. 當php以apache模組方式運行時, 由於apache有使用進程池, 一個httpd進程結束後會被放回進程池, 這也就使得用pconnect開啟的的那個mysql串連資源不被釋放, 於是有下一個串連請求時就可以被複用.這就使得在apache並發訪問量不大的時候, 由於使用了pconnect, php節省了反覆串連db的時間, 使得訪問速度加快. 這應該是比較好理解的. 但是在apache並發訪問量大的時候, 如果使用pconnect, 會由於之前的一些httpd進程佔用的mysql串連沒有close, 則可能會因為mysql已經達到最大串連著, 使得之後的一些請求永遠得不到滿足.若mysql最大串連數設為500, 而apache的最大同時訪問數設為2000,假設所有訪問都會要求訪問db, 而且操作時間會比較長,當前500個請求的httpd都沒有結束的時候,之後的httd進程都是無法串連到mysql的(因已經達到mysql最大串連 數). 只有當前500個httpd進程結束或被複用才可以串連得到了mysql.

當db操作複雜, 耗時較長時, 因httpd會fork很多並發進程處理, 而先產生的httpd進程不釋放db串連, 使得後產生的httpd進程無法連上db. 因為這樣沒有複用其它httpd進程的mysql串連. 於是會就產生很多連線逾時。 在並發訪問量不高時,使用pconnect可以簡單提高訪問速度, 但在並發量增大後, 是否再使用pconnect就要看程式員的選擇了.

php現在對mysql的串連並沒有真正用到串連池, pconnect也只是相當於借了apache的進程池來用, 所以在並發訪問量大的時候pconnect並不能很好的提高訪問db效率.

在實際的應用中,用mysql_pconnect的話,每次重新整理和請求新的頁面都比較快,而用mysql_connect的話,每次重新整理都要重新請求,當資料庫連接比較慢的時候,就能看出差異了。當你的資料庫連接比較慢,DB操作不是很複雜,並且你的程式足夠自信,不會產生死結的時候,或者你擁有對伺服器的控制權,滿足以上四個條件中的任意兩個,那就可以用pconnect。

pconnect不用在指令碼裡關閉,可以在mysql中設定lifetime,也可以寫shell定期掃描,kill掉休眠過長的串連。 總結:要用好pconnect,即要考慮php代碼的高品質,還要考慮伺服器與網站的配置。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.