我在控制器的init函数中连接数据库,如:
db, err = sql.Open("mysql", "user:pass@tcp(<ip>:3306)/<db>")
if err != nil {
log.Fatal(err)
}
err = db.Ping()
if err != nil {
log.Fatal(err)
}
然后我准备一些语句(db.Prepare
)并最终在代码中的某处执行它们,而不创建新的数据库连接或任何奇怪的东西。只是放手处理连接池。
但正如您在图片中看到的那样,我获得了大量连接和中止连接,导致服务器运行缓慢甚至崩溃。
为什么会这样?此外,我有大约2000个同时在线用户,每秒约20个查询。我不会认为这很重要,以防万一重要。
修改 这是我如何运行准备好的语句。我有2个选择,1个更新和1个插入。正在运行的选择如下:
err = getStatement.QueryRow(apiKey).Scan(&keyId)
if err != nil {
res, _ := json.Marshal(RespError{"Statement Error"})
w.Write(res)
return
}
插入和更新:
insertStatement.Exec(a,b,c)