Chinaunix首页 | 论坛 | 博客
  • 博客访问: 290553
  • 博文数量: 64
  • 博客积分: 1770
  • 博客等级: 上尉
  • 技术积分: 588
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-26 18:19
文章分类

全部博文(64)

文章存档

2019年(1)

2014年(1)

2012年(1)

2011年(8)

2010年(19)

2009年(1)

2008年(1)

2007年(12)

2006年(20)

分类: LINUX

2010-09-19 17:52:01

   在php连接mysql中有两种连接方式mysql_connect(),mysql_pconnect()。到底MySQL_connect和MySQL_pconnect有什么不同呢?
我在网上看了下相关的文章,特此整理于此:
MySQL_pconnect是用来在php与MySQL间建立一条持续连接通道,在一个php任务中,可以连续使用同一个连接操作mysql。
MySQL_connect每次都是重新通过tcp 或者unix domian socket跟sql服务器建立关系, 每次握手都是要消耗不少服务器(TCP)资源。

   使用pconnect时, 有请求连接MySQL时, php会检查是否之前有条相同的连接(以相同的用户名密码连接到同一个MySQL服务器)已经建立, 如果有的话就直接使用这条连接, 值得注意的是这个相同的连接的概念是对进程来说的, 不同的进程call MySQL_pconnect建立会建立起多条连接。
   一般在FCGI下的PHP会因为‘任务’完成,而终止。这时候mysql_close()不会关闭这个mysql会话连接。状态为'Sleep',当大量连续访问php页面调用时,会因为进程的不断切换,导致mysql服务器上大量Sleep连接,导致Mysql连接被大量耗用。在有时,会因为连接耗尽而导致其他用户不能连接至mysql服务器。每连接还会消耗更多的Mysql服务器内存。在mysql默认的配置中wait_timeout的默认值是28800。这个值太大,会在很久很久才会杀掉这些‘僵死’的会话。所以减小这个设置,能杜绝这些‘僵死’的会话或者p连接的会话。

    结合目前我们自己的各个网站情况,我发现很多是P连接的配置,认为PHP的连接池技术在这方面还做的不够,所以还不能大量使用P连接。应该使用MySQL_connect()函数。因为数据库和php同在内网,内网单ip之间的TCP连接范围是1-6553x这样的连接数,不存在连接慢的问题。所以这样效率更高!

过去的状态:
show global status like "%max%";
+--------------------------+--------+
| Variable_name | Value              |
+--------------------------+--------+
| Innodb_row_lock_time_max | 429496 |
| Max_used_connections | 1161 |
| Tc_log_max_pages_used | 0    |
+--------------------------+----------+
3 rows in set (0.00 sec)

阅读(1983) | 评论(1) | 转发(0) |
0

上一篇:操作系统缓冲区技术

下一篇:nice值

给主人留下些什么吧!~~

chinaunix网友2010-09-22 15:13:13

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com