【问题标题】:How to resolve Too many connections如何解决连接过多
【发布时间】:2021-05-04 10:48:36
【问题描述】:

当我运行这个时,我得到Too many connections error 不幸的是我找不到解决方案,我将生成 5000 万个数据

main.go 内容

package main

import (
    "dopinghafiza-videoplayer-mysql/mysql"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    

    var player mysql.Player

    player.Muted = 1
    player.UserId = 55
    player.PlayBackRate = "2.55"
    player.Volume = "4.5888"
    player.Volume = "2.55"

    connection := mysql.GetConnection()

    for i := 0; i < 100000; i++ {
        player.Muted = int8(i % 2)
        player.UserId = i
        mysql.InsertPlayer(player, connection)

    }

}

插入.go 文件内容


package mysql

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

type Player struct {
    UserId       int
    Muted        int8
    PlayBackRate string
    Volume       string
}

func InsertPlayer(player Player, db *sql.DB) {

    res := db.QueryRow("insert into players (muted,user_id,volume,play_back_rate) values (?,?,?,?)", player.Muted, player.UserId, player.Volume, player.PlayBackRate)
    db.Close()
    fmt.Println(res)
}


【问题讨论】:

    标签: mysql go


    【解决方案1】:

    你不应该关闭连接; Go 确实带有一些连接池。

    您还应该使用Exec() 而不是QueryRow,因为您要保持连接打开,因为 MySQL 仍然需要发送数据(尽管看起来很奇怪)。

    func InsertPlayer(player Player, db *sql.DB) {
        res, err := db.Exec("insert into players (muted,user_id,volume,play_back_rate) values (?,?,?,?)",
            player.Muted,
            player.UserId,
            player.Volume,
            player.PlayBackRate)
        if err != nil {
            // and handle errors!
        }
        fmt.Println(res.RowsAffected())
    }
    

    【讨论】:

      【解决方案2】:

      你不应该每次都打开和关闭连接;这是错误的,并且会给您的应用程序带来巨大的成本。

      更好的方法是使用单例模式,打开一次连接,多次使用,然后在应用程序关闭时关闭连接,而不是在每次查询后关闭。

      您可以在此处找到单例模式的示例代码。

      How to create singleton DB class in GoLang

      【讨论】:

      • 我知道单例,但我无法在 golang 中制作
      • @dılosürücü 您可以在上面的链接中找到示例代码。
      【解决方案3】:
      1. 使用mysql -u root -p登录mysql
      2. 使用此命令查看 ma​​x_connections 的值show variables like %max_conne%;
      3. 使用set global max_connections = 4096;增加ma​​x_connections的值

      这将解决您的问题。

      【讨论】:

      • 你可以尝试增加连接数,4096只是一个数字。
      猜你喜欢
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多