1.使用连接池,执行完之后关闭连接
现象: 4个并发由4个连接执行,执行完后连接保持,空闲状态
2.使用连接池,不关闭连接
现象:4个并发由4个连接执行,执行完成后连接保持,空闲状态
3.不妨加大并发数,使其超过最大连接池大小,设置为并发20
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(5)
现象:20个并发任务由10个连接完成,最终剩余5个连接未关闭.
88-97 新的10个连接,留下90-96中的5个连接
4.如果不使用连接池呢?我们看看效果!
现象:新建20个连接执行20个并发,最后保留2个空闲连接。
2022-11-11 07:59:56.84143687 +0000 UTC m=+0.013800045 connection id: 2001 7
2022-11-11 07:59:56.841548211 +0000 UTC m=+0.013912205 connection id: 2003 18
2022-11-11 07:59:56.84155055 +0000 UTC m=+0.013914545 connection id: 2002 2
2022-11-11 07:59:56.841453126 +0000 UTC m=+0.013816301 connection id: 1999 9
2022-11-11 07:59:56.841608856 +0000 UTC m=+0.013972868 connection id: 2005 8
2022-11-11 07:59:56.841564022 +0000 UTC m=+0.013928956 connection id: 2009 0
2022-11-11 07:59:56.841490867 +0000 UTC m=+0.013854741 connection id: 2007 16
2022-11-11 07:59:56.841659811 +0000 UTC m=+0.014023699 connection id: 2016 11
2022-11-11 07:59:56.841674901 +0000 UTC m=+0.014038076 connection id: 2006 10
2022-11-11 07:59:56.841503316 +0000 UTC m=+0.013867190 connection id: 2013 14
2022-11-11 07:59:56.841512219 +0000 UTC m=+0.013876110 connection id: 2004 19
2022-11-11 07:59:56.841710169 +0000 UTC m=+0.014075717 connection id: 2011 15
2022-11-11 07:59:56.841725186 +0000 UTC m=+0.014089081 connection id: 2010 5
2022-11-11 07:59:56.841509787 +0000 UTC m=+0.013873426 connection id: 2000 12
2022-11-11 07:59:56.841747276 +0000 UTC m=+0.014112032 connection id: 2014 4
2022-11-11 07:59:56.841521025 +0000 UTC m=+0.013884927 connection id: 2008 6
2022-11-11 07:59:56.841897427 +0000 UTC m=+0.014261324 connection id: 2018 3
2022-11-11 07:59:56.841961983 +0000 UTC m=+0.014326127 connection id: 2017 13
2022-11-11 07:59:56.842021862 +0000 UTC m=+0.014385037 connection id: 2015 1
2022-11-11 07:59:56.842026321 +0000 UTC m=+0.014390232 connection id: 2012 17
5.最后我们看一下这个row.close()的作用吧!
不使用row.close() 现象同上。
应该是场景不对,如果连接池数量有限的话,那这个是否关闭大抵就有影响了。试一下!
// rows.Close()
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(5)
现象: 10个连接完成20个并发,最终剩余5个空闲连接。
所以: 这个rows.close() 到底有啥用?
6.这时候可以参考一下别人的理解看看呢!
其他连接不会重用这些连接吗? 我看到的好像是一个连接可以执行多遍哦!存疑🤨
当执行完sql,连接转移到rows对象上,如果rows不关闭,这条连接不会被放回池里,其他并发获取不到连接会被阻塞住。