connection conn = datasource.getconnection();
preparedstatement stmt = conn.preparedstatement("select 1");
resultset rs = stmt.executequery();
while (rs.next())
rs.close();
stmt.close();
conn.close();
測試各種併發場景下執行申請1,000,000(一百萬)次總耗時的效能對比。
這是一台雙路至強cpu的工作站,比我之前在mac book pro上做的測試,更接近真實伺服器的執行環境。
資料庫連線池
1 thread
2 threads
5 threads
10 threads
20 threads
50 threads
100 threads
druid
248710
1,133
1,134
9051,107
1,468
dbcp
6601,522
3,545
4,176
3,671
4,237
14,129
bonecp
3,522
2,930
2,579
3,745
7,434
11,991
14,584
c3p0
4,275
9,509
3,371
10,439
13,472
19,848
36,153
proxool
7,187
7,707
11,037
10,777
15,222(error)
18,100(error)
21,547(error)
tomcat-jdbc
372736
1,879
1,727
1,576
1,322
12,545
jboss-datasource
1,326
1,184
2,928
3,765
3,099
3,278
10,812
資料庫連線池
1 thread
2 threads
5 threads
10 threads
20 threads
50 threads
100 threads
druid
309605
1,028
947962
8971,238
dbcp
9241,461
4,062
4,030
4,908
5,505
14,517
bonecp
3,047
2,055
2,549
3,821
6,367
12,865
18,832
c3p0
4,018
8,206
8,897
10,667
12,367
25,822
38,681
proxool
6912
4,714
4,851
11,908
16,066(error)
19,568(error)
18,036(error)
tomcat-jdbc
400740
1,811
1,707
1,618
1,624
11,905
jboss-datasource
1,369
1,105
4,002
3,089
3,483
3,665
11,782
druid是效能最好的資料庫連線池,tomcat-jdbc和druid效能接近。
proxool在激烈併發時會拋異常,完全不靠譜。在併發10的情況下,會使用11或者12個物理連線。
c3p0和proxool都相當慢,慢到影響sql執行效率的地步。
bonecp效能並不優越,採用linkedtransferqueue並沒有能夠獲得效能提公升。
jboss-datasource雖然穩定,但是效能很糟糕
bonecp和c3p0完全不遵循minpoolsize的配置,只要有活動請求,就會用到maxpoolsize。
bonecp和c3p0存在較大併發時使用的物理連線超過maxpoolsize數量,達到maxpoolsize+1
資料庫連線池對比
常見的driverclassname和url oracle mysql sqlserver sqlserver 2005 druid bonecp dbcp c3p0 proxool jboss tomcat jdbc lru是否是 否是是?pscache是是 是是否否 是pscache oracl...
常用Java資料庫連線池效能測試
testcaseconnection conn datasource.getconnection preparedstatement stmt conn.preparedstatement select 1 resultset rs stmt.executequery while rs.next r...
各種資料庫連線池對比
主要功能對比 druid bonecp dbcp c3p0 proxool jboss tomcat jdbc lru是否是 否是是?pscache是是 是是否否 是pscache oracle optimized是否 否否否否 否exceptionsorter是否 否否否是 否更新維護是否 否否否...