解析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
PHP4实际应用经验篇(5)
Oct 09 PHP
php zend解密软件绿色版测试可用
Apr 14 PHP
php 中文字符入库或显示乱码问题的解决方法
Apr 12 PHP
模板引擎smarty工作原理以及使用示例
May 25 PHP
Codeigniter购物车类不能添加中文的解决方法
Nov 29 PHP
PHP调用Linux命令权限不足问题解决方法
Feb 07 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
PHP解压ZIP文件到指定文件夹的方法
Nov 17 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
php mysql_list_dbs()函数用法示例
Mar 29 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
May 24 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
用PHP调用数据库的存贮过程!
2006/10/09 PHP
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
js修改table中Td的值(定义td的双击事件)
2013/01/10 Javascript
jquery右下角弹出提示框示例代码
2013/10/08 Javascript
js清理Word格式示例代码
2014/02/13 Javascript
JavaScript将字符串转换为整数的方法
2015/04/14 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
详解JavaScript实现设计模式中的适配器模式的方法
2016/05/18 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
python实现的简单猜数字游戏
2015/04/04 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
python3实现高效的端口扫描
2019/08/31 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
初婚初育证明
2014/01/14 职场文书
小溪流的歌教学反思
2014/02/13 职场文书
目标责任书格式
2014/07/28 职场文书
小学生思想品德评语
2014/12/31 职场文书
担保书范本
2015/01/20 职场文书
排球赛新闻稿
2015/07/17 职场文书
python如何读取和存储dict()与.json格式文件
2022/06/25 Python
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers