來自oracle 官方對於數據庫連接池的使用建議:
一、 連接風暴是指,在短時間內,連接數成百上千的增長:
1、 連接風暴可能導致數據庫服務器不穩定或者不可用
Logon/Logoff是非常消耗資源的(創建新連接,分配資源,map SGA等)
2、產生連接風暴的根本原因是動態連接池策略,即連接池的最小值和最大值不等,且差值很大(幾千)
3、如果使用動態連接池策略,執行計划變差可能成為連接風暴的導火索,但大量的進程創建和logon活動可能掩蓋導火索,從而導致診斷過程更長
二、Oracle數據庫是process-based architecture:
很多情況下,到數據庫的連接會使用dedicated server方式,這意味着,對於每一個連接,在數
據庫服務器端有一個進程給這個連接服務。過多的連接,意味着過多的進程,但是不意味着更高的TPS
三、CPU的使用效率才是關鍵:
連接數過多會導致CPU cache的命中率下降,從而使得CPU使用效率下降。
連接數過多時,latch的spin機制可能導致更多的空耗的CPU,從而使得CPU使用效率下降
四、建議&問答:
1、對於OLTP類型的系統,所有應用到數據庫服務器的最大連接數 = 最小連接數 = 數據庫服務器CPU core*數的1-10倍。
a、CPU core,指的是物理的core數,而不是超線程之后的
b、1-10倍只是一個參考值,具體適合的數值與具體的工作負載有關,需要測試才能確定。如果工作負載做的IO相對多一些,則可能更接近於10倍是適合的數值,如果工作負載做運算耗 CPU 相對更多一些,則可能更接近於1倍是適合的數值
2、連接池最大值設的很高,但是平時active連接數很少,這樣有沒有問題?
a、在連接池里的連接沒有都active的時候,沒有問題
b、但是連接數設大,就存在所有連接都active的可能,就存在連接數過多導致問題的可能,也會
有連接風暴的風險
c、如果有一次寫日志操作很慢,或者有一條SQL的執行計划出了問題,都可能導致連接被占用的時
間更長,從而導致連接風暴,大量的連接都變成active的,業務系統服務中斷
d、如果知道active連接數總是很少,連接池設小就行了,不需要設大,也不推薦設大