GORM 连接池配置
GORM 底层使用 database/sql 连接池,合理配置可提升数据库访问性能。
连接池参数
核心方法
Go
// 获取底层 *sql.DB
sqlDB, err := db.DB()
if err != nil {
panic(err)
}
// 设置最大空闲连接数
sqlDB.SetMaxIdleConns(10)
// 设置最大打开连接数
sqlDB.SetMaxOpenConns(100)
参数说明
| 参数 | 说明 | 默认值 |
|---|---|---|
SetMaxIdleConns | 池中保留的最大空闲连接数 | 2 |
SetMaxOpenConns | 同时打开的最大连接数 | 0(无限制) |
配置示例
基础配置
Go
func initDB() *gorm.DB {
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
sqlDB, _ := db.DB()
sqlDB.SetMaxIdleConns(10)
sqlDB.SetMaxOpenConns(100)
return db
}
Web 服务推荐配置
Go
sqlDB, _ := db.DB()
sqlDB.SetMaxIdleConns(50) // 根据并发量调整
sqlDB.SetMaxOpenConns(200) // 不超过数据库 max_connections
参数调优
调优原则
MaxIdleConns不宜过小,避免频繁创建销毁连接MaxOpenConns需结合数据库最大连接数设置- 多个服务实例需均摊连接数,避免超出数据库限制
计算公式
text
单服务 MaxOpenConns <= 数据库 max_connections / 服务实例数
示例
text
数据库 max_connections = 1000
服务实例数 = 5
每个实例 MaxOpenConns <= 200
注意事项
MaxIdleConns应大于 0,避免每次查询都创建新连接。
MaxOpenConns为 0 表示无限制,生产环境必须设置合理值。
连接池配置必须在
db.DB()返回的*sql.DB上调用,而非*gorm.DB。
要点总结
- 连接池参数通过
*sql.DB的SetMaxIdleConns与SetMaxOpenConns设置 MaxIdleConns控制空闲连接保留数,减少创建开销MaxOpenConns限制并发连接上限,防止数据库过载- 多实例部署需均摊连接数,避免超出数据库限制
- 合理配置连接池可显著提升高并发场景性能
存放路径:D:\git2\jwdev\articles\GORM\进阶\数据库连接池管理\连接池配置.md
📝 发现内容有误?点击此处直接编辑