猿问

戈朗 sql.DB 等待计数大于 0,即使池中有足够的空闲连接

我正在查看戈朗中一个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

为什么当周围有足够的空闲连接时,应用程序会尝试打开更多连接,我应该如何调整数据库参数以减少问题?


精慕HU
浏览 140回答 1
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)
随时随地看视频慕课网APP

相关分类

Go
我要回答