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不关闭,这条连接不会被放回池里,其他并发获取不到连接会被阻塞住。