資料庫連線池數如何配置與HikariCP

2021-10-07 13:20:16 字數 2537 閱讀 3587

hikaricp連線池是高效能的jdbc連線池,官網標註的三大特點:快速、簡單、可靠,效能優於其他連線池。

官網詳細地說明了hikaricp所做的一些優化,總結如下:

優化**和***:減少**,例如hikaricp的statement proxy只有100行**,只有bonecp的十分之一;

自定義陣列型別(faststatementlist)代替arraylist:避免每次get()呼叫都要進行range check,避免呼叫remove()時的從頭到尾的掃瞄;

自定義無鎖集合型別(concurrentbag):提高併發讀寫的效率;

由於springboot2預設整合hikaricp,因此需要再引入依賴。主要是專案mysql和springboot mybatis的依賴。

# 配置資料來源資訊

spring

:datasource

:# 資料來源的相關配置

type

: com.zaxxer.hikari.hikaridatasource # 資料來源型別:hikaricp

driver-class-name

: com.mysql.jdbc.driver # mysql驅動

url: jdbc:mysql://localhost:3306/foodie-dev?useunicode=true&characterencoding=utf-8&autoreconnect=true

username

: root

password

:123456

hikari

:connection-timeout

:30000

# 等待連線池分配連線的最大時長(毫秒),超過這個時長還沒可用的連線則發生sqlexception, 預設:30秒

minimum-idle:5

# 最小連線數

maximum-pool-size:20

# 最大連線數

auto-commit

:true

# 事務自動提交

idle-timeout

:600000

# 連線超時的最大時長(毫秒),超時則被釋放(retired),預設:10分鐘

pool-name

: datesourcehikaricp # 連線池名字

max-lifetime

:1800000

# 連線的生命時長(毫秒),超時而且沒被使用則被釋放(retired),預設:30分鐘 1800000ms

connection-test-query

: select 1 # 連線測試語句

# mybatis配置

mybatis

:type-aliases-package

: com.lzp.pojo # 所有pojo類所在包路徑

資料庫連線是有限的、昂貴的資源,乙個資料庫連線物件對應乙個物理資料庫的連線,如果每次資料庫操作都建立新的連線,使用完後釋放,會導致系統效能低下,這就引出了連線池的概念。

資料庫連線池是負責分配、管理和釋放資料庫連線,它允許應用程式重複使用乙個現有的資料庫連線,可以視作乙個存放資料庫連線的容器。

資料庫連線池採用了資源池設計模式,用於資源共享,避免資源的頻繁分配與釋放問題。同時便於統一管理,可以通過對連線池的控制,限制系統與資料庫的連線,監視資料庫的連線數量和使用情況。

1、不使用連線池流程

下面以訪問mysql為例,執行乙個sql命令,如果不使用連線池,需要經過哪些流程。

不使用資料庫連線池的步驟:

tcp建立連線的三次握手

mysql認證的三次握手

真正的sql執行

mysql的關閉

tcp的四次握手關閉

可以看到,為了執行一條sql,卻多了非常多網路互動。

優點:實現簡單

缺點:

2、使用連線池流程

使用資料庫連線池的步驟:

第一次訪問的時候,需要建立連線。 但是之後的訪問,均會復用之前建立的連線,直接執行sql語句。

優點:系統可採取設定最小連線數和最大連線數等引數來控制連線池中的連線。最小連線數是系統啟動時建立的資料庫連線數。最小連線數小,則啟動快,響應慢。通常設定較大一些。最小連線數可以設定為5個-10個。最大連線數根據硬體配置設定,4核心機器可以設為10個,8核心可以設為20個。

hikaricp的預設的最大和最小連線數是10。作者建議是設定最大和最小連線數為相同的值,維護乙個高效能連線池。

為什麼連線池數並不是越大越好?

第一點,首先我們要知道單核cpu「同時」執行多個執行緒,只不過是假象。單核cpu同一時刻只能執行乙個執行緒,然後作業系統切換上下文,cpu 核心快速排程,執行另乙個執行緒的**。這其中便涉及到了大量上下文切換帶來的額外效能損耗。

連線數的計算公式

連線數 = ((核心數 * 2) + 有效磁碟數)
伺服器 cpu 是 4核 i7 的,連線池大小應該為 ((4 * 2) + 1) = 9 ~ 10個。具體需要根據實際業務場景做調整。

業務場景

資料庫連線池配置

連線池的必要性 資料庫連線池是負責分配 管理和釋放資料庫連線,它允許應用程式重複使用乙個現有的資料庫連線,可以視作乙個存放資料庫連線的容器。資料庫連線池採用了資源池設計模式,用於資源共享,避免資源的頻繁分配與釋放問題。同時便於統一管理,可以通過對連線池的控制,限制系統與資料庫的連線,監視資料庫的連線...

資料庫連線池技術 DBCP連線池 配置

最近遇到資料庫連線池配置問題,搜了很多資料對照著進行全域性配置都沒有解決。報的錯誤是 org.apache.tomcat.dbcp.dbcp.sqlnestedexception cannot create jdbc driver of class for connect url jdbc mysq...

資料庫連線池優化與配置

概述 目前資料庫連線池產品是非常多的,dbcp c3p0 proxool等都是非常優秀的產品。連線池的效能和穩定性會對我們的程式造成極大的影響,因此,有必要對這些連線池產品進行一些選擇。另外,連線池的配置是否恰當,將會決定該連線池的效能和穩定性表現,所以,本文將給出連線池配置的一些要點。在這些連線池...