資料庫連線池配置 testOnBorrow

2022-03-26 16:34:46 字數 647 閱讀 6231

前段時間做系統壓測,發現db的cpu使用率飆公升很嚴重,排查後發現是乙個配置testonborrow由false修改為true導致。怎麼對效能影響這麼大?需要好好了解一下。

testonborrow:如果為true(預設為false),當應用向連線池申請連線時,連線池會判斷這條連線是否是可用的。

假如連線池中的連線被資料庫關閉了,應用通過連線池ge tconnection時,都可能獲取到這些不可用的連線,且這些連線如果不被其他執行緒**的話;它們不會被連線池廢除,也不會重新被建立,占用了連線池的名額,專案如果是服務端,資料庫鏈結被關閉,客戶端呼叫服務端就會出現大量的timeout,客戶端設定了超時時間,會主動斷開,服務端就會出現close_wait。

1.testonborrow能夠確保我們每次都能獲取到可用的連線,但是如果設定為true,則每次獲取連線時候都要到資料庫驗證連線有效性,這在高併發的時候會造成效能下降,可以將testonborrow設定成false,testwhileidle設定成true這樣能獲得比較好的效能

2.testonborrow和testonreturn在生產環境一般是不開啟的,主要是效能考慮。失效連線主要通過testwhileidle保證,如果獲取到了不可用的資料庫連線,一般由應用處理異常。

詳見:

資料庫連線池配置

連線池的必要性 資料庫連線池是負責分配 管理和釋放資料庫連線,它允許應用程式重複使用乙個現有的資料庫連線,可以視作乙個存放資料庫連線的容器。資料庫連線池採用了資源池設計模式,用於資源共享,避免資源的頻繁分配與釋放問題。同時便於統一管理,可以通過對連線池的控制,限制系統與資料庫的連線,監視資料庫的連線...

資料庫連線池技術 DBCP連線池 配置

最近遇到資料庫連線池配置問題,搜了很多資料對照著進行全域性配置都沒有解決。報的錯誤是 org.apache.tomcat.dbcp.dbcp.sqlnestedexception cannot create jdbc driver of class for connect url jdbc mysq...

資料庫連線池 Redis連線池

基本原理 在內部物件池中,維護一定數量的資料庫連線,並對外暴露資料庫連線的獲取和返回方法。如外部使用者可通過getconnection方法獲取資料庫連線,使用完畢後再通過releaseconnection方法將連線返回,注意此時的連線並沒有關閉,而是由連線池管理器 並為下一次使用做好準備。2.作用 ...