我和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的数组(类型为整数)。这是我的主要功能:
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的函数。
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个并发请求。
发布于 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的任何值)空闲连接到您的数据库服务器,使用您的连接池。
发布于 2020-04-02 19:34:04
要更新开放的对角限制并查看该限制,只需登录到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链接。
https://stackoverflow.com/questions/39226889
复制相似问题