golang :连接数据库闲置断线的问题
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设置一个超时时间,时间小于数据库的超时时间即可。
golang :连接数据库闲置断线的问题的更多相关文章
- FlashFXP(强大的FXP/ftp上传工具)V5.0.0.3722简体中文特别版
flashfxp是功能强大的fxp/ftp软件,融合了一些其他优秀ftp软件的优点,如像cuteftp一样可以比较文件夹, FlashFXP是一款功能强大的FXP/ftp上传工具, FlashFXP集 ...
- Hadoop集群(第3期)_VSFTP安装配置
1.VSFTP简介 VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全. 安全性是编写VSF ...
- linux ftp 安装及相关命令
1.VSFTP简介 VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全. 安全性是编写VSF ...
- Go语言基础之16--Mysql基本操作
一.Mysql驱动及数据库连接 1.1 Golang中的Mysql驱动 A. https://github.com/go-sql-driver/mysql B. Go本身不提供具体数据库驱动,只提供驱 ...
- Hadoop集群_VSFTP安装配置
原作者写的太好了,我这个菜鸟不自觉就转载了,原文链接:http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503864.html 如果,您认为阅读这 ...
- Hadoop集群(第4期)VSFTP安装配置
1.VSFTP简介 VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全. 安全性是编写VSF ...
- FlashFXP免费版下载
http://www.wocaoseo.com/thread-294-1-1.html 关于互联网的上传下载软件可能有很多种,也有很多安装后免费使用的软件比如8UFTP等,但如果论起速度和功能性,个人 ...
- 发现电脑上装着liteide,就用golang做一个TCP通讯测试(支持先启动client端和断线重连)
1.参考https://www.cnblogs.com/yin5th/p/9274495.html server端 main.go package main import ( "fmt&qu ...
- golang(10):web开发 & 连接数据库
http编程 ) Go原生支持 http : import ("net/http") ) Go 的 http 服务性能和 nginx 比较接近 ) 几行代码就可以实现一个 web ...
随机推荐
- XML,dom4j和Java
看了“罗辑思维”的节目,终于克服了自己的拖延症,开始动笔写这篇文章了. 写这篇文章的目的是把XML的解析,萃取和验证都尽量覆盖一下,存储以便日后备考,使用的包是dom4j,涉及语言是Java. dom ...
- 算法笔记_130:行列递增矩阵的查找(Java)
目录 1 问题描述 2 解决方案 2.1定位法 1 问题描述 在一个m行n列的二维数组中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排列.现在输入这样的一个二维数组和一个整 ...
- 算法笔记_033:十六进制转八进制(Java)
目录 1 问题描述 2 解决方案 2.1 注意问题 2.2 具体实现代码 1 问题描述 具体问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1& ...
- javascript 作用域 通俗解释
首先将作用域比喻为一座大楼: 第一层表示当前执行作用域.大楼顶层表示全局作用域. (1)js首先会在当前楼层进行查找变量,如果没有找到,就做电梯往上一层(二层)楼查找. (2)若还是没有找到继续往上查 ...
- LoadRunner中运行场景时提示"You do not have a license for this Vuser type."
LoadRunner中运行场景时提示"You do not have a license for this Vuser type." 2012-06-15 17:09:07| 分 ...
- css background-position结合disaply:inline-block使用
$(".icon-a").on('click', function (e) { if ($(this).next().css('display') == "none&qu ...
- 多线程之 ThreadStart 和 ParameterizedThreadStart 委托
先看微软如何给出的方法使用,如下查看,我们发现,如下两个委托,分别对应带参数创建线程 和 不带参数创建线程. 下列 委托 方法不带参数 ThreadStart namespace System.Thr ...
- 教你在Ubuntu系统下保存屏幕亮度设置
本文保留屏幕亮度方法适合使用笔记本的朋友,大家都知道,过亮的屏幕不但刺眼而且缩短LCD屏幕寿命,不幸的是,Ubuntu默认关机后并不保存当前屏幕亮度配置数据,每次开机都要重新设置亮度,很不方便.本文 ...
- 学习C#——性能计数器
写在前面: 作为Web应用开发前线的一枚小兵,每看到“性能”一词总有种要亮瞎眼的感觉,说到“性能”那就不能不提“数据”,在程序猿.攻城师中不是流行这样一句话吗?“无图无真相”,谁要说谁开发的应用性能有 ...
- 用Jedis操作redis示例一,Key,value HashMap
简单的key,value形式 public class RedisDemo { public static void main(String[] args) { Jedis jedis = new J ...