解析php中mysql_connect与mysql_pconncet的区别详解

前端之家收集整理的这篇文章主要介绍了解析php中mysql_connect与mysql_pconncet的区别详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<FONT style="COLOR: #ff0000">说说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的话,每次刷新都要重新请求,当数据库连接比较慢的时候,就能看出差异了。<FONT style="COLOR: #3366ff">当你的数据库连接比较慢,DB操作不是很复杂,并且你的程序足够自信,不会产生死锁的时候,或者你拥有对服务器的控制权,满足以上四个条件中的任意两个,那就可以用pconnect。<FONT style="COLOR: #ff0000">pconnect不用在脚本里关闭,可以在MysqL中设置lifetime,也可以写shell定期扫描,kill掉休眠过长的连接。

一句话总结:要用好pconnect,不仅仅是PHP脚本的事 还关系到数据库和服务器的设置。

原文链接:https://www.f2er.com/php/26553.html

猜你在找的PHP相关文章