2009-09-15 198 views
6

我使用休眠在我的應用程序3.2.2。對於連接池,我們使用的是c3p0 0.9.1。 我使用通用DAO模式和打開會話在查看模式做數據庫操作。
我們正在對現有網站的新網站。目前,在現有應用程序中,訪問量爲50萬次。我對c3p0配置感到困惑。在什麼樣的基準測試中,我決定打開沒有連接。最大連接,最小連接,空閒時間,超時等....如何確定連接池中所需的連接數量?

+1

5 LAKS = 500,000,是嗎? – 2009-09-15 09:36:30

+0

是的。謝謝..我把它改成了50萬。 – Shashi 2009-09-15 09:39:44

+0

嗨Shashi。你可能想看看http://stackoverflow.com/questions/1208077/optimal-number-of-connections-in-connection-pool。 – 2009-09-15 20:51:49

回答

3

您首先需要確定是否收到請求時,有沒有免費的連接服務它的游泳池會做什麼。它是否會拋出異常?返回null?阻塞,直到另一個連接返回到池?

一旦你知道超過容量時,會發生什麼,思考如何,你可以在調用代碼處理這,在什麼情況下,它是可以接受的這種情況發生。在某些時候,作爲連接數量的增加你將不得不開始拒絕服務的一些請求,但只有你自己才能決定這一點是什麼。實際點取決於很多因素,包括諸如

  • 當前的閒置和繁忙的請求速率
  • 這些利率的波動性(你想要更多的「喘息空間」,如果利率周圍有很多跳)
  • 與硬件改進和開發人員時間預算相比,任何未來的容量增加預測都會修改此代碼(如果您計劃在幾個月內升級它,則需要的開銷要比它保持運行幾年)
  • 您的公司提出有關處理能力任何保證
  • 客戶理解「稍後再試」請求的能力 - 例如如果你知道這是在另一端的自動腳本,睡上一503一分鐘,然後再嘗試,這比一個人得到一個「能力暫時超過」消息更好,兩者都比一個批處理腳本,得到一個非好得多200的迴應,只是因爲錯誤而退出。
  • 請求的緊迫性 - 一些請​​求(看着小貓的圖片),可以合理地推遲,但其他人(股票交易訂單)可能是非常時間敏感。

等等等等。

希望從上面你應該能夠拿出你需要能夠同時處理的請求的數量(如果有不同的請求類型類型,你可能也需要考慮到這一點) 。然後,只需查看傳入請求如何獲取並使用連接,推理和分析,直到您發現池中連接數量達到目標連接速率所需的數量即可。

不要忘記考慮諸如非請求線程(例如,工作者池)從同一個池(池需要更大)獲取自己的連接,以及只需要爲其部分連接保留連接的請求執行(池可以更小)。

0

簡介你的測試實例,使得小配置的變化,然後最後用負載測試驗證。