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设置一个超时时间,时间小于数据库的超时时间即可。
时间: 2024-10-29 10:46:58

golang :连接数据库闲置断线的问题的相关文章

MFC用ADO方式连接数据库,断线重连的问题,如何恢复数据库链接

采用的方式是用定时器不断查询数据库连接状态, void CSqlDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default if(nIDEvent==TIMER_SQL) { //检查SQL m_bSql=CMakeSureSql::Check(g_Connection); //这里的全局的CAdoConnection* if(!m_bSql) { CMakeSureS

终端工具

终端工具: 1.WinSCP 开源  [工具介绍] WinSCP[1] 是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议.它的主要功能就是在本地与远程计算机间安全的复制文件.最近:WinSCP 5.6.2 beta released http://winscp.net/eng/download.php http://sourceforge.net/projects/winscp/?source=typ_redirect 2.XShell 商业版  [工具介绍]

FlashFXP 中文破解版+上传FTP

00.主题截图 简介: FlashFXP是一款功能强大的FXP/FTP软件,集成了其它优秀的FTP软件的优点,如CuteFTP的目录比较,支持彩色文字显示:如BpFTP支持多目录选择文件,暂存目录:又如LeapFTP的界面设计.支持目录(和子目录)的文件传输,删除:支持上传,下载,以及第三方文件续传:可以跳过指定的文件类型,只传送需要的本件:可自定义不同文件类型的显示颜色:暂存远程目录列表,支持FTP代理及Socks 3&4:有避免闲置断线功能,防止被FTP平台踢出:可显示或隐藏具有“隐藏”属性

Hadoop集群(第3期)_VSFTP安装配置

1.VSFTP简介 VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全. 安全性是编写VSFTP的初衷,除了这与生俱来的安全特性以外,高速与高稳定性也是VSFTP的两个重要特点. 在速度方面,使用ASCII代码的模式下载数据时,VSFTP的速度是Wu-FTP的两倍,如果Linux主机使用2.4.*的内核,在千兆以太网上的下载速度可达86MB/S. 在稳定方面,VSFTP就更加的出色,VSF

linux ftp 安装及相关命令

文章出自http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503864.html Hadoop集群(第3期)_VSFTP安装配置 1.VSFTP简介 VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全. 安全性是编写VSFTP的初衷,除了这与生俱来的安全特性以外,高速与高稳定性也是VSFTP的两个重要特点. 在速度方面,使用ASCII代

Hadoop集群(第4期)VSFTP安装配置

1.VSFTP简介 VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全. 安全性是编写VSFTP的初衷,除了这与生俱来的安全特性以外,高速与高稳定性也是VSFTP的两个重要特点. 在速度方面,使用ASCII代码的模式下载数据时,VSFTP的速度是Wu-FTP的两倍,如果Linux主机使用2.4.*的内核,在千兆以太网上的下载速度可达86MB/S. 在稳定方面,VSFTP就更加的出色,VSF

golang(10):web开发 & 连接数据库

http编程 1) Go原生支持 http : import ("net/http") 2) Go 的 http 服务性能和 nginx 比较接近 3) 几行代码就可以实现一个 web 服务 http 服务端 // 示例代码: package main import ( "fmt" "net/http" ) func Hello(w http.ResponseWriter, r *http.Request){ fmt.Println("

golang自己定义数据类型查询与插入postgresql中point数据

golang自己定义数据类型查询与插入postgresql中point数据 详细代码例如以下: package main import ( "bytes" "database/sql" "database/sql/driver" "fmt" _ "github.com/lib/pq" "strconv" "strings" ) // 自己定义支持类型 type Poi

UniDAC 断线重连方法

KBM服务端的 UniConnection 要实现断线重连(连接 MSSQLServer), 需要以下几个步骤: 一.修改单元文件:kbmMWUniDAC.pas procedure TkbmMWUNIDACConnection.InternalOpenConnection(ConnectionPool:TkbmMWCustomConnectionPool); begin // Create new database connection using template. with TkbmMWU