連線池原理簡述
阿新 • • 發佈:2019-04-11
概述
資料庫連線池的原理,跟執行緒池一樣都是通過重用資源來提升效能。(執行緒池重用的是執行緒資源,連線池重用的是連線,避免連線頻繁的建立和銷燬,減少了cpu,記憶體,網路開銷),本文主要簡單講述連線池的原理。
資料庫連線的生命週期
讓我看看連線一次資料庫要經歷哪些步驟
- 用 database driver 開啟一個連線去連線資料庫
- 開啟一個 TCP socket 讀寫資料
- 資料讀寫完畢
- 關閉連線
- 關閉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/ 文章)
- 知道了資源池設計模式:即資源池設計模式是用來解決資源頻繁建立和銷燬帶來的浪費問題。比如資料庫連線池, 執行緒池等等。後續遇到同樣場景的問題,就可以用此設計模式來解決。