亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入探討:PHP使用數(shù)據(jù)庫永久連接方式操作MySQL的是與非

 更新時間:2013年06月05日 09:53:36   作者:  
本篇文章是對PHP使用數(shù)據(jù)庫永久連接方式操作MySQL的是與非進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

PHP程序員應(yīng)該都知道連接MySQL數(shù)據(jù)庫可以使用mysql_pconnect(永久連接)函數(shù),使用數(shù)據(jù)庫永久連接可以提高效率,但是實際應(yīng)用中數(shù)據(jù)庫永久連接往往會導(dǎo)致出現(xiàn)一些問題,通常的表現(xiàn)就是在大訪問量的網(wǎng)站上時常發(fā)生斷斷續(xù)續(xù)的無法連接數(shù)據(jù)庫的情況,出現(xiàn)類似"Too many connections in ..."的錯誤提示信息,重新啟動服務(wù)器又正常了,但過不了一會兒又出現(xiàn)同樣的故障。對于這些問題的成因,恐怕就不是每個人都能說清楚的了,雖然PHP文檔里有一些相關(guān)資料,但是解釋的并不淺顯易懂,這里我厚著臉皮試圖做一個簡單的討論,所述觀點不見得全都正確,歡迎大家反饋意見。

首先看看數(shù)據(jù)庫永久連接的定義:
永久的數(shù)據(jù)庫連接是指在腳本結(jié)束運行時不關(guān)閉的連接。當(dāng)收到一個永久連接的請求時。PHP 將檢查是否已經(jīng)存在一個(前面已經(jīng)開啟的)相同的永久連接。如果存在,將直接使用這個連接;如果不存在,則建立一個新的連接。所謂“相同”的連接是指用相同的用戶名和密碼到相同主機的連接。

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

上面的部分文字是摘抄自PHP文檔,看起來可能還是有些文縐縐的不好理解,那么我就用大白話再舉一個例子來說明問題:

假設(shè)Apache配置最大連接數(shù)為1000,MySQL配置最大連接數(shù)為100,當(dāng)Apache服務(wù)器接到200個并發(fā)訪問的時候,其中100個涉及到數(shù)據(jù)庫訪問,剩下的100個不涉及數(shù)據(jù)庫訪問,因為這個時候還不存在可用的數(shù)據(jù)庫連接,所以這里面涉及到數(shù)據(jù)庫訪問的100個并發(fā)會同時產(chǎn)生100個數(shù)據(jù)庫永久連接,達(dá)到了數(shù)據(jù)庫最大連接數(shù),當(dāng)這些操作沒有結(jié)束的時候,任何其他的連接都無法再獲得數(shù)據(jù)庫連接,當(dāng)這些操作結(jié)束了,相應(yīng)的連接會被放入進(jìn)程池,此時Apache的進(jìn)程池里就有了200個空閑的子進(jìn)程,其中100個是帶有數(shù)據(jù)庫連接的,由于Apache會為訪問請求隨機的挑選空閑子進(jìn)程,所以你得到的子進(jìn)程很可能是不包含數(shù)據(jù)庫連接的那100個中的一個,而數(shù)據(jù)庫連接已經(jīng)達(dá)到了最大值,你也不可能成功的建立新的數(shù)據(jù)庫連接,唉,你便只好不停的刷新頁面,哪個時候運氣好,碰巧分配到了帶有數(shù)據(jù)庫連接的子進(jìn)程,才能正常瀏覽頁面。如果是大訪問量的網(wǎng)站來說,任何時候都可能存在大量的并發(fā),所以瀏覽者可能就會不停的發(fā)現(xiàn)無法連接數(shù)據(jù)庫的現(xiàn)象了。

或許你會說,我們把Apache和MySQL的最大連接數(shù)調(diào)成一樣大不就可以了么?是的,合理的調(diào)整這個最大連接數(shù)某種程度上會避免這個問題的發(fā)生,但是Apache和MySQL的負(fù)載能力是不同的,如果按照Apache的負(fù)載能力來設(shè)置,對于MySQL來說,這個最大連接數(shù)就偏大,會產(chǎn)生大量的 MySQL數(shù)據(jù)庫永久連接,打個比方,就好像和平時代還要養(yǎng)活一個幾百萬的軍隊一樣,其開銷得不償失;而如果按照Mysql的負(fù)載能力設(shè)置,對于 Apache來說,這個最大連接數(shù)就偏小,有點殺雞牛刀的感覺,無法發(fā)揮Apache的最大效率。

所以按照PHP手冊上的介紹,只適合在并發(fā)訪問不大的網(wǎng)站上使用數(shù)據(jù)庫永久連接,但對于一個并發(fā)訪問不大的網(wǎng)站來說,使用數(shù)據(jù)庫永久連接帶來的效率提高似乎沒有太大的意義,從這個角度上來看,我覺得PHP中的數(shù)據(jù)庫永久連接基本上是一個雞肋的角色,如果你一定要使用數(shù)據(jù)庫連接池的概念,可以嘗試一下sqlrelay或者Apache本身提供的mod_dbd,說不定會有驚喜。

相關(guān)文章

  • php輸出指定時間以前時間格式的方法

    php輸出指定時間以前時間格式的方法

    這篇文章主要介紹了php輸出指定時間以前時間格式的方法,可實現(xiàn)輸出指定時間以前的具體時間格式,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • PHP數(shù)組函數(shù)知識匯總

    PHP數(shù)組函數(shù)知識匯總

    什么是數(shù)組?數(shù)組就是被命名的用來存儲一系列數(shù)值的地方。這篇文章主要匯總了PHP數(shù)組函數(shù)最基礎(chǔ)的知識點,感興趣的小伙伴們可以參考一下
    2016-05-05
  • JS中encodeURIComponent函數(shù)用php解碼的代碼

    JS中encodeURIComponent函數(shù)用php解碼的代碼

    在JS中使用了encodeURIComponent對中文進(jìn)行編碼在PHP中使用iconv('UTF-8','gb2312',$q);就可以得到你需要的字串了,其中g(shù)b2312根據(jù)你實際應(yīng)用來定如還不明白為什么看下面的文章
    2012-03-03
  • PHP基于curl模擬post提交json數(shù)據(jù)示例

    PHP基于curl模擬post提交json數(shù)據(jù)示例

    這篇文章主要介紹了PHP基于curl模擬post提交json數(shù)據(jù)操作,結(jié)合實例形式分析了php使用curl實現(xiàn)post方式提交json數(shù)據(jù)相關(guān)操作步驟與注意事項,代碼簡單實用,需要的朋友可以參考下
    2018-06-06
  • php header 詳細(xì)使用說明與使用心得

    php header 詳細(xì)使用說明與使用心得

    下面是關(guān)于header函數(shù)的詳細(xì)使用說明
    2009-11-11
  • PHP實現(xiàn)的簡易版圖片相似度比較

    PHP實現(xiàn)的簡易版圖片相似度比較

    這篇文章主要介紹了PHP實現(xiàn)的簡易版圖片相似度比較,本文直接給出實現(xiàn)代碼,使用方法請看代碼中的注釋,需要的朋友可以參考下
    2015-01-01
  • php木馬攻擊防御之道

    php木馬攻擊防御之道

    本文通過介紹一些技巧介紹了針對PHP木馬攻擊的防御之道,通過這些方面您能夠更好的防范木馬程式。
    2008-03-03
  • 利用php實現(xiàn)禁用IE和火狐的緩存問題

    利用php實現(xiàn)禁用IE和火狐的緩存問題

    利用php實現(xiàn)禁用IE和火狐的緩存問題,在網(wǎng)速找了好多方法,最終還是解決了,需要了解的朋友可以參考下
    2012-12-12
  • PHP生成隨機字符串實例代碼(字母+數(shù)字)

    PHP生成隨機字符串實例代碼(字母+數(shù)字)

    這篇文章主要給大家介紹了關(guān)于PHP生成隨機字符串(字母+數(shù)字)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用PHP具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • php檢測文本的編碼

    php檢測文本的編碼

    這篇文章主要介紹了php檢測文本的編碼的相關(guān)資料,需要的朋友可以參考下
    2015-07-07

最新評論