mysql_connect和mysql_pconnect区别
php中mysql_pconnect()的实现方式:其实mysql_pconnect()本身并没有做太多的处理,它唯一做的只是在php运行结束后不主动close掉mysql的连接。mysql_pconnect()与mysql_connect()的区别包括: cgi方式下:在php经cgi方式运行时pconnect和connect是基本没有区别的,因为cgi方式是每一个php访问起一个进程,访问结束后进程也就结束了,资源也全释放了。
apache模块方式下:区别在于当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就要看程序员的选择了。就我个人认为,php现在对mysql的连接并没有真正用到连接池,pconnect也只是相当于借了apache的进程池来用,所以在并发访问量大的时候pconnect并不能很好的提高访问DB效率。在这一点上,php的确比不上jsp,就目前的这种情况,如果并发量大的话,我个人建议最好还用mysql_connect。
mysql_connect和mysql_pconnect区别的更多相关文章
- MySQL连接问题【mysql_connect和mysql_pconnect区别】
--MySQL连接问题[mysql_connect和mysql_pconnect区别] -------------------------------------------------------- ...
- mysql_connect和mysql_pconnect区别(转)
php中mysql_pconnect()的实现方式:其实mysql_pconnect()本身并没有做太多的处理,它唯一做的只是在php运行结束后不主动close掉mysql的连接.mysql_pcon ...
- php中@mysql_connect与mysql_connect有什么区别
屏蔽错误如果有错的话,会把语句都显示出来.加@就不显示$link=@mysql_connect('localhost','root','123') or die ("数据库连接失败" ...
- php易混淆知识点
一.define(“constant”, “hello world”);和const constant = “hello world”;的区别? (0).使用const使得代码简单易读,const本 ...
- web开发
教程 html教程 CSS 教程 JavaScript 教程 参考手册 HTML 4.01 / XHTML 1.0 参考手册 CSS 参考手册 JavaScript 参考手册 PHP 手册 CodeI ...
- php面试题,百度答案
一公司: 1.@当将其放置在一个PHP表达式之前有什么作用? 2.用foreach把$arr=array(1,2,3,4)每个values值乘2输出: 3.PHP定界符如何使用? 4.说出mysql_ ...
- mysql_connect v/s mysql_pconnect
原文:mysql_connect v/s mysql_pconnect 译文:mysql_connect v/s mysql_pconnect 译者:dwqs 当需要使用PHP连接MySQL数据库的时 ...
- PHP数据库连接mysql与mysqli的区别与用法
一.mysql与mysqli的概念相关: 1.mysql与mysqli都是php方面的函数集,与mysql数据库关联不大. 2.在php5版本之前,一般是用php的mysql函数去驱动mysql数据库 ...
- PHP API中,MYSQL与MYSQLI的持久连接区别
转载自:http://www.cnxct.com/some-differences-between-mysql-and-mysqli-of-persistent-connection/ 很久很久以前, ...
随机推荐
- os模块,序列化模块,json模块,pickle模块
一.os模块os.system("bash command") 运行shell命令,直接显示 os.popen("bash command).read() 运行shell ...
- [CodeForces - 614A] A - Link/Cut Tree
A - Link/Cut Tree Programmer Rostislav got seriously interested in the Link/Cut Tree data structure, ...
- linux -- 基于zookeeper搭建yarn的HA高可用集群
linux -- 基于zookeeper搭建yarn的HA高可用集群 实现方式:配置yarn-site.xml配置文件 <configuration> <property> & ...
- 使用maven构建一个web项目
使用maven构建一个web项目 首先建立一个maven项目(关于环境配置上节有详细过程): 1)-->右键new,-->project ...
- [LeetCode] 23. Merge k Sorted Lists ☆☆☆☆☆
转载:https://leetcode.windliang.cc/leetCode-23-Merge-k-Sorted-Lists.html 描述 Merge k sorted linked list ...
- “su: cannot set user id: Resource temporarily unavailable”处理及limits.conf说明
一.背景介绍及问题处理 应用报账号不能ssh到主机,首先怀疑是防火墙或hosts.deny限制但查看之下并没有:接着使用其提供的账号密码确实不能登录,怀疑是密码被修改(有个和平时不太一样现像是输入密码 ...
- Linux几种服务用处介绍
rexec--Remote Execute,远程命令执行,允许远程机器在本机上远程执行命令,监听端口512. nfs--Network File System,网络文件系统,用于将本机文件夹共享到别的 ...
- ASCII编码、Unicode编码、UTF-8
一.区别 ASCII.Unicode 是“字符集” UTF-8 .UTF-16.UTF-32 是“编码规则” 其中: 字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code ...
- vector list map set等容器某些函数的使用区别
map, set, vector erase的正确使用方法 一.erase 的用法区别 STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque); 另一类是以不 ...
- 逆袭之旅DAY17.东软实训.Oracle.PLSQL.过程,函数,包,练习
2018-07-13 14:54:46 --1.创建一个包,包含一个为雇员加薪的过程,一个为雇员减薪的过程 CREATE OR REPLACE PACKAGE pac_test1 IS PROCEDU ...