golang連線MySQL時候的連線池設定

lff1530983327發表於2022-11-11

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不關閉,這條連線不會被放回池裡,其他併發獲取不到連線會被阻塞住。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30018455/viewspace-2922967/,如需轉載,請註明出處,否則將追究法律責任。

相關文章