2013-08-18 83 views
3

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

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

我运行Hibernate的代码可以缩放到AWS上的多个实例(因此每个Hibernate连接池大小为m的实例数量)。但是,所有实例都与单个RDS MySQL实例进行通信,该实例本身具有连接池大小q。

这是否意味着如果有n * m个活动连接并且n * m> q,那么会有连接在MySQL的队列中等待?

谢谢!

回答

1

您的问题询问“Hibernate的连接池大小与MySQL的”。需要注意的重要区别是:

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

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

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