golang 連線資料庫閒置斷線的問題

2021-09-20 16:58:06 字數 949 閱讀 2546

golang在進行資料庫操作,一般來說我們使用open函式建立乙個資料庫(操作)控制代碼:func open(drivername, datasourcename string) (*db, error)

我們知道,返回的*db是乙個具有零到多個底層連線的連線池,可以安全的被多個go程使用,並且會維護自身的閒置連線。所以一般來說open函式我們只呼叫一次,幾乎很少需要關閉db。

連線池可以使得連線更好的控制,於是簡單配置甚至是不做什麼配置就可以用了,事實好像也是如此,連上資料庫就都ok了。但是!你很可能會遇到下面這樣的錯誤:

[mysql] 2017/01/15 12:23:43 packets.go:124: write tcp 127.0.0.1:45697->127.0.0.1:3306:write: broken pipe

1.最大連線數大於資料庫伺服器端配置的最大連線數,多餘的連線在被使用到的時候出現連線超時

2.網路抖動:每次連線的時候提交或維護大量資料,此時網路不穩定導致連線超時

3.占用的資源未被釋放,我們一般只open一次,獲取乙個*db,但是在使用stmt,rows或者是tx時候用完沒有關閉,耗盡資源也有可能導致連線超時。

對於出現的3中問題,你可以試試下面的解決方案:

1.對於最大連線數的問題,呼叫函式db.setmaxopenconns()設定值(小於資料庫配置的最大連線)

2.對於維護大量資料,可以嘗試採用事務操作,若失敗,回滾。然後重試。

如果你嘗試了以上的解決方案,還是發現偶爾會出現連線超時的錯誤的話,很可能是因為資料庫本身對連線有乙個超時時間的設定,如果超時時間到了資料庫會單方面斷掉連線,此時再用連線池內的連線進行訪問就會出錯,連線池中的每個連線都維護了乙個建立時間,取連線的時候會自動檢查的,你可以試試呼叫db的

setconnmaxlifetime()方法來給db設定乙個超時時間,時間小於資料庫的超時時間即可。

連線資料庫

2 documents 目錄就是我們可以用來寫入並儲存檔案得地方,一般可通過 nsarray paths nssearchpathfordirectoriesindomains nsdocumentdirectory,nsuserdomainmask,yes nsstring documentsdi...

連線資料庫

1 oracle8 8i 9i資料庫 thin模式 class.forname oracle.jdbc.driver.oracledriver newinstance string url jdbc oracle thin localhost 1521 orcl orcl為資料庫的sid strin...

連線資料庫

public void connection 以上是連線資料庫的乙個方法,以及從資料庫中取到資料後存放在table中.executenonquery 執行sql後,返回乙個整形變數,如果sql是對資料庫記錄進行操作,那麼返回影響的記錄條數。executescalar 執行sql 如果sql語句是se...