解析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 相关文章推荐
PHP使用者状态管理功能的应用
Oct 09 PHP
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
Mar 27 PHP
浅谈PHP变量作用域以及地址引用问题
Dec 27 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
Mar 28 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 PHP
wamp安装后自定义配置的方法
Aug 23 PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 PHP
php根据指定位置和长度获得子字符串的方法
Mar 17 PHP
curl和libcurl的区别简介
Jul 01 PHP
php实现分页显示
Nov 03 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
Jul 03 PHP
yii2 url重写并隐藏index.php方法
Dec 10 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
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
PHP使用glob函数遍历目录或文件夹的方法
2014/12/16 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
PHP类的封装与继承详解
2015/09/29 PHP
CodeIgniter配置之autoload.php自动加载用法分析
2016/01/20 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
Python中的pprint折腾记
2015/01/21 Python
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
使用python实现名片管理系统
2020/06/18 Python
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
教师爱岗敬业演讲稿
2014/05/05 职场文书
农村党员一句话承诺
2014/05/30 职场文书
机电系毕业生求职信
2014/07/11 职场文书
租房协议书
2014/09/12 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
商家认证委托书格式
2014/10/16 职场文书
新党章的学习心得体会
2014/11/07 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
教师考核鉴定意见
2015/06/05 职场文书
十八大观后感
2015/06/12 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书
MSSQL基本语法操作
2022/04/11 SQL Server