暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DM达梦数据库会话不释放或者不重复利用;会一直申请到最大连接数后报错退出

原创 达梦 2021-01-31
3414

其原因很有可能就是连接池没有做好相关配置,或者配置了却设置的值不对,那么超时的原因大概有以下几点:

  • 最大连接数大于数据库服务器端配置的最大连接数,多余的连接在被使用到的时候出现连接超时。
  • 网络抖动:每次连接的时候提交或维护大量数据,此时网络不稳定导致连接超时。
  • 占用的资源未被释放,一般只 Open 一次,获取一个 *DB,但是在使用 stmt,rows 或者是 tx 时候用完没有关闭,耗尽资源也有可能导致连接超时。

对于出现的 3 种问题,可以试试下面的解决方法:

  • 对于最大连接数的问题,调用函数 Db.SetMaxOpenConns() 设置值(小于数据库配置的最大连接)。
  • 对于维护大量数据,可以尝试采用事务操作,若失败,回滚。然后重试。
  • 使用 defer 关键字,在启用操作的时候直接在下一行加上 defer *.close() 函数 return 的时候会执行相关的关闭函数。

如果尝试了以上的解决方法,还是发现偶尔会出现连接超时的错误的话,很可能是因为数据库本身对连接有一个超时时间的设置,如果超时时间到了数据库会单方面断掉连接,此时再用连接池内的连接进行访问就会出错,连接池中的每个连接都维护了一个创建时间,取连接的时候会自动检查的,可以试试调用 db 的 SetConnMaxLifetime() 方法来给 db 设置一个超时时间,时间小于数据库的超时时间即可。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论