解析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 相关文章推荐
数据库相关问题
Oct 09 PHP
smtp邮件发送一例
Oct 09 PHP
PHP Undefined index报错的修复方法
Jul 17 PHP
php去除重复字的实现代码
Sep 16 PHP
thinkphp模板输出技巧汇总
Nov 24 PHP
php使用fputcsv()函数csv文件读写数据的方法
Jan 06 PHP
php+ajax实时刷新简单实例
Feb 25 PHP
PHP在线调试执行的实现方法(附demo源码)
Apr 28 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
Jun 07 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
Yii框架参数配置文件params用法实例分析
Sep 11 PHP
PHP中mysqli_get_server_version()的实例用法
Feb 03 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
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
preg_match_all使用心得分享
2014/01/31 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
ThinkPHP中Session用法详解
2014/11/29 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
JavaScript 编程引入命名空间的方法
2007/06/29 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
js切换div css注意的细节
2012/12/10 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
js导出txt示例代码
2014/01/14 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
深入分析JSON编码格式提交表单数据
2015/06/25 Javascript
Javascript 实现简单计算器实例代码
2016/10/23 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
基于ionic实现下拉刷新功能
2018/05/10 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
[02:11]DOTA2上海特级锦标赛主赛事第二日RECAP
2016/03/04 DOTA
python开发之tkinter实现图形随鼠标移动的方法
2015/11/11 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
Django基础知识 URL路由系统详解
2019/07/18 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
英国计算机商店:Technextday
2019/12/28 全球购物
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
百度JavaScript笔试题
2015/01/15 面试题
大学生专业个人学习的自我评价
2013/10/26 职场文书
法学函授自我鉴定
2014/02/06 职场文书
群众路线对照检查材料
2014/09/22 职场文书
户外活动总结
2015/02/04 职场文书
大学生个人学习总结
2015/02/15 职场文书
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏
Nginx利用Logrotate实现日志分割
2022/05/20 Servers