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

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

我們需要在關(guān)閉應(yīng)用程序之前關(guān)閉數(shù)據(jù)庫連接嗎?

我們需要在關(guān)閉應(yīng)用程序之前關(guān)閉數(shù)據(jù)庫連接嗎?

Go
幕布斯7119047 2021-11-29 15:35:32
在 Go 中,使用 SQL 數(shù)據(jù)庫時,是否需要db.Close在關(guān)閉應(yīng)用程序之前關(guān)閉DB ( )?DB 會自動檢測到連接已經(jīng)死了嗎?
查看完整描述

3 回答

?
尚方寶劍之說

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

DB 將盡最大努力進行檢測,但如果沒有運氣,它可能無法檢測到。最好盡快發(fā)布獲得的東西。

send() 系統(tǒng)調(diào)用將等待 TCP 連接發(fā)送數(shù)據(jù),但客戶端不會收到任何內(nèi)容。

  1. 沒有正確釋放資源,發(fā)生斷電、網(wǎng)絡(luò)問題或裸退出。TCP keepalive 機制將啟動并嘗試檢測連接已死。

  2. 客戶端暫停,沒有收到任何數(shù)據(jù),在這種情況下send()會阻塞。

因此,它可能會阻止

  1. 正常關(guān)閉集群。

  2. 如果將排他鎖作為事務(wù)的一部分(例如auto vacuum在 postgresql 中),則推進事件視界。

可以縮短服務(wù)器 keepalive 配置以更早地檢測到它。(例如,~2h 12m根據(jù)工作負載,postgresql 中的默認值會很長)。

最大打開連接數(shù)可能有硬性限制,直到檢測到,一些連接將成為僵尸(在那里,無法使用但會降低限制)。


查看完整回答
反對 回復(fù) 2021-11-29
?
白豬掌柜的

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

數(shù)據(jù)庫會注意到連接已經(jīng)死亡并采取適當(dāng)?shù)拇胧豪?,該連接上所有未提交的活動事務(wù)將被回滾,用戶會話將被終止。

但是請注意,從數(shù)據(jù)庫引擎的角度來看,這是一個“恢復(fù)”場景:它不能在客戶端斷開連接時就拋出;它必須采取明確的行動來保持一致的狀態(tài)。

另一方面,當(dāng)程序以“正常方式”(即,不是因為恐慌或log.Fatal())關(guān)閉時關(guān)閉屬性真的沒有那么難。由于sql.DB實例通常是一個程序范圍的全局變量,它甚至更簡單:只需main()像馬特建議的那樣嘗試關(guān)閉它。


查看完整回答
反對 回復(fù) 2021-11-29
?
MM們

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

如果您在任何函數(shù)中初始化連接,通常最好推遲調(diào)用以立即關(guān)閉,即

conn := sql.Connect() // for example
defer conn.Close()

一旦封閉函數(shù)退出,這將關(guān)閉連接。

這在main函數(shù)中使用時很方便,因為一旦程序退出,Close()就會調(diào)用。


查看完整回答
反對 回復(fù) 2021-11-29
  • 3 回答
  • 0 關(guān)注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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