第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Azure SQL 數(shù)據(jù)庫防止/處理 ErrBadConn

如何使用 Azure SQL 數(shù)據(jù)庫防止/處理 ErrBadConn

Go
富國滬深 2021-12-20 15:14:00
我正在使用這個驅(qū)動程序:https : //github.com/denisenkom/go-mssqldb并且在使用 Azure SQL 數(shù)據(jù)庫標(biāo)準(zhǔn) S3 級別的生產(chǎn)中,我們得到了太多 ErrBadconn -driver: Bad connection返回。我怎樣才能防止或至少優(yōu)雅地處理它。這里有一些代碼來展示事情是如何設(shè)置的。一個典型的數(shù)據(jù)庫函數(shù)調(diào)用包 dalvar db *sql.DBtype Database struct{}func (d Database) Open() {    newDB, err := sql.Open("mssql", os.Getenv("dbconnestion"))    if err != nil {        panic(err)    }    err = newDB.Ping()    if err != nil {        panic(err)    }    db = newDB}func (d Database) Close() {    db.Close()}// ... in another filefunc (e *Entities) Add(entity Entity) (int64, error) {    stmt, err := db.Prepare("INSERT INTO Entities VALUES(?, ?)")    if err != nil {        return -1, err    }    defer stmt.Close()    result, err := stmt.Exec(entity.Field1, entity.Field2)    if err != nil {        return -1, err    }    return result.LastInsertId()}簡而言之,該dal包在多個 Azure Web 應(yīng)用程序和命令行 Go 應(yīng)用程序之間共享。我看不到一種模式,即那些頻繁且隨機發(fā)生的錯誤。我們正在使用 Bugsnag 來記錄我們所有應(yīng)用程序的錯誤。為了完成,有時會達到我們的標(biāo)準(zhǔn) S3 限制 200 個并發(fā)連接。我在訪問數(shù)據(jù)庫的包上的所有地方都進行了三重檢查,確保所有內(nèi)容sql.Rows都已關(guān)閉,所有db.Prepare語句都已關(guān)閉。作為示例,典型的查詢函數(shù)如下所示:該readEntity基本上只做Scan上的字段。我認(rèn)為這與代碼無關(guān),單元測試在本地運行良好。有時在運行后僅部署到 Azure 一次,驅(qū)動程序:錯誤連接開始非常頻繁地出現(xiàn)。我已運行此查詢以嘗試查看此問題中的建議:Azure SQL server max pool size was connected 錯誤select * from sys.dm_exeC_requests但我不確定在這里我應(yīng)該注意什么。我做過/確定過的事情。正如建議的那樣,database/sql應(yīng)該處理連接池,因此為數(shù)據(jù)庫連接設(shè)置一個全局變量應(yīng)該沒問題。確保sql.Rows和db.Prepare聲明在任何地方都是關(guān)閉的。將 Azure SQL 級別提高到 S3。我正在使用的 sql 驅(qū)動程序存在問題,如果它們空閑超過 2 分鐘,則 Azure SQL 使數(shù)據(jù)庫連接處于錯誤狀態(tài)。 https://github.com/denisenkom/go-mssqldb/issues/81database/sql處理連接池的方式是否與 Azure SQL 數(shù)據(jù)庫的管理方式不兼容。有沒有辦法優(yōu)雅地處理這個問題?我知道 C#/Entity Framework 有一個針對 Azure SQL 的連接彈性/重試邏輯,是不是出于類似的原因?我如何實現(xiàn)這一點而不必在我的錯誤處理中到處傳遞?我的意思是我不想清楚地做這樣的事情:if err == sql.ErrBadConn {  // close and re-open the global db object  // retry}這當(dāng)然不是我唯一的選擇嗎?任何幫助將非常受歡迎。謝謝
查看完整描述

2 回答

?
蕭十郎

TA貢獻1815條經(jīng)驗 獲得超13個贊

巖,

您多久遇到這些連接問題?我建議您構(gòu)建重試邏輯,以便從錯誤的連接中優(yōu)雅地失敗。以下是使用 C# 的方法:https : //azure.microsoft.com/en-us/documentation/articles/sql-database-develop-csharp-retry-windows/

如果您仍然覺得需要幫助,請隨時通過 meetb@microsoft.com 向我發(fā)送包含您的服務(wù)器名稱和數(shù)據(jù)庫名稱的電子郵件,我們將讓我們的團隊調(diào)查此問題。

干杯,見面


查看完整回答
反對 回復(fù) 2021-12-20
?
滄海一幻覺

TA貢獻1824條經(jīng)驗 獲得超5個贊

我沒有看到您關(guān)閉數(shù)據(jù)庫的任何地方。最佳實踐(在其他語言中 - 對 Go 不利)是在使用后關(guān)閉/解除分配/取消引用數(shù)據(jù)庫對象,將連接釋放回池中。如果你的連接資源用完了,你會被告知你需要釋放一些東西。保持引用打開意味著沒有其他人可以使用該連接,因此它會一直存在,直到它因為超時而被回收。這就是為什么您會間歇性地而不是始終如一地獲得它 - 這取決于在特定時間段內(nèi)發(fā)生一定數(shù)量的連接。


查看完整回答
反對 回復(fù) 2021-12-20
  • 2 回答
  • 0 關(guān)注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號