sql.Open并没有真正打开与数据库的连接。
sql.DB维护与数据库的连接池。每次查询数据库时,程序都会尝试从该池获取连接,否则将尝试创建一个新池。一旦关闭这些连接,它们就会放回池中。
这是做什么的
rows.Close()。你
db.QueryRow("...")做同样的事情在内部,当你打电话
Scan(...)。
基本问题是您创建的查询过多,每个查询都需要一个连接,但是关闭连接的速度不够快。这样,您的程序必须为每个查询创建一个新的连接。
您可以通过在sql.DB上调用SetMaxOpenConns来限制程序使用的最大连接数。
有关更多信息,请参见http://go-database-sql.org/surprises.html。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)