首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SetMaxOpenConns()没有解决` `Error 1040:连接太多‘

SetMaxOpenConns()没有解决` `Error 1040:连接太多‘
EN

Stack Overflow用户
提问于 2016-08-30 11:58:20
回答 2查看 4.3K关注 0票数 2

我和Mysql一起使用golang。我正在使用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个ids的数组(类型为整数)。这是我的主要功能:

代码语言:javascript
复制
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))

我在go例程中查询所有ids的函数。

代码语言:javascript
复制
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个并发请求。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-31 13:44:32

首先,您应该检查MySQL服务器允许在SHOW VARIABLES LIKE 'max_connections'中打开多少个连接。默认值是151,但是如果它小于100,那么您的程序显然会尝试打开太多的连接。

但是即使它超过100,你仍然可以很容易地得到这个错误。MySQL的max_connections是一个影响整个服务器的全局变量。如果您的程序使用同一服务器上的其他数据库,它们也将计算到您的max_connections限制。或者类似地,如果您有其他程序使用您的数据库服务器,您也可能耗尽连接。在这种情况下,您必须为SetMaxOpenConns()使用较小的值或增加max_connections变量。

还可以考虑将db.SetMaxIdleConns()设置为低于db.SetMaxOpenConns()的值。否则,您可能会有100个(或给SetMaxOpenConns的任何值)空闲连接到您的数据库服务器,使用您的连接池。

票数 1
EN

Stack Overflow用户

发布于 2020-04-02 19:34:04

要更新开放的对角限制并查看该限制,只需登录到mysql并执行以下命令。

代码语言:javascript
复制
mysql> SHOW VARIABLES LIKE 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 90  |
+-----------------+-------+
1 row in set (0.00 sec)

下面的命令将打开连接的限制设置为1000,可以根据需要进行更改。

代码语言:javascript
复制
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链接

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39226889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档