广告
返回顶部
首页 > 资讯 > 数据库 >golang结合mysql怎么设置最大连接数和最大空闲连接数
  • 844
分享到

golang结合mysql怎么设置最大连接数和最大空闲连接数

2023-06-29 06:06:19 844人浏览 泡泡鱼
摘要

本文小编为大家详细介绍“golang结合mysql怎么设置最大连接数和最大空闲连接数”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang结合Mysql怎么设置最大连接数和最大空闲连接数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢

本文小编为大家详细介绍“golang结合mysql怎么设置最大连接数和最大空闲连接数”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang结合Mysql怎么设置最大连接数和最大空闲连接数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

关于最大连接数和最大空闲连接数,是定义在golang标准库中database/sql的。

文中例子连接mysql用的SQL driver package是GitHub.com/go-sql-driver/mysql.

设置最大连接数的接口是

func (db *DB) SetMaxOpenConns(n int)

设置连接MySQL可以打开的最大连接数。

如果n <= 0,表示打开的连接数没有限制。

默认为0,也就是不限制连接数。

另一个与连接数相关的参数是MaxIdleConns,表示最大空闲连接数。

如果MaxIdleConns 大于0,且大于MaxOpenConns,那么将调整MaxIdleConns等于MaxOpenConns,有多余的连接时会关闭多余的连接。

设置最大空闲连接数的接口是:

func (db *DB) SetMaxIdleConns(n int)

如果n<=0,表示不使用空闲连接池,即一个连接如果不使用,不会放入空闲连接池。因此,这种方式不会复用连接,每次执行SQL语句,都会重新建立新的连接。

默认的最大空闲连接数为2:
const defaultMaxIdleConns = 2

关于打开的连接和空闲的连接之间的关系,补充一下:

打开的连接 = 正在使用的连接(inuse) + 处于空闲状态的连接(idle)

下面对最大连接数和最大空闲连接数做下测试和验证。

1.最大连接数测试

首先设置最大打开的连接数为1,接着开启20个goroutine,每个goroutine执行sql语句,打印执行sql使用的连接的connection id。并执行耗时的sql语句占用连接,观察其他需要执行SQL的goroutine的执行情况。

例子代码如下:

package mainimport (        "database/sql"        "log"        _ "github.com/go-sql-driver/mysql")var DB *sql.DBvar dataBase = "root:Aa123456@tcp(127.0.0.1:3306)/?loc=Local&parseTime=true"func Init() {        var err error        DB, err = sql.Open("mysql", dataBase)        if err != nil {                log.Fatalln("open db fail:", err)        }        DB.SetMaxOpenConns(1)        err = DB.Ping()        if err != nil {                log.Fatalln("ping db fail:", err)        }}func main() {        Init()                //开启20个goroutine        for i:=0; i < 20; i++ {                go one_worker(i)        }                select {        }}func one_worker(i int) {        var connection_id int        err := DB.QueryRow("select CONNECTION_ID()").Scan(&connection_id)        if err != nil {                log.Println("query connection id failed:", err)                return        }        log.Println("worker:", i, ", connection id:", connection_id)        var result int        err = DB.QueryRow("select sleep(10)").Scan(&result)        if err != nil {                log.Println("query sleep connection id faild:", err)                return        }}

output

2019/10/02 18:14:25 worker: 2 , connection id: 55
2019/10/02 18:14:25 worker: 17 , connection id: 55
2019/10/02 18:14:25 worker: 11 , connection id: 55
2019/10/02 18:14:35 worker: 3 , connection id: 55
2019/10/02 18:14:45 worker: 0 , connection id: 55
2019/10/02 18:14:45 worker: 4 , connection id: 55
2019/10/02 18:14:45 worker: 5 , connection id: 55
2019/10/02 18:15:05 worker: 7 , connection id: 55
2019/10/02 18:15:25 worker: 15 , connection id: 55
2019/10/02 18:15:25 worker: 6 , connection id: 55
2019/10/02 18:15:35 worker: 13 , connection id: 55
2019/10/02 18:15:45 worker: 19 , connection id: 55
2019/10/02 18:15:45 worker: 10 , connection id: 55
2019/10/02 18:15:45 worker: 12 , connection id: 55
2019/10/02 18:15:55 worker: 14 , connection id: 55
2019/10/02 18:16:15 worker: 8 , connection id: 55
2019/10/02 18:16:35 worker: 18 , connection id: 55
2019/10/02 18:16:35 worker: 1 , connection id: 55
2019/10/02 18:17:05 worker: 16 , connection id: 55
2019/10/02 18:17:35 worker: 9 , connection id: 55

使用show processlist查看连接

mysql> show processlist;+----+------+-----------------+------+---------+------+------------+------------------+| Id | User | Host            | db   | Command | Time | State      | Info             |+----+------+-----------------+------+---------+------+------------+------------------+| 20 | root | localhost       | NULL | Query   |    0 | starting   | show processlist || 55 | root | localhost:59518 | NULL | Query   |    5 | User sleep | select sleep(10) |+----+------+-----------------+------+---------+------+------------+------------------+2 rows in set (0.00 sec)

使用netstat 查看连接

netstat -an | grep 3306tcp4       0      0  127.0.0.1.3306         127.0.0.1.59518        ESTABLISHEDtcp4       0      0  127.0.0.1.59518        127.0.0.1.3306         ESTABLISHEDtcp46      0      0  *.3306                 *.*                    LISTEN

从结果可以看到,20个goroutine轮流使用同一个连接(connection id 为55)执行sql语句。

当连接被占用时,其他尝试使用连接的goroutine会被阻塞。直到连接使用完后,其他goroutine才可以使用连接。

即使多个goroutine在执行SQL,也没有创建多个连接。

因此,最大连接数设置生效。

有些读者可能会问,没有看到设置最大空闲连接数,此时最大空间连接数是多少?

前面已经提到,默认的最大空闲连接数是2.

下面再来测试下最大空间连接数。

2.最大空闲连接数测试

下面例子中,设置最大连接数为1,最大空闲连接数为0.

并且每隔3s执行一条SQL语句。

代码如下:

package mainimport (        "database/sql"        "log"        "time"        _ "github.com/go-sql-driver/mysql")var DB *sql.DBvar dataBase = "root:Aa123456@tcp(127.0.0.1:3306)/?loc=Local&parseTime=true"func mysqlInit() {        var err error        DB, err = sql.Open("mysql", dataBase)        if err != nil {                log.Fatalln("open db fail:", err)        }        DB.SetMaxOpenConns(1)        DB.SetMaxIdleConns(0)        err = DB.Ping()        if err != nil {                log.Fatalln("ping db fail:", err)        }}func main() {        mysqlInit()        for {                execSql()                time.Sleep(3*time.Second)        }}func execSql() {        var connection_id int        err := DB.QueryRow("select CONNECTION_ID()").Scan(&connection_id)        if err != nil {                log.Println("query connection id failed:", err)                return        }        log.Println("connection id:", connection_id)}

output:

2019/10/13 23:06:00 connection id: 26
2019/10/13 23:06:03 connection id: 27
2019/10/13 23:06:06 connection id: 28
2019/10/13 23:06:09 connection id: 29
2019/10/13 23:06:12 connection id: 30
2019/10/13 23:06:15 connection id: 31
2019/10/13 23:06:18 connection id: 32
2019/10/13 23:06:21 connection id: 33
2019/10/13 23:06:24 connection id: 34
2019/10/13 23:06:27 connection id: 35
2019/10/13 23:06:30 connection id: 36
2019/10/13 23:06:33 connection id: 37
2019/10/13 23:06:36 connection id: 38

从结果中可以看出,每次执行SQL使用的连接connection id都不同。

设置最大空闲连接数为0,每次执行SQL后,连接不会放入空闲连接池,而是会被关闭,下次执行SQL时,会重新建立新的连接。

读到这里,这篇“golang结合mysql怎么设置最大连接数和最大空闲连接数”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: golang结合mysql怎么设置最大连接数和最大空闲连接数

本文链接: https://www.lsjlt.com/news/323003.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • golang结合mysql设置最大连接数和最大空闲连接数
    目录1.最大连接数测试2.最大空闲连接数测试3.参考本文介绍golang 中连接MySQL时,如何设置最大连接数和最大空闲连接数。 关于最大连接数和最大空闲连接数,是定义在golan...
    99+
    2022-11-13
  • golang结合mysql怎么设置最大连接数和最大空闲连接数
    本文小编为大家详细介绍“golang结合mysql怎么设置最大连接数和最大空闲连接数”,内容详细,步骤清晰,细节处理妥当,希望这篇“golang结合mysql怎么设置最大连接数和最大空闲连接数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-06-29
  • mysql最大连接数设置
    问题描述:很多时候都会遇见”MySQL: ERROR 1040: Too many connections”的异常情况问题分析:造成这种情况的一种原因是访问量过高,MySQL服务器抗不住,这个时候就要考虑增...
    99+
    2022-10-18
  • mysql怎么设置最大连接数
    这篇文章主要介绍“mysql怎么设置最大连接数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql怎么设置最大连接数”文章能帮助大家解决问题。方法一:命令行修改...
    99+
    2022-10-19
  • MySQL 查看最大连接数和修改最大连接数
    1、查看最大连接数 mysql> show variables like "%max_connections%"; ±----------------±------+ | Va...
    99+
    2022-10-18
  • 怎么在mysql中设置最大连接数
    本篇文章为大家展示了怎么在mysql中设置最大连接数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。方法一:命令行修改我们只需要打开mysql的控制台,输入“set ...
    99+
    2022-10-18
  • mysql怎么设置最大连接数详解
    目录前言方法一:命令行修改方法二:通过mysql配置文件来修改最大连接数总结前言 设置mysql最大连接数的方法:首先打开mysql的控制台;然后输入语句【set GLOBAL ma...
    99+
    2022-11-13
  • mysql如何设置最大连接数
    mysql如何设置最大连接数?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!通常,mysql的最大连接数默认是100, 最大...
    99+
    2022-10-18
  • mysql8最大连接数设置
    1、查询当前最大连接数设置: show variables like '%max_connections%'; 以上是默认最大连接数。 2、设置最大连接数: set global max...
    99+
    2023-09-04
    mysql 数据库 Powered by 金山文档
  • mysql中如何设置最大连接数
    这篇文章给大家介绍mysql中如何设置最大连接数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。设置mysql最大连接数的方法 MYSQL数据库安装完成后,默认最大连接数是10...
    99+
    2022-10-18
  • Mysql查看最大连接数和修改最大连接数的讲解
    MySQL查看最大连接数和修改最大连接数 1、查看最大连接数 show variables like '%max_connections%'; ...
    99+
    2022-10-18
  • mysql8最大连接数设置多少合适
    如何解决MySQL超过最大连接数问题 同一时间最多100个链接。能同时在线多少人不好说,因为这要看你的程序了。最大链接100一般够用了,不像WEB服务器的最大链接。max_user_connections 是 MySQL 用户连接数的...
    99+
    2023-09-06
    mysql 数据库 服务器 php 运维
  • 怎么加大MySql的最大连接数
    这篇文章主要介绍“怎么加大MySql的最大连接数”,在日常操作中,相信很多人在怎么加大MySql的最大连接数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么加大MySql的...
    99+
    2022-10-18
  • mysql如何设置最大连接数详解
    这篇文章将为大家详细讲解有关mysql如何设置最大连接数详解,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。设置mysql最大连接数的方法:方法一:命令行修改我们只需要打开mysql的控制台,输入“set ...
    99+
    2023-06-29
  • SQL Server中怎么设置最大连接数
    这期内容当中小编将会给大家带来有关SQL Server中怎么设置最大连接数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、设置最大连接数下面的T-SQL 语句可以配置S...
    99+
    2022-10-18
  • 怎么添加mysql连接池的最大连接数
    添加mysql连接池的最大连接数的设置方法:在MYSQL安装目录,找到配置文件 my.ini或my.cnf,打开配置文件,查找max_connections=100 修改为 max_connections=1000,保存,重启MYSQL服务...
    99+
    2022-10-18
  • mysql怎么实现最大连接数
    这篇文章将为大家详细讲解有关mysql怎么实现最大连接数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。数据库连接数突然增大是什么原因?可能是数据库性能突然变慢,连接的客户要很久才能得到响应,客户以为是自己...
    99+
    2023-06-22
  • mysql最大连接数是什么
    MySQL最大连接数是指MySQL数据库服务器能够同时接受的最大客户端连接数,由配置文件中的max_connections参数定义,达到最大连接数,新的连接请求将被拒绝或进入等待状态,直到有现有连接被释放,在设置最大连接数时,结合实际需求和...
    99+
    2023-07-25
  • 查看mysql最大连接数量和当前连接数
    MySQL报错Can not connect to MySQL server. Too many connections,报错,很明确,与MySQL的连接数满了。 首先我们先查看下数据线程池的一些数据 查看最大连接数 mysqladmin ...
    99+
    2023-08-30
    mysql docker 数据库
  • MYSQL中怎么调整最大连接数
    本篇文章为大家展示了MYSQL中怎么调整最大连接数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  如何加大MYSQL中的最大连接数  1.修改safe_mysql...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作