日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

php中mysql_connect与mysql_pconnect的区别

發布時間:2025/3/8 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php中mysql_connect与mysql_pconnect的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前陣子去面試被問到了mysql_connect跟mysql_pconnect的區別, 很不幸本人只答出一條, 似乎還沒被認可~

回來翻了下php手冊記錄之.

?

?簡單的來說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來注冊個回調函數, 在這里面釋放表鎖定, 或回滾事務.

?

?

作者: eric

郵箱: greathqy@gmail.com

剝殼: http://eleganthqy.cnblogs.com?

?

?

?

?

轉載于:https://www.cnblogs.com/eleganthqy/archive/2010/03/08/1680629.html

總結

以上是生活随笔為你收集整理的php中mysql_connect与mysql_pconnect的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。