使用中的连接如果一直被占用,将会因没有空闲连接而不断创建新的连接。

database/sql 包什么情况会导致连接一直占用?

通过 Query 执行查询,没有 close 返回的结果集就会把连接一直被占用着。事务如果不记得关闭,也会导致连接一直占用,Prepare 的 Statement 要释放,非 Query 操作要记得用 Exec 执行,因为 Query 返回包含结果集,我们并不关心,但即使空结果集也会占着连接。

反正就是,如果没有复用,可能某些地方的写法不规范。这有篇文档,非常值得你一读,http://go-database-sql.org/,从使用的角度介绍 database/sql, 非常棒。

再说一点,虽说是应该不会犯的错误,但也提一下吧。连接复用在 MySQL 服务端也要相应的配置。否则可能出现客户端设置的 MaxConnection 超过服务端的配置。


欢迎关注我的专栏,Golang 之旅。见证我的 Golang 学习历程。