gpt4 book ai didi

mysql - Golang, mysql : Error 1040: Too many connections

转载 作者:IT老高 更新时间:2023-10-28 13:04:09 25 4
gpt4 key购买 nike

我正在使用 github.com/go-sql-driver/mysql 驱动程序。

我打开一个数据库:

db, err := sql.Open("mysql", str)

然后我有两个函数,每个函数被调用 200 次,使用以下 mysql 代码:

rows, err := db.Query("select name from beehives")
if err != nil {
panic(err)
}
defer rows.Close()

第二个:

    err = db.QueryRow("select id, secret, shortname from beehives where shortname = ?", beehive).Scan(&id, &secre
switch {
case err == sql.ErrNoRows:
err = errors.New("Beehive '"+beehive+"' not found.")
case err != nil:
panic("loginBeehive: "+ err.Error())
default:
// ... do the work

第一个是 panic 的。

我只打开一次数据库怎么会有多个连接,如何关闭它们?

最佳答案

sql.Open doesn't really open a connection to your database.

sql.DB 维护一个与您的数据库的连接池。每次查询数据库时,您的程序都会尝试从该池中获取连接,否则会创建一个新连接。一旦你关闭它们,这些连接就会被放回池中。

这就是 rows.Close() 所做的。当您调用 Scan(...) 时,您的 db.QueryRow("...") 在内部执行相同的操作。

基本问题是您创建了太多查询,每个查询都需要一个连接,但您关闭连接的速度不够快。这样,您的程序必须为每个查询创建一个新连接。

您可以通过调用 SetMaxOpenConns 来限制程序使用的最大连接数。在你的 sql.DB 上。

http://go-database-sql.org/surprises.html了解更多信息。

关于mysql - Golang, mysql : Error 1040: Too many connections,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28135580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com