【问题描述】*:我的数据服务进程(golang编写)启动连接数据库(连接采用的odbc驱动),连接数据库正常,功能也正常,但是在使用一段时间后会突然出现接口超时的情况。我的代码中是如此实现的:
Log.Debug(sqls)
ret, err := sqlDb.Exec(sqls)
if err != nil {
Log.Error("Insert error:%s", err.Error())
}
if ret != nil {
rowsaffected, _ := ret.RowsAffected()
Log.Info("Insert RowsAffected:", rowsaffected)
} else {
Log.Error("Insert failed")
}
在Log.Debug(sqls)时的日志打印正常,打印出来的sql语句在管理工具中也可以执行。
但是在此之后的日志没有任何打印,感觉函数没有返回。以上返回值我都有做错误判断和日志打印。导致其他服务调用该接口超时了。我自己判断感觉是连接出现问题了。之前在其他环境上没有出现过这种错误。产生这个是我连接使用的驱动库有问题吗还是和数据库的配置有关呢
您的描述不是很具体,给您提供几个排查思路:
1、需要确认你的接口请求是不是正常传到了数据库里。是否存在网络层的问题。
2、驱动的版本和数据库版本是否一致
3、出现接口超时后,再次调用是否可以成功,还是出现接口超时后,之后所有的接口请求都无法执行。(如果之后都无法执行成功,建议从应用测排查。)
4、确认是否有锁表的情况,锁等待导致执行超时。