数据库

sql.DB连接池需知:

  • sql.DB内置连接池,连接不足时会自动创建新连接,新创建的连接使用sql.Open()时传入的dsn来构造。
  • sql.DBClose时只会关闭连接池中的连接,未归还的连接将会在归还时直接关闭。
  • 归还连接时,不会将bad connections放回连接池,会直接关闭。
  • sql.DB的Query/Exec/Ping/Prepare/Begin操作会从连接池取一条连接或者直接创建新的连接,然后在新连接上操作。
  • sql.DB的Query/Exec/Ping/Prepare/Begin等操作取连接时遇到bad connections最多尝试2次,若依然报bad connections错则直接创建新连接。
  • sql.DB即使使用USE dbname切换了库,但是Query和Exec等操作会从连接池取(不确定取出的连接连向哪个db)或创建连接(连哪个db或者不连db依据dsn)。
  • Query占有的连接,在Rows.Next()遍历完成或Rows.Close()调用后释放。
  • QueryRow占有的连接,在Row.Scan()调用后释放。
  • Begin开启事务后Tx占有的连接,在Tx.Commit()Tx.Rollback()后释放。
  • Exec/Ping/Prepare都是执行完直接释放连接
  • sql.Conn和sql.Tx的Query/Exec/Ping/Prepare都是在当前连接上执行操作,不会另获取新连接。
  • 同一个sql.Conn/sql.Tx的QueryExec不要一个操作未完成就执行另一个操作,否则容易报错(busy buffer)
SetMaxOpenConns()

默认无限制
设置最大打开的连接数,若到达则会阻塞操作,直到其他连接释放。

SetConnMaxLifetime()

默认为2
设置连接池最大闲置连接数,若到达则归还的连接会直接关闭。

SetConnMaxLifetime()

如果小于0,则永不过期
闲置连接的最大生命周期,应小于数据库连接的超时时间。
从连接创建时计时或连接池取连接时重新计时,连接只有在连接池中超时才会被清理掉。

Conn()

从连接池取出或者创建一个连接返回。在返回的sql.Conn上Ping,Exec,Query,QueryRow,Begin都是在当前连接上操作。

注意:
sql.Conn连接关闭,会阻塞等连接上的事务完成,直到Tx.Commit()或者Tx.Rollback()。

golang sql.DB的更多相关文章

  1. Golang SQL连接池梳理

    目录 一.如何理解数据库连接 二.连接池的工作原理 三.database/sql包结构 四.三个重要的结构体 4.1.DB 4.2.driverConn 4.3.Conn 五.流程梳理 5.1.先获取 ...

  2. ent 基本使用十一 sql.DB 集成

    这个功能是github中大家提的比较多的一个,所以官方也暴露了相关的api 配置sql.DB 一种方式 package main ​ import ( "time" ​ " ...

  3. 亲测可用的golang sql例程与包管理

    sqlite与golang package main import ( "database/sql" "fmt" "time" _ &quo ...

  4. golang sql database drivers

    https://github.com/golang/go/wiki/SQLDrivers SQL database drivers The database/sql and database/sql/ ...

  5. 使用Automation将Azure SQL DB容灾到本地

    前段时间有个客户有如下需求,将Azure SQL Database数据库容灾到本地(备份频率1小时/次). 那么对于这样的需求,我们可以使用Azure Automation来实现自动化备份到本地. 大 ...

  6. Golang中Struct与DB中表字段通过反射自动映射 - sqlmapper

    Golang中操作数据库已经有现成的库"database/sql"可以用,但是"database/sql"只提供了最基础的操作接口: 对数据库中一张表的增删改查 ...

  7. 在Golang中如何正确地使用database/sql包访问数据库

    本文记录了我在实际工作中关于数据库操作上一些小经验,也是新手入门golang时我认为一定会碰到问题,没有什么高大上的东西,所以希望能抛砖引玉,也算是对这个问题的一次总结. 其实我也是一个新手,机缘巧合 ...

  8. 关于Golang中database/sql包的学习

    go-sql-driver 请求一个连接的函数有好几种,执行完毕处理连接的方式稍有差别,大致如下: db.Ping() 调用完毕后会马上把连接返回给连接池. db.Exec() 调用完毕后会马上把连接 ...

  9. golang语言sql Rows转化保存成map

    func DoQuery(db *sql.DB, sqlInfo string, args ...interface{}) ([]map[string]interface{}, error) { ro ...

随机推荐

  1. 深入理解JAVA集合系列三:HashMap的死循环解读

    由于在公司项目中偶尔会遇到HashMap死循环造成CPU100%,重启后问题消失,隔一段时间又会反复出现.今天在这里来仔细剖析下多线程情况下HashMap所带来的问题: 1.多线程put操作后,get ...

  2. 软工网络15团队作业8——敏捷冲刺日志的集合贴(Beta阶段)

    Beta阶段 第 1 篇 Scrum 冲刺博客 第 2 篇 Scrum 冲刺博客 第 3 篇 Scrum 冲刺博客 第 4 篇 Scrum 冲刺博客 第 5 篇 Scrum 冲刺博客 第 6 篇 Sc ...

  3. [51CTO]给您介绍Windows10各大版本之间区别

    给您介绍Windows10各大版本之间区别 随着win10的不断普及和推广,越来越多的朋友想安装win10系统了,但是很多朋友不知道win10哪个版本好用,为了让大家能够更好的选择win10系统版本, ...

  4. NULL,"",String.Empty三者在C#中的区别

    (1)NULLnull 关键字是表示不引用任何对象的空引用的文字值.null 是引用类型变量的默认值.那么也只有引用型的变量可以为NULL,如果int i=null,的话,是不可以的,因为Int是值类 ...

  5. bzoj2095-Bridge

    题意 一个 \(n\) 个点 \(m\) 条边的图,每条边双向都有权值(可能不一样).求从 1 开始,经过所有点,经过所有边一次且仅一次(即一定要经过这条边的某个方向)回到 1 的路径上权值最大的最小 ...

  6. cmake 常用变量和常用环境变量查表手册

    cmake 常用变量和常用环境变量查表手册 一,cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用.在 IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定 ...

  7. http请求头、响应头文件详解

    HTTP Request Header 请求头   解释 示例 Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html Accept-Charset 浏 ...

  8. 【BZOJ2281】【Sdoi2011】黑白棋 解题报告

    [BZOJ2281][Sdoi2011]黑白棋 Description ​ 小A和小B又想到了一个新的游戏. ​ 这个游戏是在一个\(1\)*\(n\)的棋盘上进行的,棋盘上有\(k\)个棋子,一半是 ...

  9. BGP的那些安全痛点(转)

    0x00 BGP(RFC 1771. RFC 4271)定义 全称是Border Gateway Protocol, 对应中文是边界网关协议,最新版本是BGPv4. BGP是互联网上一个核心的互联网去 ...

  10. IDEA的强大

    由于朋友推荐,转战IDEA数日,发现一个字就是,牛,完爆任何开发工具,让你代码上瘾的工具. 它集合了所有的开发所需要的东西,且智能化方便,适合开发有一定经验的人去使用,你会爱上它. 下面是快捷键的使用 ...