新聞中心
以下的文章主要介紹的是php中MySQL_connect和MySQL_pconnect的不同之處,我前兩天在php手冊上看到關(guān)于php中MySQL_connect和MySQL_pconnect的不同之處,覺得挺好,今天拿出啦以供大家分享。

公司主營業(yè)務:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出鄂城免費做網(wǎng)站回饋大家。
前陣子去面試被問到了MySQL_connect跟MySQL_pconnect的區(qū)別, 很不幸本人只答出一條, 似乎還沒被認可~
回來翻了下php手冊記錄之.
簡單的來說MySQL_pconnect是用來在php與MySQL間建立一條持續(xù)連接, 一般php的執(zhí)行模式是腳本開始執(zhí)行時初始化所有資源, 腳本運行結(jié)束后釋放所有資源. 而MySQL_pconnect的方式則不這樣, MySQL_connect每次都是重新通過tcp 或者unix domian socket跟sql服務器建立關(guān)系, 每次握手都是要消耗不少服務器資源的.
使用pconnect時, 有請求連接MySQL時, php會檢查是否之前有條相同的連接(以相同的用戶名密碼連接到同一個MySQL服務器)已經(jīng)建立, 如果有的話就直接使用這條連接, 值得注意的是這個相同的連接的概念是對進程來說的, 不同的進程call MySQL_pconnect建立會建立起多條連接.
connect與pconnect不會帶來功能的差異, 只有性能上的差別.
一般php有倆種運行模式, 一是作為cgi運行, 二是作為apache的模塊運行. 作為cgi的時候connect跟pconnect沒什么不同, 因為每次cgi進行運行結(jié)束后都會被銷毀清理掉資源.
php作為apache模塊方式運行時, 可以使用到數(shù)據(jù)庫持續(xù)連接, 但可能會存在潛在的問題, 這也是哥哥回答的一點.
假設(shè)MySQL服務器被配置為最大支持10個并發(fā). 而apache被配置為使用100個子進程.
apache由一個父進程來協(xié)調(diào)將收到的http request分發(fā)給哪個空閑中的子進程處理, 這樣很快處理了10個http請求, 假設(shè)10個都分配給了不同的子進程, 那末10條跟MySQL間的持久連接就建立了, MySQL的能力已經(jīng)到了極限.
這時又來了一個http請求, apache將它分給其他的任意不在這10個子進程中的進程, 那末這個進程就沒有辦法建立到MySQL的連接了, 因為坑位已經(jīng)滿了.
使用持久連接還會有其他方面的問題.
如果在你腳本中使用了持久連接, 又進行了鎖表操作的話, 如果到腳本結(jié)束也沒有去解鎖的話. 那么下次再運行這個腳本的話, 它為了獲得lock table會在那里無盡地等待過去的它unlock table, 過去的它已經(jīng)不能回來了, 這里成了個死循環(huán). 除非重啟web或者MySQL服務器. 另一個會造成鎖定的就是事務了.
避免這個東東的辦法可以用register_shutdown_function來注冊個回調(diào)函數(shù), 在這里面釋放表鎖定, 或回滾事務.
以上的相關(guān)內(nèi)容就是對php中MySQL_connect與MySQL_pconnect的區(qū)別 的介紹,望你能有所收獲。
當前標題:MySQL_connect和MySQL_pconnect有什么不同?
網(wǎng)站網(wǎng)址:http://fisionsoft.com.cn/article/codpddh.html


咨詢
建站咨詢
