我一次用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函数时,也会产生错误
答案 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()在代码中设置它们。