我有一个服务器,许多用户将连接到它并在那里使用数据库,我正在使用MySQL。我知道MySQL中max_connections
的默认数量是100或150,但我确定我需要超出该数字,因此我使用以下内容来增加数字:
SET global max_connections = 1000000
现在我尝试按如下方式检查max_connections
:
show variables like 'max_connections'
它给了我以下内容:
max_connections; 100000;
这是一个成功的标志(除非我理解错了)。当我的用户开始连接时,当连接的用户数超过110时,我从服务器收到错误。错误是:
错误连接:超时已过期。超时时间过去了 从池中获取连接。这可能已经发生过 因为所有池化连接都在使用中,并且最大池大小为 达到。
为什么我会收到此错误,以及如何解决此问题?
答案 0 :(得分:48)
max_connections
当MySQL通过max_connections
运行时,您可以更改SET
:
mysql> SET GLOBAL max_connections = 5000;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE "max_connections";
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 5000 |
+-----------------+-------+
1 row in set (0.00 sec)
timeout
相关之前我从未见过您的错误消息,所以我用Google搜索。可能,你正在使用连接器/网络。 Connector/Net Manual表示存在最大连接池大小。 (默认值为100)见表22.21。
我建议您将此值增加到100k或禁用连接池Pooling=false
Q1 - 如果我禁用合并会发生什么
减速进行数据库连接。 connection pooling
是一种使用已经建立的数据库连接的机制。建立新连接的成本很高。 http://en.wikipedia.org/wiki/Connection_pool
Q2 - 合并的价值可以增加还是最高为100?
你可以增加,但我确定什么是MAX值,可能是my.cnf中的max_connections
我的建议是,不要关闭Pooling,将值增加100,直到没有连接错误。
如果你有像JMeter
这样的压力测试工具,你可以自己测试一下。
答案 1 :(得分:1)
您可以使用设置最大连接数:
设置global max_connections = '1 < your number > 100000';
这将设置您的mysql连接数