{轉載}大家都覺得使用串連池可以使串連更好的控制,於是乎簡單的配置了一下串連池就行了,只要能串連到資料庫就覺得什麼都ok了.其實不然,如果不正確的配置一 下串連池,那將得不償失!原因是:串連池的確會減少每次串連資料庫對系統帶來的開銷,因為串連池中會存在一些可用的串連,程式使用的時候直接來這裡取就行 了,串連池中的串連一般情況下是不會被關閉的,這點就是問題的所在!這麼多的沒關閉串連會直接耗掉資料庫所能提供的串連數!這和直接使用程式去串連而忘了 關閉串連是一樣的效果!甚至更為嚴重(因為串連池中的串連會不停的被發sql去test而不會過時,程式中的串連會逾時)! 所以以後使用串連池時,一定要記得配置逾時選項,而不是簡單的配置一下最大數和最小數就行了.大多數串連池都有一個配置池中逾時串連的選項,比如dpcp 的maxWait,proxool的maximum-connection-lifetime,jboss內建串連池的 IdleTimeoutMinutes等,但是它們預設都是0過-1L!也就是說,預設情況下,串連池中的串連是不會逾時的!這點很重要:池中的串連永遠保持著與資料庫的串連!!當使用完這些串連後如果再有其它外來串連想使用資料庫的話,資料庫就再沒有可用的串連可以提供了!(註:這句話可能有問題,需要查證) 所以在配置串連池的時候一定要記得把這些逾時選項配置好,不然,使用串連池將得不償失.
造成資料庫連接池之逾時總結:
1.串連池配置時,要注意的 地方:最大串連數小於或者等於資料庫伺服器端配置的最大串連數,否則多餘的串連在被應用程式使用時將可能會出現連線逾時
2.網路阻塞:由於每次串連同時往資料庫伺服器端提交或者維護大量資料,如果網路不穩定也會造成串連超 時
3.應用程式中釋放佔用的資料庫資源,由於connect--->statement--->resultSet為爺--->父--->子關係,statement和resultSet被執行個體化,實際上在資料庫端開啟遊標之類的資源,需要應用程式這邊close掉,所以在close串連時,先要關閉和resultSet,statement ,否則可能導致伺服器端資源耗盡,同樣也會出現應用程式連線逾時問題