| 關鍵功能 | Druid | BoneCP | DBCP | C3P0 | Proxool | JBoss |
|---|---|---|---|---|---|---|
| LRU | 是 | 否 | 是 | 否 | 是 | 是 |
| PSCache | 是 | 是 | 是 | 是 | 否 | 是 |
| PSCache-Oracle-Optimized | 是 | 否 | 否 | 否 | 否 | 否 |
| ExceptionSorter | 是 | 否 | 否 | 否 | 否 | 是 |
| 監控 | 是 | 否 | 否 | 否 | 是 | 否 |
| 擴展 |
是 | 否 | 否 | 否 | 否 | 否 |
LRU
LRU是一個性能關鍵指標,特別Oracle,每個Connection對應數據庫端的一個進程,如果數據庫連接池遵從LRU,有助於數據庫服務器優化, 這是重要的指標。在測試中,Druid、DBCP、Proxool、JBoss是遵守LRU的。BoneCP、C3P0則不是。BoneCP在mock環 境下性能可能好,但在真實環境中則就不好了。
PSCache
PSCache是數據庫連接池的關鍵指標。在Oracle中,類似SELECT NAME FROM USER WHERE ID = ?這樣的SQL,啟用PSCache和不啟用PSCache的性能可能是相差一個數量級的。Proxool是不支持PSCache的數據庫連接池,如果你 使用Oracle、SQL Server、DB2、Sybase這樣支持游標的數據庫,那你就完全不用考慮Proxool。
PSCache-Oracle-Optimized
Oracle 10系列的Driver,如果開啟PSCache,會占用大量的內存,必須做特別的處理,啟用內部的EnterImplicitCache等方法優化才能 夠減少內存的占用。這個功能只有DruidDataSource有。如果你使用的是Oracle Jdbc,你應該毫不猶豫采用DruidDataSource。
ExceptionSorter
ExceptionSorter是一個很重要的容錯特性,如果一個連接產生了一個不可恢復的錯誤,必須立刻從連接池中去掉,否則會連續產生大量錯誤。這個 特性,目前只有JBossDataSource和Druid實現。Druid的實現參考自JBossDataSource。
監控
DruidDataSource自身提供有NotEmptyWaitCount、PSCahcheHitCount等有用的監控屬性,通過配置StatFilter能夠監控SQL的執行情況。
擴展
DruidDataSource提供基於Filter-Chain模式的模式的擴展
