我正在查看戈朗中一個Web應用程序的DBStats。這些指標每 10 秒通過 sqlstat 導出到普羅米修斯。在應用程序中, 設置為 100,并設置為 50。當我查看指標時,我注意到打開的連接數量穩定在50左右。這是意料之中的,這意味著我們將保留 50 個空閑連接。但是,連接數徘徊在 0 到 5 之間,并且大多數情況下為 0。這對我來說很奇怪,因為有源源不斷的流量流入,我不希望連接數為0。MaxOpenConnsMaxIdleConnsInUseInUse另外,我注意到并且非常大。 表示沒有空閑連接和 sql。由于限制,DB 無法打開更多連接。但從上面的統計數據來看,sql似乎有足夠的余量。DB來創建更多的連接(在下面)。大量的也暗示了sql。即使有足夠的空閑連接,DB 也會建立其他連接。WaitCountMaxIdleClosedWaitCountMaxOpenConnsOpenConnectionsMaxOpenConnections MaxIdleClosed同時,我在應用程序中觀察到一些錯誤,我們正在使用MySQL。driver: bad connection為什么當周圍有足夠的空閑連接時,應用程序會嘗試打開更多連接,我應該如何調整數據庫參數以減少問題?
1 回答

小怪獸愛吃肉
TA貢獻1852條經驗 獲得超1個贊
但是,InUse 連接的數量徘徊在 0 到 5 之間,并且在大多數情況下為 0。這對我來說很奇怪,因為有源源不斷的流量流入,我不希望InUse連接的數量為0。
這并不奇怪。InUse 連接的數量像尖峰一樣移動。由于您每10秒才獲得統計數據,因此您看不到峰值。
為什么當周圍有足夠的空閑連接時,應用程序會嘗試打開更多連接,
請參閱 https://github.com/go-sql-driver/mysql#important-settings
“數據庫。建議將“設置”等于(或大于)db。SetMaxOpenConns().當它小于 SetMax 打開康斯 () 時,連接可以比您預期的更頻繁地打開和關閉。
以及我應該如何調整數據庫參數以減少問題?
遵循 go-sql 驅動程序/我的 sql 自述文件的建議。使用 ,并將其設置為 。db.SetConnMaxLifetime()
db.SetMaxIdleConns()
db.SetMaxOpenConns()
db.SetMaxOpenConns(100) db.SetMaxIdleConns(100) db.SetConnMaxLifetime(time.Minute * 3)
- 1 回答
- 0 關注
- 89 瀏覽
添加回答
舉報
0/150
提交
取消