2013-08-18 264 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最大池大小來避免。