解析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
木翼下载系统中说明的PHP安全配置方法
Jun 16 PHP
php异常处理技术,顶级异常处理器
Jun 13 PHP
ThinkPHP中的三大自动简介
Aug 22 PHP
在win7中搭建Linux+PHP 开发环境
Oct 08 PHP
浅谈php提交form表单
Jul 01 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
利用PHP命令行模式采集股票趋势信息
Aug 09 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
Jul 31 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
Apr 02 PHP
Laravel 自定命令以及生成文件的例子
Oct 23 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
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
给Function做的OOP扩展
2009/05/07 Javascript
Javascript 读书笔记索引贴
2010/01/11 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
2016/08/01 Javascript
相册展示PhotoSwipe.js插件实现
2016/08/25 Javascript
js获取地址栏中传递的参数(两种方法)
2017/02/08 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
2017/07/11 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
javascript实现简单搜索功能
2020/03/26 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
Python抽象类的新写法
2015/06/18 Python
简单上手Python中装饰器的使用
2015/07/12 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
python3.6+django2.0开发一套学员管理系统
2018/03/03 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
python 将视频 通过视频帧转换成时间实例
2020/04/23 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
维氏瑞士军刀英国网站:Victorinox英国
2019/07/04 全球购物
竞争性谈判邀请书
2014/02/06 职场文书
2014年机关植树节活动方案
2014/02/27 职场文书
董事长助理岗位职责
2015/02/11 职场文书
法定授权委托证明书
2015/06/18 职场文书
图文详解nginx日志切割的实现
2022/01/18 Servers