Golang, mysql: 오류 1040:연결이 너무 많음
저는 github.com/go-sql-driver/mysql 드라이버를 사용하고 있습니다.
데이터베이스를 엽니다.
db, err := sql.Open("mysql", str)
그렇다면 나는 다음과 같은 mysql 코드로 각각 200번씩 호출되는 두 개의 함수를 가지고 있습니다.
rows, err := db.Query("select name from beehives")
if err != nil {
panic(err)
}
defer rows.Close()
두번째:
err = db.QueryRow("select id, secret, shortname from beehives where shortname = ?", beehive).Scan(&id, &secre
switch {
case err == sql.ErrNoRows:
err = errors.New("Beehive '"+beehive+"' not found.")
case err != nil:
panic("loginBeehive: "+ err.Error())
default:
// ... do the work
첫번째는 패닉입니다.
데이터베이스를 한 번만 열 때 두 개 이상의 연결이 있을 수 있으며 어떻게 닫습니까?
sql.Open은 실제로 데이터베이스에 대한 연결을 열지 않습니다.
sql.DB는 데이터베이스에 대한 연결 풀을 유지 관리합니다.데이터베이스를 쿼리할 때마다 프로그램은 이 풀에서 연결을 가져오거나 새 풀을 만듭니다.이 연결은 일단 닫으면 풀장에 다시 넣는 것 이상입니다.
이게 뭐예요.rows.Close()
그래요. 당신의.db.QueryRow("...")
당신이 전화할 때 내부적으로 같은 일을 합니다.Scan(...)
.
기본적인 문제는 각 쿼리마다 연결이 필요하지만 연결을 빨리 닫지 못하는 쿼리를 너무 많이 만들고 있다는 것입니다.이렇게 하면 프로그램에서 각 쿼리에 대한 새 연결을 만들어야 합니다.
sql에서 SetMaxOpenConns를 호출하여 프로그램이 사용하는 최대 연결 수를 제한할 수 있습니다.DB.
자세한 정보는 http://go-database-sql.org/surprises.html 을 참조하십시오.
그*DB
당신이 돌려받는 물건sql.Open
단일 연결에 해당하지 않습니다.데이터베이스의 핸들로 생각하는 것이 좋습니다. 연결 풀을 관리하기 때문입니다.
'(*DB)로 열린 연결 수를 조절할 수 있습니다.유휴 연결을 위해 MaxOpenConns 및 해당 쌍을 설정합니다.
그래서 기본적으로 여기서 일어나는 일은db.Query
그리고.db.QueryRow
자체적으로 연결을 획득하려고 하는데 DB 핸들은 동시 연결 수에 제한을 두지 않으므로 mysql이 처리할 수 있는 것보다 많이 열리면 코드가 패닉 상태가 됩니다.
준비된 진술을 하도록 노력합니다.db.Prepare(query string) (*Stmt, error)
보다stmt.Query
아니면stmt.Exec
보다stmt.Close
연결을 재사용할 수 있습니다.
안녕하세요. 사용후 가까운 연결을 시도해보시겠어요?
db, err := sql.Open("mysql", str)
defer db.Close() // close after end scope
내 프로그램은 항상 데이터베이스에 연결됩니다.(출석 얼굴 실시간 인식)
따라서 데이터베이스 연결을 열고 닫는 것은 가치가 없습니다.
따라서 프로그램을 초기화할 때만 데이터베이스 연결이 계속 열립니다.
func GetAllFaces() interface{} {
OpenDatabaseConnection() ...
}
하지만 나중에 데이터베이스에 접속해 접속 불가를 늘렸고 프로그램을 다운시켰습니다.하지만 문을 닫는 것은rows
개체가 활성 연결을 최소한으로 유지했습니다.(나의 경우 1)
func SaveAttendance(faceId int, date time.Time) error {
sqlQuery := fmt.Sprintf("SELECT ... "))
rows, err := DB.Query(sqlQuery) ...
err = rows.Close()
return err
}
언급URL : https://stackoverflow.com/questions/28135580/golang-mysql-error-1040-too-many-connections
'programing' 카테고리의 다른 글
InnerBlocks 속성을 가져와 상위 블록에 저장 (0) | 2023.10.14 |
---|---|
JavaScript - 정의되지 않은 속성을 설정할 수 없습니다. (0) | 2023.10.14 |
셰이프 파일(.shp)을 xml/json으로 변환 (0) | 2023.10.09 |
Swift에서 계산된 읽기 전용 속성 vs 함수 (0) | 2023.10.09 |
첫 번째 발생만 찾는 XPath 식은 무엇입니까? (0) | 2023.10.09 |