解析php中mysql_connect与mysql_pconncet的区别详解


Posted in PHP onMay 15, 2013

说说mysql_connect与mysql_pconnect的区别,这俩函数用法上差不多,网上有说应该用pconnect的,pconnect是个 好东西;也有视pconnect如洪水猛兽的,坚决不让用pconnect的,也有态度暧昧不清的。那这个东西到底如何呢?

永久链接并不是说,服务器打开了一个连接,然后所有的人都共享这个链接。永久连接一样是每个客户端来就打开一个连接,有200人访问就有200个连接。其 实mysql_pconnect()本身并没有做太多的处理, 它唯一做的只是在php运行结束后不主动close掉mysql的连接.

在php经cgi方式运行时pconnect和connect是基本没有区别的, 因为cgi方式是每一个php访问起一个进程, 访问结束后进程也就结束了, 资源也全释放了. 当php以apache模块方式运行时, 由于apache有使用进程池, 一个httpd进程结束后会被放回进程池, 这也就使得用pconnect打开的的那个mysql连接资源不被释放, 于是有下一个连接请求时就可以被复用.这就使得在apache并发访问量不大的时候, 由于使用了pconnect, php节省了反复连接db的时间, 使得访问速度加快. 这应该是比较好理解的. 但是在apache并发访问量大的时候, 如果使用pconnect, 会由于之前的一些httpd进程占用的mysql连接没有close, 则可能会因为mysql已经达到最大连接着, 使得之后的一些请求永远得不到满足.若mysql最大连接数设为500, 而apache的最大同时访问数设为2000,假设所有访问都会要求访问db, 而且操作时间会比较长,当前500个请求的httpd都没有结束的时候,之后的httd进程都是无法连接到mysql的(因已经达到mysql最大连接 数). 只有当前500个httpd进程结束或被复用才可以连接得到了mysql.

当db操作复杂, 耗时较长时, 因httpd会fork很多并发进程处理, 而先产生的httpd进程不释放db连接, 使得后产生的httpd进程无法连上db. 因为这样没有复用其它httpd进程的mysql连接. 于是会就产生很多连接超时。 在并发访问量不高时,使用pconnect可以简单提高访问速度, 但在并发量增大后, 是否再使用pconnect就要看程序员的选择了.

就我个人认为, php现在对mysql的连接并没有真正用到连接池, pconnect也只是相当于借了apache的进程池来用, 所以在并发访问量大的时候pconnect并不能很好的提高访问db效率.

在实际的应用中,用mysql_pconnect的话,每次刷新和请求新的页面都比较快,而用mysql_connect的话,每次刷新都要重新请求,当数据库连接比较慢的时候,就能看出差异了。当你的数据库连接比较慢,DB操作不是很复杂,并且你的程序足够自信,不会产生死锁的时候,或者你拥有对服务器的控制权,满足以上四个条件中的任意两个,那就可以用pconnect。

pconnect不用在脚本里关闭,可以在mysql中设置lifetime,也可以写shell定期扫描,kill掉休眠过长的连接。 一句话总结:要用好pconnect,不仅仅是php脚本的事 还关系到数据库和服务器的设置。

PHP 相关文章推荐
substr()函数中文版
Oct 09 PHP
《PHP边学边教》(01.开篇――准备工作)
Dec 13 PHP
php adodb连接mssql解决乱码问题
Jun 12 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
Feb 21 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
Jan 14 PHP
PHP请求远程地址设置超时时间的解决方法
Oct 29 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
Jul 31 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
Dec 06 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
Jan 17 PHP
Laravel 模型关联基础教程详解
Sep 17 PHP
七种PHP开发环境搭建工具
Jun 28 PHP
详细分析PHP 命名空间(namespace)
Jun 30 PHP
深入php之规范编程命名小结
May 15 #PHP
PHP+jQuery实现自动补全功能源码
May 15 #PHP
深入分析php之面向对象
May 15 #PHP
深入解析php之apc
May 15 #PHP
深入解析php之sphinx
May 15 #PHP
基于php设计模式中单例模式的应用分析
May 15 #PHP
基于php设计模式中工厂模式详细介绍
May 15 #PHP
You might like
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
php常用的url处理函数总结
2014/11/19 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
2017/07/04 PHP
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
js+css实现的简单易用兼容好的分页
2013/12/30 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
Bootstrap每天必学之按钮
2015/11/26 Javascript
详解js的事件处理函数和动态创建html标记方法
2016/12/16 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
python+flask实现API的方法
2018/11/21 Python
Python Selenium 之关闭窗口close与quit的方法
2019/02/13 Python
查看python安装路径及pip安装的包列表及路径
2019/04/03 Python
PyQt5笔记之弹出窗口大全
2019/06/20 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
Python正则表达式学习小例子
2020/03/03 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
毕业生护理专业个人求职信范文
2014/01/04 职场文书
市政施工员自我鉴定
2014/01/15 职场文书
初中毕业生的自我评价
2014/03/03 职场文书
银行求职自荐信
2014/06/30 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
个人四风对照检查材料
2014/09/26 职场文书
班主任开场白
2015/06/01 职场文书
源码解读Spring-Integration执行过程
2021/06/11 Java/Android
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA