2011-01-25 37 views
0

我們有多個數據庫服務器。在其中一臺服務器上,我們有一個主配置表,其中包含有關代理應該使用哪個數據庫服務器和數據庫名稱的說明。獲取SQL連接碎片,連接到數據庫的不同方式

目前每個數據庫總是有2個連接,即使它們沒有被使用(我們正在修復)。但是,我們試圖找到一種方法來實現它,所以我們的連接並不是全部,並且減輕了我們的數據庫服務器上的一些壓力。

經過大量研究,我們發現一些文章說要做所有連接到中央位置,然後通過SQLConnection對象更改我們使用的數據庫。這似乎有點迂迴,但可以工作。

所以我想知道別人在這種情況下做什麼?

這種情況的電流路徑是:

- 用戶登錄 - 系統訪問ConfigTable找出哪些數據庫用戶將連接到。 - 系統將代理連接設置加載到該用戶的內存(SEssion)中。 - 每個請求現在直接命中該用戶數據庫。

有沒有更有效的方法來做到這一點?

回答

1

打開連接很晚,並提前關閉它們。

例如:

string result; 
using (var con = new SqlConnection(...)) 
{ 
    con.Open(); 
    var com = con.CreateCommand(); 
    com.CommandText = "select 'hello world'"; 
    result = com.ExecuteScalar(); 
} 

Windows操作系統將確保高效地集中和重複使用的連接。而且由於您只在需要時才使用連接,因此不存在閒置的連接。

編輯:Windows只緩存字面上相同的連接字符串,因此如果您在連接字符串中使用Initial Catalog=<dbname>,那麼可能會因爲需要一個服務器的500多個「連接池」而損害性能。

所以,如果你有4個服務器有很多的數據庫,確保你只使用4個連接字符串。

com.CommandText = "use <dbname>"; 
com.ExecuteNonQuery(); 

或查詢與像一個三部分名稱:連接,開關數據庫後

select * from <dbname>.dbo.YourTable 
+0

我們的應用程序是.NET 2.0,這是類似於我們目前使用的。這證明效率太低。 – 2011-01-25 23:37:57