【问题标题】:C3P0 Connection Pools vs MySQL Connection PoolsC3P0 连接池与 MySQL 连接池
【发布时间】:2013-08-20 02:38:01
【问题描述】:

我对连接池有点困惑。我在 MySQL 数据库之上使用 Hibernate。 Hibernate的连接池策略由c3p0决定。

Hibernate 的连接池大小与 MySQL 之间的关系是什么?

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

这是否意味着如果有 n*m 活动连接和 n*m>q,则将有连接必须在 MySQL 的队列中等待?

谢谢!

【问题讨论】:

    标签: mysql hibernate database-connection c3p0 mysqlconnection


    【解决方案1】:

    您的问题是关于“Hibernate 的连接池大小与 MySQL 的”。要记住的重要区别是:

    • 连接池是一个应用程序概念,而不是数据库概念。您的应用程序(即 Hibernate)使用的连接池只是一种加快与数据库通信的方式。由于建立每个连接相对较慢,因此预先建立一堆连接然后让您的应用程序根据需要使用它们会更有效。

    • 另一方面,数据库不会对连接进行池化。相反,它允许客户端根据请求建立最大限制(例如 MySQL 中的 max_connections 参数)。如果客户端请求连接并且数据库已经达到最大限制,则会出现connection error

    所以回答您的问题,如果您将应用程序连接池配置为尝试预先建立比数据库允许的更多的连接,您将收到来自 MySQL 的“连接太多”错误。这可以通过提高 MySQL 配置参数或调整每个实例的 c3p0 最大池大小来避免。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-15
      • 2019-12-31
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多