连接池是如何工作的?

How does connection pooling really work?

我正在使用 MySqlConnector for .Net。默认情况下,池是打开的。现在,正如其他有关人士在网络上所说的那样,这意味着我得到了一些睡眠连接。我的问题是:

假设我的服务器可以处理 300 个连接(大约是 AWS RDS 上 4GB RAM RDS MySql 服务器所允许的),假设我有 300 个处于睡眠状态的连接。当应用程序请求连接 301 时,将:

a) 池使用现有的休眠 300 个连接之一
b) 抛出最大连接错误并拒绝连接

根据我的理解,A 应该是答案,因为池将分发非活动(休眠)连接。如果您有 300 个并发的 ACTIVE 连接(例如 运行 查询),B 应该是什么情况,对吗?

我只是想弄清楚这个问题,因为 max_connections = 300 看起来太低了,吓坏了我。

谢谢鲍勃

只要连接池中有空闲连接并且 MySQL 服务器中也有可用连接(您的应用程序连接池之外可能有连接),您的应用程序就不会获得任何连接错误太多。

300 个并发连接数是否足以满足您的目的,可以通过压力测试来确定,在压力测试中,您可以模拟高峰期预期的当前用户数。通过优化数据库连接代码(在需要之前打开连接,不再需要时关闭它)300个并发数据库连接可以轻松支持更多并发用户。