C3P0连接池与MySQL连接池的区别

3

我对连接池有些困惑。我正在使用Hibernate与MySQL数据库交互,而Hibernate的连接池策略是由c3p0来确定的。

Hibernate的连接池大小与MySQL的连接池大小有什么关系?

我的代码在AWS上可以扩展到多个实例(每个实例带有Hibernate连接池大小为m)。然而,所有实例都要与单个RDS MySQL实例通信,该实例本身具有连接池大小q。

这是否意味着如果n*m个连接处于活动状态且n*m>q,则会有连接必须等待MySQL队列中的资源?

谢谢!

1个回答

1
您的问题涉及“Hibernate的连接池大小与MySQL的连接池大小”的区别。需要注意的重要区别是:
- 连接池是一个应用程序概念,而不是数据库概念。您的应用程序(即Hibernate)使用的连接池仅仅是加速与数据库的通信的一种方式。由于建立每个连接相对较慢,预先建立一堆连接并让应用程序随时使用它们更加高效。 - 另一方面,数据库不会汇集连接。相反,它允许客户端根据需要建立连接,最多到达一个最大限制(例如,在MySQL中的max_connections参数)。如果客户端请求连接,并且数据库已经达到了最大限制,那么将发生连接错误
因此,回答您的问题,如果您将应用程序连接池配置为尝试预先建立的连接数多于数据库允许的连接数,则会从MySQL获得“Too many connections”错误。这可以通过提高MySQL配置参数或调整c3p0每个实例的最大池大小来避免。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接