我对连接池有点困惑。我在MySQL数据库之上使用Hibernate。 Hibernate的连接池策略由c3p0确定。
Hibernate的连接池大小与MySQL的关系是什么?
运行Hibernate的代码可以扩展到AWS上的多个实例(因此每个Hibernate连接池大小为m的n个实例)。但是,所有实例都与单个RDS MySQL实例进行通信,该实例本身具有连接池大小q。
这是否意味着如果有n * m个活动连接且n * m> q,那么将有必须在MySQL队列中等待的连接?
谢谢!
答案 0 :(得分:1)
你的问题是关于“Hibernate的连接池大小与MySQL的关系”。要记住的重要区别是:
连接池是一个应用程序概念,而不是数据库概念。应用程序使用的连接池(即Hibernate)只是加速与数据库通信的一种方式。由于建立每个连接的速度相对较慢,因此预先建立一堆连接然后让应用程序根据需要使用它们会更有效。
另一方面,数据库不会池连接。相反,它允许客户端根据请求建立连接,直到最大限制(例如,MySQL中的max_connections参数)。如果客户端要求连接并且数据库已达到最大限制,则会发生connection error。
因此,要回答您的问题,如果您将应用程序连接池配置为尝试预先建立比数据库允许的更多连接,则MySQL将收到“Too many connections”错误。这可以通过提升MySQL配置参数或调整每个实例的c3p0最大池大小来避免。