testcase
connection conn = datasource.getconnection();
preparedstatement stmt = conn.preparedstatement("select 1");
resultset rs = stmt.executequery();
while (rs.next())
rs.close();
stmt.close();
conn.close();
test config
value
initialsize
10minpoolsize
10maxpoolsize
50cpu xeon e5-2450 雙路共16核32物理執行緒
memory 48g
jdk 1.6.0_38
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
jdk 1.7.0_10
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
結果分析
proxool在激烈併發時會拋異常,完全不靠譜。在併發10的情況下,會使用11或者12個物理連線。
c3p0和proxool都相當慢,慢到影響sql執行效率的地步。
bonecp效能並不優越,採用linkedtransferqueue並沒有能夠獲得效能提公升。
jboss-datasource雖然穩定,但是效能很糟糕
bonecp和c3p0完全不遵循minpoolsize的配置,只要有活動請求,就會用到maxpoolsize。
bonecp和c3p0存在較大併發時使用的物理連線超過maxpoolsize數量,達到maxpoolsize+1
java資料庫連線池效能對比
connection conn datasource.getconnection preparedstatement stmt conn.preparedstatement select 1 resultset rs stmt.executequery while rs.next rs.close ...
資料庫連線池 Redis連線池
基本原理 在內部物件池中,維護一定數量的資料庫連線,並對外暴露資料庫連線的獲取和返回方法。如外部使用者可通過getconnection方法獲取資料庫連線,使用完畢後再通過releaseconnection方法將連線返回,注意此時的連線並沒有關閉,而是由連線池管理器 並為下一次使用做好準備。2.作用 ...
資料庫連線池
實現資料連線池,讓系統有更高有執行效率 using system using system.data using system.data.sqlclient using system.collections using system.threading public class dataaccess...