如何让golang mysql驱动程序在2秒内超时ping
使用
1 | package db_conn_pool |
当数据访问不通时(存在防火墙), Test_PingContext 可以在特定1s超时自动返回错误,但是Test_Ping会等待很久没有返回才超时
1 | go test -v db_pool_test.go |
配置 sql.DB 获得更好的性能
1 | package db_conn_pool |
SetMaxOpenConns 方法
默认情况下,可以同时打开的连接数没有限制。但您可以通过setMaxOpenConns()方法实现自己的限制
go test -test.bench=”BenchmarkMaxOpenConns*” -benchmem sql_test.go
1 | goos: darwin |
如上基准测试,在设置最大开放连接为1、2、5、10和无限制,插入花费的时间越来越少
SetMaxIdleConns 方法
默认情况下,sql.DB允许在连接池中最多保留2个空闲连接。您可以通过SetMaxIdleConns()方法进行更改,理论上,在池中允许更多的空闲连接将提高性能,因为这样可以减少从头开始建立新连接的可能性,从而有助于节省资源。
go test -test.bench=”BenchmarkMaxIdleConns*” -benchmem sql_test.go
1 | goos: darwin |
让我们来看看相同的基准,最大空闲连接设置为无、1、2、5和10(并且开放连接的数量是无限的)
go test -test.bench=”BenchmarkConnMaxLifetime*” -benchmem sql_test.go
1 | goos: darwin |
问题
连接池什么时候销毁IdleConns
比如说maxConns是10,maxIdleConns是5,一次10个并发请求出现,连接池一次性建立了10个请求,当查询