当前位置: 首页 > news >正文

石柱县建设局网站南宁百度首页优化

石柱县建设局网站,南宁百度首页优化,家政服务公司网站建设方案策划书,安阳县吕村七中录取分数线目录测试1go 1.15.15go 1.17.12测试2go 1.15.15go 1.17.12参考在使用golang 连接 mysql时,为了节省连接资源,在连接使用过后,希望在指定长度时间不再使用后,自动关闭连接。 这时,经常会使用SetConnMaxLifetime()&#…

目录

  • 测试1
    • go 1.15.15
    • go 1.17.12
  • 测试2
    • go 1.15.15
    • go 1.17.12
  • 参考

在使用golang 连接 mysql时,为了节省连接资源,在连接使用过后,希望在指定长度时间不再使用后,自动关闭连接。
这时,经常会使用SetConnMaxLifetime(),设置最大连接有效时间,
使用SetConnMaxIdleTime(),设置最大空闲连接时间 max idle time。

这两个函数的作用听起来差不多,理论上,都能达到相同效果。
但是在实际使用中,却有些出人意料。

首先看下测试代码,在以下代码中,
设置 max idle time 为传入的参数值,
设置 max life time 为传入的参数值,
设置 max open conn 为1,
设置 max idle conn 为1

package mainimport ("database/sql""log""fmt""os""strconv""time"_ "github.com/go-sql-driver/mysql"
)var dataBase = "root:xxxx@tcp(127.0.0.1:3306)/mysql?timeout=2s&readTimeout=6s&interpolateParams=true"func getVar(name string) int {val := os.Getenv(name)if len(val) == 0 {panic(fmt.Sprintf("error getting: %v", name))}v, err := strconv.Atoi(val)if err != nil {panic(fmt.Sprintf("error parsing %v %v", name, err))}return v
}func main() {db, err :=sql.Open("mysql", dataBase)  // connect to the db of your choice.if err != nil {panic(err)}defer db.Close()db.SetConnMaxIdleTime(time.Second * time.Duration(getVar("MAXIDLE")))db.SetConnMaxLifetime(time.Second * time.Duration(getVar("MAXLIFE")))db.SetMaxIdleConns(1)db.SetMaxOpenConns(1)sleep := time.Second*time.Duration(getVar("SLEEP"))for i := 0; i < 10; i++ {err = db.Ping()if err != nil {log.Fatalln("ping db fail:", err)}time.Sleep(sleep)print("\r", i)}fmt.Printf("\n%+v\n", db.Stats())
}

测试1

MAXIDLE=1 MAXLIFE=0 SLEEP=5 go run .

设置 max idle time 为1s,设置max life time为0s,也就是永不过期,相当于不设置life time。
每次连接之后,sleep 5s。

预期结果,循环10次,每次都会打开一个新的连接,旧的连接由于idle time到期而自动关闭。

go 1.15.15

output

9
{MaxOpenConnections:1 OpenConnections:1 InUse:0 Idle:1 WaitCount:0 WaitDuration:0s MaxIdleClosed:0 MaxIdleTimeClosed:0 MaxLifetimeClosed:0}

实际结果,只新建了一个连接,一直在使用,没有关闭连接。
也就是说设置max idle time 并没有生效。

go 1.17.12

9
{MaxOpenConnections:1 OpenConnections:0 InUse:0 Idle:0 WaitCount:0 WaitDuration:0s MaxIdleClosed:0 MaxIdleTimeClosed:10 MaxLifetimeClosed:0}

实际结果与预期相符。

测试2

MAXIDLE=1 MAXLIFE=2 SLEEP=5 go run .

设置 max idle time 为1s,设置max life time为2s,也就是idle time先到期
每次连接之后,sleep 5s。

预期结果,循环10次,每次都会打开一个新的连接,旧的连接是由于idle time到期自动关闭。

go 1.15.15

output

9
{MaxOpenConnections:1 OpenConnections:0 InUse:0 Idle:0 WaitCount:0 WaitDuration:0s MaxIdleClosed:0 MaxIdleTimeClosed:10 MaxLifetimeClosed:0}

实际结果与预期相符。

go 1.17.12

output

9
{MaxOpenConnections:1 OpenConnections:0 InUse:0 Idle:0 WaitCount:0 WaitDuration:0s MaxIdleClosed:0 MaxIdleTimeClosed:10 MaxLifetimeClosed:0}

实际结果与预期相符。

总结下,汇总以上测试结果如下表所示:

go版本是否 max idle time是否max life time空闲连接回收是否生效
go 1.15.15YNN
go 1.15.15YYY
go 1.17.12YNY
go 1.17.12YYY

在 go 1.15.15版本 或者其他相近版本中,只设置max idle time,不能自动回收空闲连接。

具体原因,可以参见 issue,或者具体查看go 源码,这应该是一个bug。

参考

database/sql: SetConnMaxIdleTime without SetConnMaxLifetime has no effect #41114

golang mysql 如何设置最大连接数和最大空闲连接数

http://www.fp688.cn/news/146270.html

相关文章:

  • 南京怎么做网站站长工具seo诊断
  • 东莞专业网站建设推广整站优化工具
  • 公司网站制作视频新网域名
  • 电子商务专升本需要考些什么科目seo外包公司多吗
  • 服务器硬件影响网站速度电脑培训班一般多少钱
  • 万网网站备案信息真实性核验单下载2022最新免费的推广引流软件
  • 手机网站 推广百度seo报价
  • 官网指的是什么网站引流推广广告怎么写
  • 做网站步骤seo视频教程
  • 增城企业网站建设张家界百度seo
  • 阿里国际站韩语网站怎么做百度一下官网页
  • 网页制作怎么做多个网站长春百度网站优化
  • 网站设计的工具推广官网
  • 华为云自助建站靠谱吗网络营销推广渠道
  • 云南火电建设有限公司网站磁力天堂torrentkitty
  • PHP 网站开发 重点知识seo门户 site
  • 餐饮网站开发背景广州头条今日头条新闻
  • 石家庄制作网站软件爱站网排名
  • 做防伪的网站苏州seo推广
  • 如何创建问卷网站百度关键词首页排名
  • 网站后台账户如何做会计分录seo搜索引擎优化兴盛优选
  • 哪些网站可以做平面设计谷歌推广费用多少
  • 市场监督管理局是什么单位关键词优化举例
  • 做视频网站怎么备案聊城网站seo
  • 找做网站公司需要注意什么谷歌seo推广服务
  • php动态网站开发建立user表百度热搜榜单
  • 潍坊知名网站建设价格企业网站的网络营销功能
  • 网站开发实训意义鲜花网络营销推广方案
  • 力杨网站建设郑州外语网站建站优化
  • 佛山做网站建设价格外贸推广是做什么的