我试图了解 Max 连接的工作原理。基本上我有这个数据库配置:params.MinSessions = 5params.MaxSessions = 6params.SessionTimeout = 0params.WaitTimeout = 5 * time.Secondparams.SessionIncrement = 0params.ConnClass = "GOLANGPOOL"// Connect!result, err := sql.Open("godror", params.StringWithPassword())result.SetMaxIdleConns(0)但是我可以使用 sql.DB.Stats 看到 242 个连接:DB Established Open Conn (use + idle): 242DB Idle Conn: 0DB In Use Conn: 242DB Max Idle Closed: 766DB Max Idle Time Closed: 0DB Max Lifetime Closed: 0DB Max Open Conn: 0DB Wait Count: 0DB Wait Duration (sec): 0这怎么可能?上限不应该是6个吗?
3 回答
慕仙森
TA贡献1827条经验 获得超7个赞
假设您使用的是最新版本的驱动程序,https://github.com/godror/godror
sql.Open("godror", params.StringWithPassword()) implies standaloneConnection=0 setting.
您看到的统计数据来自 go sql 连接池。go sql 调用驱动程序 connect 方法,该方法反过来尝试从另一个池获取连接(OCI 由于设置 standaloneConnection=0 维护它)。
最大出站连接没有超过 params.MaxSessions 但它只是 go sql 连接计数器
numOpen, ....
理想情况下,将 go sql 池设置调整得更接近另一个池值,这样 go 例程就不会阻塞。
您可以使用 godror.Conn 中的 GetPoolStats() 方法检查 OCI 池统计信息,并确认最大出站连接的实际数量。这里的例子
https://github.com/godror/godror/blob/main/z_test.go
守着星空守着你
TA贡献1799条经验 获得超8个赞
紫衣仙女
TA贡献1839条经验 获得超15个赞
DB In Use Conn:242 DB Max Idle Closed:766
总和差不多1000,喜欢这个默认值
poolMaxSessions=1000
我认为您没有使用 242 个同时连接。你有一个连接,数据库将限制同时会话的数量。
您应该检查 sql 包如何处理它(它是开源的!)以及特定驱动程序如何处理它(也是开源的!),如果有必要,请在驱动程序项目上打开一个问题
https://github.com/godror/godror
- 3 回答
- 0 关注
- 151 浏览
添加回答
举报
0/150
提交
取消