解析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中数据的批量导入(csv文件)
Oct 09 PHP
ftp类(myftp.php)
Oct 09 PHP
php 常用类整理
Dec 23 PHP
解析php中的escape函数
Jun 29 PHP
简单介绍win7下搭建apache+php+mysql开发环境
Aug 06 PHP
微信支付开发发货通知实例
Jul 12 PHP
利用php_imagick实现复古效果的方法
Oct 18 PHP
thinkPHP中配置的读取与C方法详解
Dec 05 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
PHP simplexml_load_file()函数讲解
Feb 03 PHP
php快速导入大量数据的实例方法
Sep 23 PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 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 n个不重复的随机数生成代码
2009/06/23 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
php读取文件内容到数组的方法
2015/03/16 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
ie支持function.bind()方法实现代码
2012/12/27 Javascript
jquery scroll()区分横向纵向滚动条的方法
2014/04/04 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
png在IE6 下无法透明的解决方法汇总
2015/05/21 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
js异步编程小技巧详解
2017/08/14 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
python3抓取中文网页的方法
2015/07/28 Python
Python读取视频的两种方法(imageio和cv2)
2018/04/15 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
波兰在线运动商店:YesSport
2020/07/23 全球购物
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
电子信息毕业生自荐信
2013/11/16 职场文书
校园安全广播稿
2014/02/08 职场文书
节能宣传周活动总结
2014/05/08 职场文书
支部组织生活会方案
2014/06/10 职场文书
专项法律服务方案
2014/06/11 职场文书
2014年防汛工作总结
2014/12/08 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书
英语导游欢迎词
2015/09/30 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python
详解在SQLPlus中实现上下键翻查历史命令的功能
2022/03/18 SQL Server