連線池的必要性
資料庫連線池是負責分配、管理和釋放資料庫連線,它允許應用程式重複使用乙個現有的資料庫連線,可以視作乙個存放資料庫連線的容器。
資料庫連線池採用了資源池設計模式,用於資源共享,避免資源的頻繁分配與釋放問題。同時便於統一管理,可以通過對連線池的控制,限制系統與資料庫的連線,監視資料庫的連線數量和使用情況。
1、不使用連線池流程#
下面以訪問mysql為例,執行乙個sql命令,如果不使用連線池,需要經過哪些流程。
tcp建立連線的三次握手
mysql認證的三次握手
真正的sql執行
mysql的關閉
tcp的四次揮手關閉
為了執行一條sql,卻多了非常多網路互動。
優點:實現簡單
缺點:網路io較多
資料庫的負載較高
響應時間較長及qps較低
應用頻繁的建立連線和關閉連線,導致臨時物件較多,gc頻繁
在關閉連線後,會出現大量time_wait 的tcp狀態(在2個msl之後關閉)
2、使用連線池流程#
使用資料庫連線池的步驟:
第一次訪問的時候,需要建立連線。 但是之後的訪問,均會復用之前建立的連線,直接執行sql語句。
優點:較少了網路開銷
系統的效能會有乙個實質的提公升
沒了麻煩的time_wait狀態
資料庫連線數設定#
系統可採取設定最小連線數和最大連線數等引數來控制連線池中的連線。最小連線數是系統啟動時建立的資料庫連線數。最小連線數小,則啟動快,響應慢。通常設定較大一些。最小連線數可以設定為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...
資料庫連線池 Redis連線池
基本原理 在內部物件池中,維護一定數量的資料庫連線,並對外暴露資料庫連線的獲取和返回方法。如外部使用者可通過getconnection方法獲取資料庫連線,使用完畢後再通過releaseconnection方法將連線返回,注意此時的連線並沒有關閉,而是由連線池管理器 並為下一次使用做好準備。2.作用 ...
資料庫連線池的配置
配置初始化大小 最小 最大 檢測時候用到的語句,隨便寫一條即可 記錄下其他的屬性功能吧。配置預設值 說明name 配置這個屬性的意義在於,如果存在多個資料來源,監控的時候 可以通過名字來區分開來。如果沒有配置,將會生成乙個名字,格式是 datasource system.identityhashco...