为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:archlinux
【CPU】: i9
【问题描述】*:
使用mysql数据库开发时 我是这样设定的
sqlDB.SetMaxIdleConns(10)
sqlDB.SetMaxOpenConns(100)
sqlDB.SetConnMaxLifetime(time.Hour)
但是dm的话 lifetime到期后 sql 查询就会不存在 dm怎么设定maxlifetime
您好,方便的话,请提供一个简单的demo以供复现。
这边改了一下,lifetime过期后,varchar类型能正常查询:
我用的是gorm库
db, dbErr = gorm.Open(dm8.Open(g.Cfg().GetString(“gorm.dm.dsn”)), &gorm.Config{})
sqlDB, err := db.DB()
sqlDB.SetMaxIdleConns(10)
sqlDB.SetMaxOpenConns(100)
sqlDB.SetConnMaxLifetime(time.Hour)
下面的这条查询
affected := global.DB.Where(g.Map{
“NAME”: name,
}).First(&user).RowsAffected
lifetime过期后,就查不到了
您好,SetConnMaxLifetime不能设置时间过长,如果在规定时间,这样会导致失败重连的时间太长。推荐时间为30-60秒左右。
gorm v2代码可以参考如下:
// Gorm 初始化数据库并产生数据库全局变量
func Gorm() *gorm.DB {
dsn := fmt.Sprintf("dm://SYSDBA:%s@localhost:5236?sslKeyPath=%s&sslCertPath=%s",
common.DM_CONFIG.System.Password,
fmt.Sprintf("%s/SYSDBA/client-key.pem",common.DM_CONFIG.System.SslPath),
fmt.Sprintf("%s/SYSDBA/client-cert.pem",common.DM_CONFIG.System.SslPath))
if db, err := gorm.Open(dm8.Open(dsn),&gorm.Config{}); err != nil {
common.DM_LOG.Error("Dm启动异常", zap.Any("err", err))
return nil
} else {
sqlDB, _ := db.DB()
sqlDB.SetMaxIdleConns(2)
sqlDB.SetMaxOpenConns(5)
sqlDB.SetConnMaxLifetime(time.Minute)
return db
}
}

您好,我这边验证了一下,达梦在连接创建后,执行时间超过SetConnMaxLifetime 设定的值后,仍然可以继续DML操作。