为什么我的ADO.net连接已关闭,但sp_who2表示“等待命令”连接?

时间:2009-08-17 13:37:43

标签: c# sql-server-2000

我们在数据库中遇到严重的性能问题。在对程序进行了大量更改之后,尝试最小化锁定,我们仍然存在一些性能问题。

当我在数据库中创建sp_who2时,在休眠模式下有几个连接,“正在等待命令”。

如果我在关闭这些连接后自动关闭这些连接,我们可能会对服务器性能产生积极影响。

我的问题是:当我调用关闭时,如何在ADO.NET中建立连接池,而不是将它们保持在休眠模式?

PS:我知道处理性能是一个很大的主题,我们正在分析的不仅仅是这个。

3 个答案:

答案 0 :(得分:2)

连接池的目的是保持连接打开,以便在需要新连接时就可以了。这样做的原因是打开连接是一项代价高昂的业务。保持睡眠连接通常不会花费太多。

如果要完全关闭连接,请关闭连接池。

答案 1 :(得分:1)

您可以禁用连接池,但这不会提高性能。

连接池在连接上挂起,因此应用程序不必每次都创建新连接。重新使用连接要比打开新连接快得多。

因此,睡眠连接表明连接池有效,你不应该试图摆脱它。

答案 2 :(得分:1)

嗯,有一个潜在的问题,你可能会有太多的连接池!

连接池将基于完全连接字符串 - 如果两个连接字符串仅由空格不同,则它们将被视为不同,并且将为每个连接池创建一个连接池。因此,请确保所有连接字符串完全相同。

此外,每个Windows标识将创建一个连接池 - 因此,如果您使用

server=myServer;Database=MyDatabase;integrated security=SSPI

然后,对于将要连接的每个单独的Windows用户,正在创建连接池。

请参阅相关的MSDN documentation(顶部的第四段):

  

连接分为多个池   通过连接字符串和Windows   集成安全性时的身份   使用

因此,在负载较重的生产环境中,使用单个“应用程序用户”并且只有一个连接池可能更好:

server=myServer;Database=MyDatabase;user id=MyAppUser;pwd=MyAppUserPwd

如果确保所有客户端计算机都使用完全相同的连接字符串,则只会创建一个连接池。

马克