Mysql连接太多了

时间:2017-07-21 12:26:38

标签: php mysql comet

我准备了与彗星风格编程的聊天系统。它延迟(睡眠)页面60秒,我在这个循环中使用mysql查询,它大致向mysql发送245.000个查询。 Mysql状态如下:

Aborted_connects - 179391
Connections - 15673040
Max_used_connections - 59
Threads_connected - 6

可能是连接标签是1500万的问题,但我无法杀死它们。我可以解决此问题,将mysql_close添加到while()的结尾吗?

set_time_limit(60);
mysql_connect("...");
while(true){
  usleep(60000);
  clearstatcache();
  mysql_query("...");
  mysql_close();//<= this one
}

2 个答案:

答案 0 :(得分:1)

几乎没有。

  1. 你的代码以某种方式连接到mysql的方式太多了。调试你的代码。
  2. 尝试汇集您的连接。阅读此Connection pooling in PHP

答案 1 :(得分:1)

查看您的代码和问题,我们应该考虑并区分连接查询

关闭while循环中的连接是没用的,这是一个错误。

您的代码应该是这样的:

mysql_connect("...");
while(true){
  //do stuff like:
  mysql_query("...");
}
//in case of we exit while true...
mysql_close();//<= this one

如果我们阅读mysql_close手册,我们可以找到:

  

通常不需要使用mysql_close()作为非持久性打开   链接在脚本执行结束时自动关闭。

所以,现在,不要考虑何时关闭mysql_connection。我们应该看看如何创建连接以及在何处。

我建议你检查你的MySQL内部并对它进行调查。您可以使用以下命令:

show status where `variable_name` = 'Threads_connected';

有了这个,你可以检查当前的连接。您也可以查看:

show processlist;

您将看到所有进程列表。

也许我们可以开始调试并找到问题:)