반응형
GORM 시간 초과 시 MariaDB 세션을 제대로 종료할 수 없음
저는 GORM을 사용하여 MariaDB에 10초의 시간 제한을 두고 모델을 일괄 삽입하는 서비스를 가지고 있습니다.
timeoutCtx, cancel := context.WithTimeout(ctx, 10*time.Second)
defer cancel()
var gorm *gorm.DB
tx := gorm.
Session(&gorm.Session{SkipDefaultTransaction: true, Context: timeoutCtx}).
Table(TableName("tableName")).
Clauses(clause.OnConflict{DoNothing: true}).
Create(models)
if tx.Error != nil {
return tx.Error
}
return nil
때때로 배치 삽입으로 인해 시간 초과 컨텍스트가 발생하고 응용 프로그램 연결이 DB에 다른 배치 삽입에 재사용됩니다.그러나 DB 측에서는 실제 삽입이 얼마나 걸리든 세션/연결이 열린 상태로 유지됩니다.각 연결 슬롯은 연결 슬롯을 차지하지만 최악의 경우 GORM은 DB에 대한 새 연결을 생성하고 시간 초과도 발생하며 결국 모든 슬롯이 사용되어 데이터베이스가 잠깁니다.
(와 함께)MaxIdleConns
+MaxOpenConns
) * num_max < db_max_connections, 이렇게 됩니다.
저는 이것을 현지에서 재현할 수 없지만, 우리의 생산 데이터베이스에서 여러 번 발생했습니다.세션 제한 시간 동안 GORM이 세션/연결을 제대로 종료하지 않는 것 같습니다.DB 측에서 연결을 명시적으로 종료하고 컨텍스트 시간 초과 시 풀로 되돌릴 수 있는 방법이 있습니까?
언급URL : https://stackoverflow.com/questions/76059564/cannot-properly-terminate-a-mariadb-session-on-gorm-timeout
반응형
'source' 카테고리의 다른 글
문자열(C#)을 "곱"할 수 있습니까? (0) | 2023.08.15 |
---|---|
PySpark에서 내림차순으로 정렬 (0) | 2023.08.15 |
안드로이드에서 의도를 사용하여 전화를 거는 방법은 무엇입니까? (0) | 2023.08.15 |
PythonTypeError: 형식 문자열에 대한 인수가 부족합니다. (0) | 2023.08.15 |
$.jSON이 IE8에서 캐시된 데이터를 반환합니다. (0) | 2023.08.15 |