LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: yanglei1979

我开发的一个网站老出现MYSQL连接过多的情况

[复制链接]
发表于 2007-5-19 00:17:40 | 显示全部楼层
我从来没有遇到过这样的情况...唉
死机可能是散热问题,呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-19 08:44:59 | 显示全部楼层
Post by quhan
我从来没有遇到过这样的情况...唉
死机可能是散热问题,呵呵


多年不见的高手也出来了!

真是激动人心啊.

现在这个问题,我发到这里了:
http://www.linuxsir.cn/bbs/showthread.php?t=302815
回复 支持 反对

使用道具 举报

发表于 2007-5-22 12:05:44 | 显示全部楼层
80%是程序效率的问题,你是不是用了过多的循环查询了?
比如
foreach($cond)
{
   mysql_query();
}
这样的话你的服务器会死得很快,我这边亲身经历的,请尽量在循环外完成查询.
简单说吧,如果你在一个循环50个记录的列表里使用查询,外加外面的最少6-10个,这样一个页面最少进行了60多个mysql连接.10人访问就是600个,100人访问就是6000个了,你的服务器mysql早就爆掉了.




还有,什么freeresult,close是不是强制开,对服务器影响无关紧要
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-22 12:31:18 | 显示全部楼层
Post by nbxmedia
80%是程序效率的问题,你是不是用了过多的循环查询了?
比如
foreach($cond)
{
   mysql_query();
}
这样的话你的服务器会死得很快,我这边亲身经历的,请尽量在循环外完成查询.
简单说吧,如果你在一个循环50个记录的列表里使用查询,外加外面的最少6-10个,这样一个页面最少进行了60多个mysql连接.10人访问就是600个,100人访问就是6000个了,你的服务器mysql早就爆掉了.




还有,什么freeresult,close是不是强制开,对服务器影响无关紧要



我程序里面确实有很多循环查询的地方,也就是在循环里面放很多查询语句,

[PHP]
$query = "select * from replys   where uid='$_GET[tid]'  and accept=1 ";
$result = mysql_db_query($DataBase, $query);
while($r2 = mysql_fetch_array($result))
{
$query = "select company,tid,truename,level,logo,sex from member   where tid='$r2[memberid]'  ";
$result2 = mysql_db_query($DataBase, $query);
$r3 = mysql_fetch_array($result2);
}
[/PHP]

上面这样的代码在每个页面基本都会出现,难道真是这个的原因,如果这样的话,那真是找到问题的所在了。
回复 支持 反对

使用道具 举报

发表于 2007-5-22 12:36:42 | 显示全部楼层
Post by yanglei1979
我程序里面确实有很多循环查询的地方,也就是在循环里面放很多查询语句,

[PHP]
$query = "select * from replys   where uid='$_GET[tid]'  and accept=1 ";
$result = mysql_db_query($DataBase, $query);
while($r2 = mysql_fetch_array($result))
{
$query = "select company,tid,truename,level,logo,sex from member   where tid='$r2[memberid]'  ";
$result2 = mysql_db_query($DataBase, $query);
$r3 = mysql_fetch_array($result2);
}
[/PHP]

上面这样的代码在每个页面基本都会出现,难道真是这个的原因,如果这样的话,那真是找到问题的所在了。







你试着把那些循环的查询去掉,就知道了
回复 支持 反对

使用道具 举报

发表于 2007-5-22 14:04:29 | 显示全部楼层
正解!上次怎么没给我看着代码..
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-22 16:05:25 | 显示全部楼层
Post by quhan
正解!上次怎么没给我看着代码..


不好意思,上次只顾让你看 mysql_close()以及 mysql_free_result()了,真没想到会跟循环查询有关.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-22 18:09:03 | 显示全部楼层
Post by nbxmedia
你试着把那些循环的查询去掉,就知道了


运行信息
此 MySQL 服务器已经运行了 0 天 15 小时,1 分 37 秒,启动时间为 2007 年 05 月 22 日 03:01。
服务器流量: 这些表显示了此 MySQL 服务器自启动以来的网络流量统计。
流量   ø 每小时  
已收到   168 字节   11 字节  
送出   216 字节   14 字节  
统计   384 字节   26 字节  
  连接   ø 每小时   %  
尝试失败   2   0.13   0.02 %  
中止   10   0.67   0.08 %  
统计   13,257   882.22   100.00 %  



查询统计: 自从启动后,服务器共收到了 394,417 次查询。



上面是我用PHPMYADMIN查看的MYSQL运行统计.



服务器这个时候httpd所占用的内存是: 1.2GB, 也就是开机15小时后占用的内存是1.5GB,一

旦服务器占用的内存接近总内存 2GB的时候,网站就访问不了了,所以现在就是占用内存过高的

问题,所以想问下,服务器httpd占用内存狂涨,跟用MYSQL循环查询次数过多有关系吗?


主要是觉得不正常,现在服务器每天都要重新启动一次才能保证网站正常运营,但人家大部分网站的服务器都是半年甚至一年也不重启的,所以觉得还是什么地方有问题.
回复 支持 反对

使用道具 举报

发表于 2007-5-22 22:52:43 | 显示全部楼层
我在加州的服务器

此 MySQL 服务器已经运行了 5 天 10 小时,40 分 12 秒,启动时间为 2007 年 05 月 16 日 23:09。
Handler Query cache Threads 二进制日志 Temporary data Delayed inserts Key cache Joins Replication Sorting 个表
服务器流量:这些表显示了此 MySQL 服务器自启动以来的网络流量统计。
流量 Tip         ø 每小时
已收到         270 MB         2,117 KB
送出         3,642 MB         28 MB
统计         3,912 MB         30 MB
连接         ø 每小时         %
max. concurrent connections         81         ---         ---
尝试失败         35 k         269.82         1.69%
中止         942         7.21         0.05%
统计         2,088 k         15.98 k         100.00%
查询统计:自从启动后,服务器共收到了 126,489,527 次查询。
回复 支持 反对

使用道具 举报

发表于 2007-5-22 22:57:20 | 显示全部楼层
比较一下,似乎有点悬殊了...
可能问题不在mysql,而在httpd或者服务器上
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表