2011-01-25 72 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