golang :连接数据库闲置断线的问题
admin
2023-05-24 01:22:55
0
golang在进行数据库操作,一般来说我们使用Open函数创建一个数据库(操作)句柄:func Open(driverName, dataSourceName string) (*DB, error)
    我们知道,返回的*DB是一个具有零到多个底层连接的连接池,可以安全的被多个go程使用,并且会维护自身的闲置连接。所以一般来说open函数我们只调用一次,几乎很少需要关闭DB。
    连接池可以使得连接更好的控制,于是简单配置甚至是不做什么配置就可以用了,事实好像也是如此,连上数据库就都ok了。但是!你很可能会遇到下面这样的错误:
[mysql] 2017/01/15 12:23:43 packets.go:124: write tcp 127.0.0.1:45697->127.0.0.1:3306:write: broken pipe
    其原因很有可能就是你的连接池没有做好相关配置,或者配置了却设置的值不对,那么超时的原因大概有以下几点:
    1.最大连接数大于数据库服务器端配置的最大连接数,多余的连接在被使用到的时候出现连接超时
    2.网络抖动:每次连接的时候提交或维护大量数据,此时网络不稳定导致连接超时
    3.占用的资源未被释放,我们一般只open一次,获取一个*DB,但是在使用stmt,rows或者是tx时候用完没有关闭,耗尽资源也有可能导致连接超时。
    对于出现的3中问题,你可以试试下面的解决方案:
    1.对于最大连接数的问题,调用函数Db.SetMaxOpenConns()设置值(小于数据库配置的最大连接)
    2.对于维护大量数据,可以尝试采用事务操作,若失败,回滚。然后重试。
    3.使用defer关键字,在启用操作的时候直接在下一行加上defer *.close()函数return的时候会执行相关的关闭函数。
  如果你尝试了以上的解决方案,还是发现偶尔会出现连接超时的错误的话,很可能是因为数据库本身对连接有一个超时时间的设置,如果超时时间到了数据库会单方面断掉连接,此时再用连接池内的连接进行访问就会出错,连接池中的每个连接都维护了一个创建时间,取连接的时候会自动检查的,你可以试试调用db的SetConnMaxLifetime()方法来给db设置一个超时时间,时间小于数据库的超时时间即可。


相关内容

热门资讯

从技术突破到价值落地 业界热议... 人民网北京5月19日电 (记者杜燕飞)当前,人工智能(AI)作为推动新一轮科技革命和产业变革的力量,...
消息称英特尔推动消费PC制造商... IT之家 5 月 19 日消息,《日经亚洲》今日报道称,Intel(英特尔)正要求其主要 PC 合作...
正保双旗舰学习机S1 &... 近日,正保教育集团成功举办“破界·智学”主题发布会,正式推出两款升级版AI教育硬件——正保学习机S1...
对话尤肖虎院士:未来5到10年... 出品|搜狐科技 作者|张雅婷 4月21日,2026全球6G技术与产业生态大会在南京盛大开幕。 作为下...
欧盟想赶快跟美国签协议,“就像... 【文/观察者网 熊超然】美国总统特朗普重返白宫后,欧洲人被他“死死拿捏”。美国“政客新闻网”欧洲版(...
凤凰网举办文旅品牌国际论坛:各... 据凤凰卫视报道,5月15日,凤凰网作为第四届香港国际文化创意博览会的“全球战略媒体合作单位”,同期举...
70岁榜一阿姨:掏空儿子336... 70岁上海阿姨江慧英,精打细算了大半辈子,人到暮年,却成了家里的“罪人”。从2025年11月开始,四...
德瑞斯电子取得新型散热风扇专利... 国家知识产权局信息显示,深圳市德瑞斯电子科技有限公司取得一项名为“一种新型散热风扇”的专利,授权公告...
新兴技术及应用产业日报(05.... 公司动态 中国移动段晓东:6G智能体通信——智能经济发展新范式 中国移动研究院副院长段晓东在...
2026年618购机指南:50... 随着618购物节的临近,许多消费者都在寻找一款预算在5000元左右,既能满足日常高强度拍照需求,又无...