PHP的mysql_connect與mysql_pconnect_PHP教程

來源:互聯網
上載者:User
mysql_pconnect是用來在php與mysql間建立一條持續串連, 一般php的執行模式是指令碼開始執行時初始化所有資源, 指令碼運行結束後釋放所有資源。 而mysql_pconnect的方式則不這樣, mysql_connect每次都是重新通過tcp 或者unix domian socket跟sql伺服器建立關係, 每次握手都是要消耗不少伺服器資源的。

使用pconnect時, 有請求串連mysql時, php會檢查是否之前有條相同的串連(以相同的使用者名稱密碼串連到同一個mysql伺服器)已經建立, 如果有的話就直接使用這條串連, 值得注意的是這個相同的串連的概念是對進程來說的, 不同的進程call mysql_pconnect建立會建立起多條串連。

connect與pconnect不會帶來功能的差異, 只有效能上的差別。

一般php有倆種運行模式, 一是作為cgi運行, 二是作為apache的模組運行。 作為cgi的時候connect跟pconnect沒什麼不同, 因為每次cgi進行運行結束後都會被銷毀清理掉資源。

php作為apache模組方式運行時, 可以使用到資料庫持續串連, 但可能會存在潛在的問題。

假設mysql伺服器被配置為最大支援10個並發。 而apache被配置為使用100個子進程。

apache由一個父進程來協調將收到的http request分發給哪個空閑中的子進程處理, 這樣很快處理了10個http請求, 假設10個都分配給了不同的子進程, 那末10條跟mysql間的持久串連就建立了, mysql的能力已經到了極限。這時又來了一個http請求, apache將它分給其他的任意不在這10個子進程中的進程, 那末這個進程就沒有辦法建立到mysql的串連了, 因為坑位已經滿了。

使用持久串連還會有其他方面的問題。

如果在你指令碼中使用了持久串連, 又進行了鎖表操作的話, 如果到指令碼結束也沒有去解鎖的話。 那麼下次再運行這個指令碼的話, 它為了獲得lock table會在那裡無盡地等待過去的它unlock table, 過去的它已經不能回來了, 這裡成了個死迴圈。 除非重啟web或者mysql伺服器。 另一個會造成鎖定的就是事務了。

避免這個東東的辦法可以用register_shutdown_function來註冊個回呼函數, 在這裡面釋放表鎖定, 或復原事務。

http://www.bkjia.com/PHPjc/752587.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/752587.htmlTechArticlemysql_pconnect是用來在php與mysql間建立一條持續串連, 一般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.