20190710 - 數據庫連接池大小如何設置

誤區:數據庫連接池設置的越大,性能越高,吞吐量越大。
錯錯錯。

爲啥呢?? 【CPU + 磁盤I/O + 網絡I/O】
主要原因:
【CPU】:因爲單核CPU的計算機,運行數百個線程,也是CPU去快速調度,切換,執行,使它看起來並行,但其實並不是噠。而且一旦線程的數量超過了CPU核心的數量,再加線程,系統只會更慢,因爲上下文切換很耗費額外性能。如果說不考慮其他因素,那麼服務器是幾核,數據庫的連接數就設置成幾就能提供最優性能。
其他原因:
【磁盤I/O】:磁盤是由旋轉的金屬碟片和裝在步進馬達上的讀寫頭組成的,要數據,就得先尋址。所以,磁盤的操作就會帶來尋址的耗時和旋轉的耗時,畢竟你要旋轉到位才能操作,在這過程中,線程都是阻塞等待狀態的,那麼其實CPU可以服務於其他的線程。所以說,如果線程處理的是I/O密集型的業務,就可以設置的比CPU核心稍微大一點,這樣就可以充分利用空閒時間完成更多的工作,如果是SSD固態硬盤,不需要尋址和旋轉,減少線程阻塞的時間,那麼更接近於CPU核心數會發揮出更高的性能。
【網絡I/O】:網絡帶寬越高,線程阻塞可能性越小,那麼線程數量越接近CPU核心數越好。

連接數計算公式

連接數 = ((核心數 * 2) + 有效磁盤數) (PostgreSQL 提供)
如果服務器CPU是四核i7的,那麼連接數的大小爲:(4*2)+1 = 9

當然公式不是萬能的啦,也要根據具體場景具體分析,例如:
如果系統中混合了長事務和短事務,那麼,可以創建兩個連接池,一個服務於長事務,一個服務於短事務。
或者說,業務要求同一時間內只執行一定數量的任務,那麼併發任務數就應該去適配連接池連接數。

參考鏈接:https://mp.weixin.qq.com/s?__biz=Mzg2MzE5MjMxNQ==&mid=2247489376&idx=1&sn=0b33a6e05909366cb984452c509b6603&chksm=ce7d02f4f90a8be259b546dc1d355f5eb2cef612fa34886447dff21990060fab6fe2097e01dd&mpshare=1&scene=1&srcid=&rd2werd=1#wechat_redirect

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章