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的解决

之前我已经搭建好了LAMP(Linux+Apache+MySql+PHP,可以参照我之前的相关博客搭建),今天想试一下在php调用mysql。但是却没有成功。    gedit /var/www/ht...
  • panjican
  • panjican
  • 2015年09月21日 21:57
  • 4022

数据库连接的几种方式(你的脑海里是不是只有mysql_connect)

ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一...
  • abundantstudy
  • abundantstudy
  • 2017年03月09日 09:44
  • 479

PHP mysql_connet() 函数和mysql_pconnect()函数的区别,和适用情况

首先,当连接的时候mysql_pconnect() 将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。其次,当脚本执行完毕后到 SQL...
  • xiaofan1988
  • xiaofan1988
  • 2013年03月29日 14:30
  • 513

PHP、JavaScript、HTML三者的比较

一、PHP: 1、概念:         PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Per...
  • S___Lei
  • S___Lei
  • 2016年05月03日 21:25
  • 11076

PHP MySql的dql和dml操作的封装,成为固定的工具类

mysql_class.php:
  • u013372487
  • u013372487
  • 2015年07月14日 20:18
  • 812

PHP数据库长连接mysql_pconnect的细节

PHP的MySQL持久化连接,美好的目标,却拥有糟糕的口碑,往往令人敬而远之。这到底是为啥么。近距离观察后发现,这家伙也不容易啊,要看Apache的脸色,还得听MySQL指挥。 对于作为Apac...
  • czfphper
  • czfphper
  • 2015年06月16日 10:00
  • 206

PHP数据库长连接mysql_pconnect的细节

PHP的MySQL持久化连接,美好的目标,却拥有糟糕的口碑,往往令人敬而远之。这到底是为啥么。近距离观察后发现,这家伙也不容易啊,要看Apache的脸色,还得听MySQL指挥。 对于作为Apache...
  • kangjianrong
  • kangjianrong
  • 2013年10月16日 17:29
  • 544

PHP数据库长连接mysql_pconnect 使用详情

PHP的MySQL持久化连接,美好的目标,却拥有糟糕的口碑,往往令人敬而远之。这到底是为啥么。近距离观察后发现,这家伙也不容易啊,要看Apache的脸色,还得听MySQL指挥。 对于作为Apac...
  • jianlong918
  • jianlong918
  • 2015年02月09日 10:24
  • 153

PHP mysql函数及其Mysqli函数代替用法

由于MySQL扩展从php 5.5开始弃用,所以以后不推荐大家再用MySQL扩展,请用MySQLi或PDO代替,以下是MySQL对应的MySQLi函数(绿色字体)供大家参考。(注:PHP手册上的有误,...
  • u012712258
  • u012712258
  • 2015年04月02日 20:49
  • 491

PHP中post与get的区别

关键词: PHP,Post,Get,区别                                            转载文章一: PHP中post与get的区别 Post 方法通过 ...
  • u011130583
  • u011130583
  • 2014年11月17日 21:54
  • 1770
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:php的mysql_pconnect() 和 mysql_connect()的区别
举报原因:
原因补充:

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