> 백엔드 개발 > Golang > Go에 행을 삽입할 때 Postgres 연결 풀 고갈을 방지하는 방법은 무엇입니까?

Go에 행을 삽입할 때 Postgres 연결 풀 고갈을 방지하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-13 02:59:09
원래의
144명이 탐색했습니다.

How to Avoid Postgres Connection Pool Exhaustion When Inserting Rows in Go?

Go의 행 삽입을 위한 재사용 가능한 Postgres DB 연결: 연결 풀 고갈 해결

목표는 재사용 가능한 단일 Postgres 데이터베이스 연결을 사용하는 것입니다. Go에서 행 삽입을 위해. 이 오류는 잘못된 연결 처리로 인해 코드가 실수로 여러 연결을 열 때 발생합니다.

Postgres의 연결 풀 메커니즘인 sql.DB는 단일 연결이 아닌 연결 캐시를 유지합니다. Postgres 서버의 최대 연결 제한까지 필요에 따라 연결을 동적으로 할당합니다. 그러나 반환된 Row 값

Rows 인스턴스를 내부적으로 보유하는 Row 개체는 자체 연결을 관리합니다. Scan이 호출될 때만 연결이 자동으로 해제됩니다. Scan 호출을 무시하면 연결이 계속 유지되어 DB가 후속 QueryRow 호출에서 새 연결을 열게 됩니다. 연결이 해제되지 않은 상태에서 이 문제가 발생하면 풀이 소진되어 문제가 발생합니다.

이 문제를 해결하려면 다음 접근 방식 중 하나를 채택할 수 있습니다.

  • 다음 결과가 나타나면 Exec을 활용하세요. 쿼리는 중요하지 않습니다.
  • 반환된 *Row에 대해 Scan을 호출하여

다음은 이러한 변경 사항을 포함하는 수정된 코드 조각입니다.

// ...

func main() {

    // ...

    // msg handling

    sqlStatement := `
    INSERT INTO heartbeat ("Legend", "Status", "TimeStamp")
    VALUES (, , )
    `

    row := db.QueryRow(sqlStatement, Legend, Status, TimeStamp)
    row.Scan(&dummy)  // dummy variable to discard the result

    // ...

}

// ...
로그인 후 복사

이렇게 하면 연결이 즉시 해제되어 DB 연결 풀이 고갈되는 것을 방지할 수 있습니다.

위 내용은 Go에 행을 삽입할 때 Postgres 연결 풀 고갈을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿