簡體   English   中英

SQL CONNECTION最佳實踐

[英]SQL CONNECTION best Practices

目前討論了具有單個sql連接體系結構的優缺點。

詳細說明我們正在討論的是,在應用程序創建時打開一個sql連接,並在應用程序關閉或錯誤關閉sql連接。 並且根本不創建另一個連接,而只使用那個連接與DB進行通信。

我們想知道社區的想法。

一旦您不再需要它在一段不確定的時間內關閉連接。 通過這樣做,連接返回到連接池(如果啟用了連接池),並且可以由其他人(重新)使用。

(連接是昂貴的資源,有時是有限的)。

如果您在應用程序的整個生命周期中保持連接,並且該應用程序有多個用戶(因此應用程序的多個實例和多個連接),並且您的數據庫服務器僅限於x個並發數連接,然后你可能有問題....

另請參閱ado.net的最佳做法

遵循這個簡單的規則......盡可能晚地打開連接並盡快關閉它。

我認為這是一個壞主意,原因有幾個。

  1. 如果您有10,000名用戶正在使用您的應用程序,則會持續打開10,000個連接
  2. 如果必須重新啟動Sql Server,那么所有這10,000個連接都將失效,並且您的應用程序將突然 - 假設您已包含重新連接邏輯 - 正在進行10000次近同步重新連接請求。

要在第1點進行擴展,您應該盡快關閉連接,否則您將耗盡有限的資源,可能是一段無限的時間。 如果您將Sql Server配置為允許最多10,001個並發連接,那么您一次只能有10,001個用戶運行您的應用程序。 如果您按需打開/關閉連接,那么您的應用程序將進一步擴展 ,因為所有活躍用戶同時使用數據庫的可能性實際上很低。

在幕后,ADO.NET使用連接池來管理與數據庫的連接。 我建議將其留在連接池中以滿足您的連接需求。 在應用程序期間保持連接打開是個壞主意。

我使用名為Richmond Systems的幫助台系統,該系統在應用程序的生命周期中使用一個連接,而作為筆記本電腦用戶,它在后面是一個皇家的痛苦。 即使我打開筆記本電腦,無線接入點之間的跳躍也足以降低數據庫的連接。 然后該軟件抱怨數據庫連接,進入錯誤狀態並且不會關閉。 必須從任務管理器手動殺死它。

簡而言之, 請勿保持打開數據庫連接的時間長於必要時間。

但另一方面,我經常對打開和關閉連接持謹慎態度。 連接池比沒有連接池便宜得多,但即使使用池,池管理器也可能決定增加或縮小池,將其轉換為昂貴的操作。

我的一般規則是在用戶啟動某個操作,執行工作,然后在等待下一個用戶輸入之前關閉連接時打開連接。 對於任何給定的“更新”按鈕單擊或其他,我通常只有一個連接。 但是你絕對不希望在等待用戶輸入時保持連接打開,如果你可以為其他人提到的所有原因提供幫助。 您可以在用戶按下另一個鍵或觸摸另一個按鈕之前等待幾天 - 如果他離開計算機並去休假怎么辦? 將資源占用不可預測的時間就像是壞消息。 在大多數情況下,等待用戶輸入的經過時間將遠遠超過實際工作的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM