關於sql.DB
,在建立和使用數據庫連接方面有幾個參數我們可以根據實際場景來進行優化一下,配置得當的話可以有效提高性能和降低系統資源消耗。
SetMaxOpenConns
用於設置最大打開的連接數,默認值爲0,表示不限制。SetMaxIdleConns
用於設置閒置的連接數,默認值爲2;SetConnMaxLifetime
可以限制一個連接使用的最大時長,默認值爲0,表示不限制。
SetMaxOpenConns
默認情況下,連接池的最大數量是沒有限制的。一般來說,連接數越多,訪問數據庫的性能越高。但是系統資源不是無限的,數據庫的併發能力也不是無限的。因此爲了減少系統和數據庫崩潰的風險,可以給併發連接數設置一個上限,這個數值一般不超過進程的最大文件句柄打開數,不超過數據庫服務自身支持的併發連接數,比如1000。
SetMaxIdleConns
理論上maxIdleConns連接的上限越高,也即允許在連接池中的空閒連接最大值越大,可以有效減少連接創建和銷燬的次數,提高程序的性能。但是連接對象也是佔用內存資源的,而且如果空閒連接越多,存在於連接池內的時間可能越長。連接在經過一段時間後有可能會變得不可用
,而這時連接還在連接池內沒有回收的話,後續被徵用的時候就會出問題。一般建議maxIdleConns的值爲MaxOpenConns的1/2
,僅供參考。
SetConnMaxLifetime
設置一個連接被使用的最長時間,即過了一段時間後會被強制回收,理論上這可以有效減少不可用連接出現的概率。當數據庫方面也設置了連接的超時時間時,這個值應當不超過數據庫的超時參數值。
# 僅供參考,應當按實際測試效果爲準
db.SetMaxOpenConns(1000)
db.SetMaxIdleConns(500)
db.SetConnMaxLifetime(10*time.Minute)