mysql_connect() 和 mysql_pconnect()

mysql_connect()和mysql_pconnect(),前者的作用是每次连接都建立一个新连接,后者则是持续的连接。

    mysql_connect()会在每次调用当前php页面时建立一个或是多个新的连接,然后在请求结束后关闭这些连接。这种方式比较适合使用在不太繁重的页面中,不需要调整,直接在内部使用。
    mysql_pconnect()也会在页面被调用的时候新建一个连接,但是在请求结束后不会关闭连接,反而在把连接保存在连接池中,这样一个并发的请求还能继续使用这个连接。这种连接方式是提供给那些使用非常频繁的页面,不然资源会被频繁的开与关消耗掉,这样就对性能有严重的影响。

    mysql_pconnect()中的p,就是单词persistent(永久的)的首字母。

    mysql_pconnect()需要服务器的调整,也需要限制连接的数量,配置超时,以及什么时候处理空闲进程。他能让你在正确的环境中改善效率。
Pconnect会经常的导致Mysql连接失败,提示连接太多,原因在于pconnect后,Apache不会自动关闭mysql的连接.
先来看看APACHE的工作模式
Windows 下,Apache使用一个主进程,加一个辅进程,再由辅进程派生N个线程的方式来提供服务,线程的数量可以在httpd.conf里配置: ThreadsPerChild 500,如果指定为500线程,则apache一启动时就会启动500个线程,但最多也只使用500个线程,如果同时连接数量超过500个(可能300个用户访问就有500个连接,判断当前连接的方法,可以使用netstat -na|grep 80|grep EST|wc -l或者使用apache的status module),那么,多余的连接将会在等待或者连接失败.(所以,Windows下Apache的主要配置参数应该是ThreadsPerChild, 先根据当前的连接数,再看看有没有必要调大一些,一般PC服务器设置为1000算是比较大了.)
Nix下,Apache使用进程的方式来运行,原理相同,需要调整进程数量的参数有几个,比如ServerLimit.

再来看看Apache+PHP+Mysql_pconnect的工作方式
每当客户端向服务端发送一个连接请求(包括图片,HTML,PHP等),apache将会用一个线程来接受这个请求,如果是请求的是一个PHP文件,且 PHP文件里使用了PConnect,则当前线程会判断当前线程有没有打开过pconnect,如果有打开过,则使用原来的mysql connect,如果没有打开过,则新建一个connect,并且,连接断开后,线程仍在运行,而且保持Mysql connect.按这种方式运行一段时间后,完全有可能所有apache的线程都打开过有Pconnect的Php页面,所以,如果apache的 ThreadsPerChild=500的话,则500个线程都找开了mysql连接,并且没有关闭,则就要求,mysql的连接数必须大于或等于 500,如果小于这个值,将会导致PHP页面提示数据库连接失败.

所以,得出结论,Apache+PHP+Mysql下使用 pconnect时,mysql的max_connect必须大于或等于apache的最大线程(进程)数.在一个访问量很大的站点,使用 pconnect可能不太现实,最好的办法是,尽可能的将数据库内容生成为静态文件,而不需要每个页面都连接数据库,并且使用mysql_connect (即使将绝大多数页面生成为静态文件,但仍有mysql_pconnect时,同样要求mysql的max_connect大于apache的线程数,所以这种情况下使用pconnect非常不可取).

永久的数据库连接是指在您的脚本结束运行时不关闭的连接。当收到一个永久连接的请求时。PHP 将检查是否已经存在一个(前面已经开启的)相同的永久连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接。所谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。
对 WEB 服务器的工作和分布负载没有完全理解的读者可能会错误地理解永久连接的作用。特别的,永久连接不会在相同的连接上为您提供建立“用户会话”的能力,也不提供有效建立事务的能力。实际上,从严格意义上来讲,永久连接不会给您提供任何非永久连接无法提供的特殊功能。
为什么?
这和 WEB 服务器工作的方式有关。您的 WEB 服务器可以用三种方法来利用 PHP 生成 WEB 页面。
第一种方法是将 PHP 用作一个“外壳”。以这种方法运行,PHP 会为向您的 WEB 服务器提出的每个 PHP 页面请求生成并结束一个 PHP 解释器线程。由于该线程会随每个请求的结束而结束,因此任何在这个线程中利用的任何资源(例如指向 SQL 数据库服务器的连接)都会随线程的结束而关闭。在这种情况下,您使用永久连接不会获得任何地改变

时间: 2024-10-31 23:39:01

mysql_connect() 和 mysql_pconnect()的相关文章

php中连接mysql函数mysql_connect与mysql_pconnect对比

当需要使用PHP连接MySQL数据库的时候,会发现有两种数据库连接函数:mysql_connect()和mysql_pconnect(). 1.mysql_connect() 在脚本开始的时候,mysql_connect()会创建一个新的连接,脚本结束的时候就会关闭连接.脚本每一次执行,它都会创建一个新的连接. 2.mysql_pconnect() 当使用mysql_pconnect()连接数据库时,它首先会判断是否已经存在了数据库连接,如果存在,就会利用先用的资源ID,反之,就会创建一个新的连

mysql_connect与mysql_pconnect的区别详解

PHP mysql_pconnect mysql_pconnect() 函数打开一个到 MySQL 服务器的持久连接. mysql_pconnect() 和 mysql_connect() 非常相似,但有两个主要区别: 1.当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接. 2.其次,当脚本执行完毕后到 SQL 服务器的连接不会被关闭,此连接将保持打开以备以后使用(mysql_close() 不会关闭由 mysq

php mysql_connect 与mysql_pconnect函数与实例教程

 代码如下 复制代码 mysql_connect  mysql_connect($this->root,$this->user,$this->pass) /* mysql_connect ,单个反问用户不会频繁的调用数据库教程,没必要保持连接,而且mysql的连接数也是有限制的, 使用 及时访问比较频繁,也最好使用mysql_connect,这样使用的过的资源可以立刻释放,否则,容易造成资源耗 */ mysql_pconnect /* mysql_pconnect() 函数打开一个到 M

php mysql_connect 与mysql_pconnect实现与详细说明

$hostname="localhost";        //定义连接到的mysql服务器名 $username="root";         //定义用于连接的用户名 $password="";          //定义用于连接的密码 $link=mysql_connect($hostname,$username,$password);  //连接到本地mysql服务器 if($link)           //如果成功连接 {   e

解析php中mysql_connect与mysql_pconncet的区别详解_php实例

说说mysql_connect与mysql_pconnect的区别,这俩函数用法上差不多,网上有说应该用pconnect的,pconnect是个 好东西:也有视pconnect如洪水猛兽的,坚决不让用pconnect的,也有态度暧昧不清的.那这个东西到底如何呢? 永久链接并不是说,服务器打开了一个连接,然后所有的人都共享这个链接.永久连接一样是每个客户端来就打开一个连接,有200人访问就有200个连接.其 实mysql_pconnect()本身并没有做太多的处理, 它唯一做的只是在php运行结束

mysql_connect提示"No such file or directory"错误"

连接代码  代码如下 复制代码 $this->linkid = @mysql_pconnect($host, $user, $password) or die(mysql_error()); Make a phpinfo() page.  Look for 'mysql.default_socket', 'mysqli.default_socket', and 'pdo_mysql.default_socket'.  Remember their value; this is where PHP

mysql_connect报告”No such file or directory”错误的解决方法

国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为"中国PE第一股",市值超1000亿元.  ------------------------------------------------------------------------------

PHP API中,MYSQL与MYSQLI的持久连接区别

很久很久以前,我也是因为工作上的bug,研究了php mysql client的连接驱动mysqlnd 与libmysql之间的区别php与mysql通讯那点事,这次又遇到一件跟他们有联系的事情,mysqli与mysql持久链接的区别.写出这篇文章,用了好一个多月,其一是我太懒了,其二是工作也比较忙.最近才能腾出时间,来做这些事情.每次做总结,都要认真阅读源码,理解含义,测试验证,来确认这些细节.而每一个步骤都需要花费很长的时间,而且,还不能被打断.一旦被打断了,都需要很长时间去温习上下文.也故

phpmyadmin配置文件config.default.php部分配置选项说明

在之前的phpmyadmin安装配置教程中我主要介绍了phpmyadmin安装配置的步骤,其中简单涉及了phpmyadmin配置文件config.default.php中的相关配置选项的说明,为了使大家使用配置phpmyadmin能更方便,针对phpmyadmin配置文件中的配置选项,我打算分几次介绍,今天先详细介绍下phpmyadmin配置文件config.default.php中的部分phpmyadmin配置选项. 早期的phpmyadmin版本中,安装配置时需要将phpmyadmin默认的