我准备了与彗星风格编程的聊天系统。它延迟(睡眠)页面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
}
答案 0 :(得分:1)
几乎没有。
答案 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;
您将看到所有进程列表。
也许我们可以开始调试并找到问题:)