php的mysql_pconnect() 和 mysql_connect()的区别

原创 2012年03月30日 17:39:19
        

首先,当连接的时候mysql_pconnect() 将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。

其次,当脚本执行完毕后到 SQL 服务器的连接不会被关闭,此连接将保持打开以备以后使用(mysql_close() 不会关闭由 mysql_pconnect() 建立的连接)。

可选参数 client_flags 自 PHP 4.3.0 版起可用。

此种连接称为“持久的”。



         主要区别在于当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.
其实这个也很好解释了xgy_p的测试中若操作比较简单, pconnect比connect效率高很多, 而且跟使用jsp的连接池的速度比较接近. 因为这个时候httpd进程可以不断的给复用.
而 当DB操作复杂, 耗时较长时, 因httpd会fork很多并发进程处理, 而先产生的httpd进程不释放db连接, 使得后产生的httpd进程无法连上db. 因为这样没有复用其它httpd进程的mysql连接. 于是会就产生很多连接超时, 像一开始的1000个并发连接测试说几乎都是连接超时就是这个原因.
(反进来看jsp用的如果是纯粹的db连接池, 则不会有因为达到mysql连接上限而连不上的问题, 因为jsp的连接池会使得可以等待其它连接使用完毕并复用. )
因此在并发访问量不高时,使用pconnect可以简单提高访问速度, 但在并发量增大后, 是否再使用pconnect就要看程序员的选择了.
     
   

相关文章推荐

mysql_connect和mysql_pconnect的区别

php中mysql_pconnect()的实现方式:其实mysql_pconnect()本身并没有做太多的处理,它唯一做的只是在php运行结束后不主动close掉mysql的连接。mysql_pcon...

mysql_connect和mysql_pconnect区别

一般php有俩种运行模式, 一是作为cgi运行, 二是作为apache的模块运行. 作为cgi的时候connect跟pconnect没什么不同, 因为每次cgi进行运行结束后都会被销毁清理掉资源.p...

关于mysql_pconnect 和 mysql_connect的误解

mysql_pconnect VS mysql_connect误解,mysql_pconnect并非想象的会使的系统运行的比mysql_connect高效。 mysql_pconnect — 打...
  • hcb0825
  • hcb0825
  • 2011年10月12日 10:42
  • 469

mysql持久连接,mysql_connect与mysql_pconnect

在某些场合,mysql_pconnect( ) 是不适用的。 ——————————————————————————– 状况一:  使用 1 部 web server 与 1 部 MySQL...

mysql 永久连接mysql_pconnect和mysql_connect

一直对mysql_pconnect 和mysql_connect的理解差别是p链接是持久链接,不会关闭了链接,即使你使用了mysql_close();建立连接后,将保持sleep状态,可以使用show...
  • lxzo123
  • lxzo123
  • 2011年07月07日 17:11
  • 2265

PHPnow更新PHP版本后连接数据库错误(mysql_connect报错)

之前因为比较懒,就装了PHPnow,PHP版本是5.2,最近因为要学thinkPHP框架,由于用的是thinkPHP3.2,需要PHP5.3以上版本才能跑起来,就手动更新了PHP版本,更新到了5.3....

mysql_connect() 不支持 请检查 PHP 配置的错误

今天在win7旗舰版的64位系统中架设php+apache+mysql的时候出现了这个问题,以下是解决这个问题的途径: 首先搜了一下这个错误,出现这个问题的还是挺多的,大部分的解决办法如下:...

Windows XP下部署php apche mysql时 不能使用mysql_connect的问题:以及安装配置步骤

除了常规的几个httpd.conf的配置 和php.ini的配置外。 常规配置: apache下的httpd.conf:增加了配置: LoadModule php5_module "D:/php...

关于php应该在何时调用mysql_close()以及pconnect方式和传统方式有何种区别收藏

以前我一直认为,当php的页面执行结束时,会自动释放掉一切。相信很多人都跟我想的一样。但事实证明并不是这样。比如session就不会随着页面执行完毕而释放。 php的垃圾回收机制,其实只针对于p...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:php的mysql_pconnect() 和 mysql_connect()的区别
举报原因:
原因补充:

(最多只允许输入30个字)