MySQL同时存在太多并发连接

时间:2012-12-13 06:28:10

标签: php mysql apache

我一次用200个并发用户测试JMeter大约30秒,并注意到MySQL连接失败。

数据库结构合理,包括索引,查询和缓存。

这是我们需要关注像MySQL企业这样的事情吗?

或者我们有办法改善这个吗?

这是我得到的错误:

Error: 2002 - Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

当触发mysql_connect() PHP函数时,也会产生错误

3 个答案:

答案 0 :(得分:2)

您需要设置名为max_connections的MySQL global vcariable,以增加每个MySQL服务器的最大连接数。但是,您需要意识到增加多个连接意味着消耗更多的CPU和内存。

答案 1 :(得分:1)

尝试在MySQL中设置max_connections变量 - 除非您的查询非常复杂,否则200个连接不应该是一个太大的问题。

SET GLOBAL max_connections=500;

如果这没有帮助,请使用您的JMeter结果来确定哪些查询比其他查询花费的时间更长(使用加速期和/或最大用户数来获得一批好的样本连接实际上失败了

然后,需要重构这些查询和/或需要重构相关数据。如果您尝试避免过多的连接和嵌套的select语句,即使在索引良好的系统上也可以大大提高查询性能。使用MySQL的EXPLAIN功能来了解数据库实际为您做了多少工作。

答案 2 :(得分:0)

在php.ini中,请查看

mysql.allow_persistent = xx
mysql.max_persistent = xx
mysql.max_links = xx
mysql.connect_timeout = xx

如果服务提供商允许,也可以使用ini_set()在代码中设置它们。

请参阅http://php.net/manual/en/ini.list.php