首先,当连接的时候mysql_pconnect() 将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。
其次,当脚本执行完毕后到 SQL 服务器的连接不会被关闭,此连接将保持打开以备以后使用(mysql_close() 不会关闭由 mysql_pconnect() 建立的连接)。
可选参数 client_flags 自 PHP 4.3.0 版起可用。
此种连接称为“持久的”。
===========================================================================
一般php有俩种运行模式, 一是作为cgi运行, 二是作为apache的模块运行。 作为cgi的时候mysql_connect跟mysql_pconnect没什么不同, 因为每次cgi进程运行结束后都会被销毁清理掉资源。
mysql_pconnect是用来在php与mysql间建立一条持续连接, 一般php的执行模式是脚本开始执行时初始化所有资源, 脚本运行结束后释放所有资源。 而mysql_pconnect的方式则不这样, mysql_connect每次都是重新通过tcp 或者unix domian socket跟sql服务器建立关系, 每次握手都是要消耗不少服务器资源的。
使用mysql_pconnect时, 有请求连接mysql时, php会检查是否之前有条相同的连接(以相同的用户名密码连接到同一个mysql服务器)已经建立, 如果有的话就直接使用这条连接, 值得注意的是这个相同的连接的概念是对进程来说的, 不同的进程call mysql_pconnect建立会建立起多条连接。
所以:作为cgi模式运行的时候mysql_connect跟mysql_pconnect没什么不同
现在说下PHP以apache模块的方式运行,两者间的区别
当php以apache模块方式运行时, 由于apache有使用进程池, 一个httpd进程结束后会被放回进程池, 这也就使得用pconnect打开的的那个mysql连接资源不被释放, 于是有下一个连接请求时就可以被复用.
这就使得在apache并发访问量不大的时候, 由于使用了mysql_pconnect, php节省了反复连接db的时间, 使得访问速度加快. 这应该是比较好理解的.但是在apache并发访问量大的时候, 如果使用mysql_pconnect, 会由于之前的一些httpd进程占用的mysql连接没有close, 则可能会因为mysql已经达到最大连接数, 使得之后的一些请求永远得不到满足。
例如: 若mysql最大连接数设为500, 而apache的最大同时访问数设为2000 假设所有访问都会要求访问db, 而且操作时间会比较长 当前500个请求的httpd都没有结束的时候...之后的httd进程都是无法连接到mysql的(因已经达到mysql最大连接数). 只有当前500个httpd进程结束或被复用才可以连接得到了mysql.
适用情况:
在并发访问量不高的情况下可以使用 mysql_pconnect()函数来提高访问速度
但是在高并发的情况下就不适合使用长连接了,适合使用 mysql_connect()
PHP mysql_connet() 函数和mysql_pconnect()函数的区别,和适用情况
最新推荐文章于 2023-08-30 11:28:37 发布