解析php中mysql_connect與mysql_pconncet的區(qū)別詳解_PHP教程
推薦:基于php緩存的詳解本篇文章是對(duì)php中的緩存進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
說(shuō)說(shuō)mysql_connect與mysql_pconnect的區(qū)別,這倆函數(shù)用法上差不多,網(wǎng)上有說(shuō)應(yīng)該用pconnect的,pconnect是個(gè) 好東西;也有視pconnect如洪水猛獸的,堅(jiān)決不讓用pconnect的,也有態(tài)度曖昧不清的。那這個(gè)東西到底如何呢?永久鏈接并不是說(shuō),服務(wù)器打開(kāi)了一個(gè)連接,然后所有的人都共享這個(gè)鏈接。永久連接一樣是每個(gè)客戶端來(lái)就打開(kāi)一個(gè)連接,有200人訪問(wèn)就有200個(gè)連接。其 實(shí)mysql_pconnect()本身并沒(méi)有做太多的處理, 它唯一做的只是在php運(yùn)行結(jié)束后不主動(dòng)close掉mysql的連接.
在php經(jīng)cgi方式運(yùn)行時(shí)pconnect和connect是基本沒(méi)有區(qū)別的, 因?yàn)閏gi方式是每一個(gè)php訪問(wèn)起一個(gè)進(jìn)程, 訪問(wèn)結(jié)束后進(jìn)程也就結(jié)束了, 資源也全釋放了. 當(dāng)php以apache模塊方式運(yùn)行時(shí), 由于apache有使用進(jìn)程池, 一個(gè)httpd進(jìn)程結(jié)束后會(huì)被放回進(jìn)程池, 這也就使得用pconnect打開(kāi)的的那個(gè)mysql連接資源不被釋放, 于是有下一個(gè)連接請(qǐng)求時(shí)就可以被復(fù)用.這就使得在apache并發(fā)訪問(wèn)量不大的時(shí)候, 由于使用了pconnect, php節(jié)省了反復(fù)連接db的時(shí)間, 使得訪問(wèn)速度加快. 這應(yīng)該是比較好理解的. 但是在apache并發(fā)訪問(wèn)量大的時(shí)候, 如果使用pconnect, 會(huì)由于之前的一些httpd進(jìn)程占用的mysql連接沒(méi)有close, 則可能會(huì)因?yàn)閙ysql已經(jīng)達(dá)到最大連接著, 使得之后的一些請(qǐng)求永遠(yuǎn)得不到滿足.若mysql最大連接數(shù)設(shè)為500, 而apache的最大同時(shí)訪問(wèn)數(shù)設(shè)為2000,假設(shè)所有訪問(wèn)都會(huì)要求訪問(wèn)db, 而且操作時(shí)間會(huì)比較長(zhǎng),當(dāng)前500個(gè)請(qǐng)求的httpd都沒(méi)有結(jié)束的時(shí)候,之后的httd進(jìn)程都是無(wú)法連接到mysql的(因已經(jīng)達(dá)到mysql最大連接 數(shù)). 只有當(dāng)前500個(gè)httpd進(jìn)程結(jié)束或被復(fù)用才可以連接得到了mysql.
當(dāng)db操作復(fù)雜, 耗時(shí)較長(zhǎng)時(shí), 因httpd會(huì)fork很多并發(fā)進(jìn)程處理, 而先產(chǎn)生的httpd進(jìn)程不釋放db連接, 使得后產(chǎn)生的httpd進(jìn)程無(wú)法連上db. 因?yàn)檫@樣沒(méi)有復(fù)用其它httpd進(jìn)程的mysql連接. 于是會(huì)就產(chǎn)生很多連接超時(shí)。 在并發(fā)訪問(wèn)量不高時(shí),使用pconnect可以簡(jiǎn)單提高訪問(wèn)速度, 但在并發(fā)量增大后, 是否再使用pconnect就要看程序員的選擇了.
就我個(gè)人認(rèn)為, php現(xiàn)在對(duì)mysql的連接并沒(méi)有真正用到連接池, pconnect也只是相當(dāng)于借了apache的進(jìn)程池來(lái)用, 所以在并發(fā)訪問(wèn)量大的時(shí)候pconnect并不能很好的提高訪問(wèn)db效率.
在實(shí)際的應(yīng)用中,用mysql_pconnect的話,每次刷新和請(qǐng)求新的頁(yè)面都比較快,而用mysql_connect的話,每次刷新都要重新請(qǐng)求,當(dāng)數(shù)據(jù)庫(kù)連接比較慢的時(shí)候,就能看出差異了。當(dāng)你的數(shù)據(jù)庫(kù)連接比較慢,DB操作不是很復(fù)雜,并且你的程序足夠自信,不會(huì)產(chǎn)生死鎖的時(shí)候,或者你擁有對(duì)服務(wù)器的控制權(quán),滿足以上四個(gè)條件中的任意兩個(gè),那就可以用pconnect。
pconnect不用在腳本里關(guān)閉,可以在mysql中設(shè)置lifetime,也可以寫(xiě)shell定期掃描,kill掉休眠過(guò)長(zhǎng)的連接。 一句話總結(jié):要用好pconnect,不僅僅是php腳本的事 還關(guān)系到數(shù)據(jù)庫(kù)和服務(wù)器的設(shè)置。
分享:解析dedecms空間遷移步驟詳解本篇文章是對(duì)dedecms空間遷移步驟進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
相關(guān)PHP教程:
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁(yè)面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對(duì)圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問(wèn)控制的和運(yùn)算符優(yōu)先級(jí)介紹
- 關(guān)于PHP語(yǔ)言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國(guó)語(yǔ)言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- PHP實(shí)例程序:實(shí)現(xiàn)給上傳圖片加水印圖案的做法
- 顯示照片exif信息PHP代碼
- PHP技巧:優(yōu)化動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)PHP程序的12條技巧
- 解決phpmyadmin中缺少mysqli擴(kuò)展問(wèn)題的方法
- 簡(jiǎn)單的php數(shù)據(jù)庫(kù)操作類(lèi)代碼(增,刪,改,查)
- 40個(gè)優(yōu)化php代碼的技巧
- 淺析ASP.NET比拼PHP,誰(shuí)是速度之王?
- 淺析php分頁(yè)類(lèi) 只用傳入總頁(yè)數(shù)
- 如何實(shí)現(xiàn)強(qiáng)大的翻頁(yè)跳轉(zhuǎn)功能
- 小結(jié):PHP動(dòng)態(tài)網(wǎng)頁(yè)程序優(yōu)化及高效提速問(wèn)題
- 相關(guān)鏈接:
復(fù)制本頁(yè)鏈接| 搜索解析php中mysql_connect與mysql_pconncet的區(qū)別詳解
- 教程說(shuō)明:
PHP教程-解析php中mysql_connect與mysql_pconncet的區(qū)別詳解。