Files
MyGoNavi/internal/db/sql_pool.go
Syngnat 92aedde121 🐛 fix(db): 优化 SQLServer 首次查询耗时
- 为 SQLServer 连接池保留 1 条空闲连接,减少反复冷连接开销

- 复用 Oracle/OceanBase 的默认空闲连接常量,其他默认数据库池策略保持不变

- 新增连接池行为测试,覆盖 SQLServer 复用与默认池关闭 idle 连接
2026-07-09 17:18:12 +08:00

41 lines
1023 B
Go

package db
import (
"database/sql"
"strings"
"time"
)
const (
defaultSQLMaxOpenConns = 4
defaultSQLMaxIdleConns = 1
defaultSQLConnMaxLifetime = 30 * time.Minute
defaultSQLConnMaxIdleTime = 30 * time.Second
)
func configureSQLConnectionPool(db *sql.DB, dbType string) {
if db == nil {
return
}
switch strings.ToLower(strings.TrimSpace(dbType)) {
case "sqlite", "duckdb":
return
case "oracle", "oceanbase":
db.SetMaxOpenConns(defaultSQLMaxOpenConns)
db.SetMaxIdleConns(defaultSQLMaxIdleConns)
db.SetConnMaxIdleTime(defaultSQLConnMaxIdleTime)
db.SetConnMaxLifetime(defaultSQLConnMaxLifetime)
return
case "sqlserver":
db.SetMaxOpenConns(defaultSQLMaxOpenConns)
db.SetMaxIdleConns(defaultSQLMaxIdleConns)
db.SetConnMaxIdleTime(defaultSQLConnMaxIdleTime)
db.SetConnMaxLifetime(defaultSQLConnMaxLifetime)
return
}
db.SetMaxOpenConns(defaultSQLMaxOpenConns)
db.SetMaxIdleConns(0)
db.SetConnMaxIdleTime(defaultSQLConnMaxIdleTime)
db.SetConnMaxLifetime(defaultSQLConnMaxLifetime)
}