猿问

SetMaxOpenConns() 无法解决“错误 1040:连接过多”

我正在将 golang 与 Mysql 一起使用。我正在使用apache benchmark tool. 我收到太多连接错误。我读了这篇文章。所以,我SetMaxOpenConns(100)在我的代码中添加了。我仍然收到太多连接错误。


我正在做以下查询


ab -n 1000 -k -c 20 -p post.txt -T application/x-www-form-urlencoded http://localhost:8084/abcd


注意: post.txt 文件包含 35 个 id 的数组(整数类型)。这是我的主要功能:


db, err := models.NewDB("root:@/rules")

    if err != nil {

        panic(err)

    }


    db.SetMaxOpenConns(100)

    http.Handle("/abcd", getReq(db))


    log.Fatal(http.ListenAndServe(":8084", nil))

我在 goroutine 中查询所有 id 的这个函数。


func getRuleforProduct(db *sql.DB, id int) map[int]string {

    m := make(map[int]string)

    var res string

    err := db.QueryRow("select rules from table where product_id = ?", id).Scan(&res)

    checkError(err)

    m[id] = res

    return m

}

即使每秒请求较少,如何解决此问题。我希望代码至少适用于 20 个并发请求。


当年话下
浏览 261回答 2
2回答

桃花长相依

首先,您应该检查您的 MySQL 服务器允许使用SHOW VARIABLES LIKE 'max_connections'. 默认值为 151,但如果它小于 100,那么您的程序显然会尝试打开太多连接。但即使它超过 100,你仍然可以很容易地得到那个错误。MySQLmax_connections是一个影响整个服务器的全局变量。如果您的程序在同一台服务器上使用其他数据库,它们也将计入您的max_connections限制。或者类似地,如果您有其他程序使用您的数据库服务器,您也可能会用完连接。在这种情况下,您必须使用较小的值SetMaxOpenConns()或增加max_connections变量。还可以考虑将db.SetMaxIdleConns()To 设置为低于 的值db.SetMaxOpenConns()。否则,您可能有 100 个(或您赋予的任何值SetMaxOpenConns)到数据库服务器的空闲连接用尽了连接池。

梵蒂冈之花

要更新打开连接限制并查看该限制,您只需登录 mysql 并执行以下命令。mysql> SHOW VARIABLES LIKE 'max_connections';+-----------------+-------+| Variable_name   | Value |+-----------------+-------+| max_connections | 90  |+-----------------+-------+1 row in set (0.00 sec)下面的命令将打开连接的限制设置为 1000,可以根据您的需要进行更改。mysql> SET GLOBAL max_connections = 1000;Query OK, 0 rows affected (0.00 sec)mysql> SHOW VARIABLES LIKE 'max_connections';+-----------------+-------+| Variable_name   | Value |+-----------------+-------+| max_connections | 90  |+-----------------+-------+1 row in set (0.00 sec)作为参考,您可以从这里mysql 链接转到 mysql 官方链接
随时随地看视频慕课网APP

相关分类

Python
我要回答