資料庫連線池效能比對

2021-07-14 00:00:25 字數 2784 閱讀 8537

對現有的資料庫連線池做調研對比,綜合性能,可靠性,穩定性,擴充套件性等因素選出推薦出最優的資料庫連線池 。     

note: 本文所有測試均是mysql庫

1:效能方面 hikaricp>druid>tomcat-jdbc>dbcp>c3p0 。hikaricp的高效能得益於最大限度的避免鎖競爭。

2:druid功能最為全面,sql攔截等功能,統計資料較為全面,具有良好的擴充套件性。

3:綜合性能,擴充套件性等方面,可考慮使用druid或者hikaricp連線池。

4:可開啟preparestatement快取,對效能會有大概20%的提公升。 功能

dbcp

druid

c3p0

tomcat-jdbc

hikaricp

是否支援pscache是是

是否否監控

擴充套件性弱好弱

弱弱sql攔截及解析無支援

無無無**

簡單中等

複雜簡單

簡單更新時間

2015.8.6

2015.10.10

2015.12.09

2015.12.3

特點依賴於common-pool

阿里開源,功能全面

歷史久遠,**邏輯複雜,且不易維護

優化力度大,功能簡單,起源於bonecp

連線池管理

linkedblockingdeque

陣列fairblockingqueue

threadlocal+copyonwritearraylist

環境配置:

cpuintel(r) xeon(r) cpu e5-2430 v2 @ 2.50ghz,24core

msyql version

5.5.46

tomcat-jdbc version

8.0.28

hikaricp version

2.4.3

c3p0 version

0.9.5-pre8

dbcpversion

2.0.1

druidversion

1.0.5

1:獲取關閉連線效能測試

測試說明:

圖形:

mock效能資料 (單位:ms)520

50100

tomcat-jdbc

442447

1,013

1,264

c3p0

4,480

5,527

7,449

10,725

dbcp

676689

8671,292

hikari

3833

3830

druid

291293

562985

mysql效能資料 (單位:ms)520

50100

tomcat-jdbc

436453

1,033

1,291

c3p0

4,378

5,726

7,975

10,948

dbcp

671679

8971,380

hikari

9682

8778

druid

304424

6901,130

測試結果:

hikaricp效能分析:

2:查詢一條語句效能測試

測試說明:

圖形:

測試資料:58

2050

100tomcat-jdbc

2,178

1,495

1,769

1,818

1,858

c3p0

3,237

3,451

4,488

5,994

7,906

dbcp

2,816

1,935

2,097

2,243

2,280

hikari

2,299

1,546

1,682

1,751

1,772

druid

2,297

1,551

1,800

1,977

2,032

測試結果:

3:pscache效能對比

測試說明:

測試資料:

cache

1,927

not cache

2,134

測試結果:

測試說明:

pscache的key為prepare執行的sql和catalog等,value對應的為preparestatement物件。開啟快取主要是減少了解析sql的開銷。

資料庫連線池效能比對

對現有的資料庫連線池做調研對比,綜合性能,可靠性,穩定性,擴充套件性等因素選出推薦出最優的資料庫連線池 1 效能方面 hikaricp druid tomcat jdbc dbcp c3p0 hikaricp的高效能得益於最大限度的避免鎖競爭。2 druid功能最為全面,sql攔截等功能,統計資料較...

資料庫連線池 Redis連線池

基本原理 在內部物件池中,維護一定數量的資料庫連線,並對外暴露資料庫連線的獲取和返回方法。如外部使用者可通過getconnection方法獲取資料庫連線,使用完畢後再通過releaseconnection方法將連線返回,注意此時的連線並沒有關閉,而是由連線池管理器 並為下一次使用做好準備。2.作用 ...

資料庫連線池

實現資料連線池,讓系統有更高有執行效率 using system using system.data using system.data.sqlclient using system.collections using system.threading public class dataaccess...