1. 程式人生 > >連線池原理簡述

連線池原理簡述

概述

資料庫連線池的原理,跟執行緒池一樣都是通過重用資源來提升效能。(執行緒池重用的是執行緒資源,連線池重用的是連線,避免連線頻繁的建立和銷燬,減少了cpu,記憶體,網路開銷),本文主要簡單講述連線池的原理。

資料庫連線的生命週期

讓我看看連線一次資料庫要經歷哪些步驟

  1. 用 database driver 開啟一個連線去連線資料庫
  2. 開啟一個 TCP socket 讀寫資料
  3. 資料讀寫完畢
  4. 關閉連線
  5. 關閉socket

可以看出進行一次資料庫連線是個相當昂貴的操作。

沒有連線池的情況

圖片來自部落格 https://blog.csdn.net/shuaihj/article/details/14223015

如上圖,如果沒有連線池,這時候應用有15萬個併發使用者操作(包括讀寫)那麼就會建立很多連線到資料庫,這樣頻繁的建立連線又銷燬即浪費了cpu,記憶體資源,又會造成資料庫連線過多而報錯。(MySQL 5.7 最大連線數 是 10萬,預設是 151)

有連線池的情況

圖片來自部落格 https://blog.csdn.net/shuaihj/article/details/14223015

如上圖,假設連線池最大連線數是 200 ,現在程式有 15萬 個併發sql操作(包括讀寫,相當於某個電商促銷活動,有15萬人線上操作,這個量級(阿里,唯品會等)很容易達到),這個時候,他們就會輪換使用這 200 個連線來執行sql,這樣連線池和資料庫的連線最多200個, 不會建立過多連線。這樣使用連線池即減少了連線頻繁地建立和銷燬,又避免了過多連線打垮資料庫,並且每次建立銷燬一個連線大概 0.05s~1s(MySQL) ,相當於每個sql操作都多幾十到幾百毫秒,這很明顯是沒對的。

瞭解連線池原理的好處

  • 懂得如何配置最大連線數了(不要超過資料庫最大連線數,當然也不是越大越好,最大連線數一般跟最大執行緒池數一樣,設定成 cpu核心數*2 就行了,具體參考 https://blog.csdn.net/w05980598/article/details/78797310/ 文章)
  • 知道了資源池設計模式:即資源池設計模式是用來解決資源頻繁建立和銷燬帶來的浪費問題。比如資料庫連線池, 執行緒池等等。後續遇到同樣場景的問題,就可以用此設計模式來解決。

參考

https://blog.csdn.net/shuaihj/article