常用Java資料庫連線池效能測試

2021-07-29 14:46:12 字數 2504 閱讀 5241

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...