中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang :連接數據庫閑置斷線的問題

發布時間:2020-06-24 17:24:24 來源:網絡 閱讀:572 作者:xsster 欄目:數據庫
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.對于維護大量數據,可以嘗試采用事務操作,若失敗,回滾。然后重試。
    3.使用defer關鍵字,在啟用操作的時候直接在下一行加上defer *.close()函數return的時候會執行相關的關閉函數。
  如果你嘗試了以上的解決方案,還是發現偶爾會出現連接超時的錯誤的話,很可能是因為數據庫本身對連接有一個超時時間的設置,如果超時時間到了數據庫會單方面斷掉連接,此時再用連接池內的連接進行訪問就會出錯,連接池中的每個連接都維護了一個創建時間,取連接的時候會自動檢查的,你可以試試調用db的SetConnMaxLifetime()方法來給db設置一個超時時間,時間小于數據庫的超時時間即可。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

芒康县| 青冈县| 卓尼县| 淮滨县| 彭阳县| 冕宁县| 珠海市| 大田县| 阿拉善盟| 云和县| 调兵山市| 永善县| 蚌埠市| 安宁市| 平遥县| 景德镇市| 额尔古纳市| 吉首市| 灵山县| 渭南市| 华安县| 博客| 庆城县| 花莲市| 广灵县| 岳池县| 于田县| 年辖:市辖区| 洱源县| 鄯善县| 武山县| 周宁县| 鹤峰县| 东乡族自治县| 湛江市| 南木林县| 庆阳市| 金平| 霍林郭勒市| 西城区| 驻马店市|