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

C# 为什么我的ADO.net连接已关闭,但sp_who2表示;“等待命令”;连接?,c#,sql-server-2000,C#,Sql Server 2000,我们在数据库中面临着严重的性能问题。在对过程进行了大量更改,尝试最小化锁之后,我们仍然存在一些性能问题 当我在数据库中创建一个sp_who2时,有几个连接处于休眠模式,“等待命令” 如果我在关闭这些连接后自动关闭它们,可能会对服务器性能产生积极影响 我的问题是:当我调用close时,如何使ADO.NET中的连接池关闭我的连接,而不是将它们保持在睡眠模式? PS:我知道处理性能是一个很大的话题,我们分析的不仅仅是这个。您可以禁用连接池,但这不会提高性能 连接池挂起在连接上,因此应用程序不必每次都创

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

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

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

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


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

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

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


因此,休眠连接表示连接池正常工作,您不应该尝试将其删除。

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

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


因此,休眠连接表示连接池工作正常,您不应该试图将其删除。

连接池的目的是保持连接打开,以便在您需要新连接时,它就在那里。这样做的原因是,打开连接是一项成本高昂的业务。保持睡眠连接通常花费不多


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

连接池的作用是保持连接打开,以便在需要新连接时,连接池仍在。这样做的原因是,打开连接是一项成本高昂的业务。保持睡眠连接通常花费不多


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

好吧,一个潜在问题是连接池太多

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

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

server=myServer;Database=MyDatabase;integrated security=SSPI
然后,将为每个要连接的单独Windows用户创建一个连接池

请参见相关章节(顶部第四段):

连接被分离到池中 按连接字符串和按窗口 启用集成安全性时的标识 用过

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

server=myServer;Database=MyDatabase;user id=MyAppUser;pwd=MyAppUserPwd
如果确保所有客户端计算机都使用完全相同的连接字符串,则只会创建一个连接池


Marc

好吧,一个潜在的问题是连接池太多了

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

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

server=myServer;Database=MyDatabase;integrated security=SSPI
然后,将为每个要连接的单独Windows用户创建一个连接池

请参见相关章节(顶部第四段):

连接被分离到池中 按连接字符串和按窗口 启用集成安全性时的标识 用过

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

server=myServer;Database=MyDatabase;user id=MyAppUser;pwd=MyAppUserPwd
如果确保所有客户端计算机都使用完全相同的连接字符串,则只会创建一个连接池


Marc

但我有大约400个连接,很多都在等待命令。我的申请有很多超时。连接池不会使我的应用程序运行变慢吗?不会,未使用的连接使用的资源很少。大量创建的连接只是超时的一个缩影,而不是原因。但我有大约400个连接,很多都在等待命令。我的申请有很多超时。连接池不会使我的应用程序运行变慢吗?不会,未使用的连接使用的资源很少。大量创建的连接只是超时的一个症状,而不是原因。嗯,谢谢,我不知道,但这不是原因。对于整个应用程序,我只有一个连接字符串。注意:即使尝试设置Pooling=false,它也不起作用,Pooling仍在继续。嗯[2],这可能是个问题。我的应用程序中大约有20个连接池(事实上,存在应用程序实例,它们都具有相同的连接字符串,但位于IIS中的不同站点)。这会对数据库造成难以置信的危害吗?注意:IIS服务器不是100%的CPU,它实际上是好的。Sql server是100%Cpu。不,即使是20个池,如果没有充分使用,也不会造成危害。它们实际上是40到60个连接池。我并没有在perfmon中看到一种列出所有实例的方法。嗯,谢谢,我不知道,但这不是原因。对于整个应用程序,我只有一个连接字符串。注意:即使尝试设置Pooling=false,它也不起作用,Pooling仍在继续。嗯[2],这可能是个问题。我的应用程序中大约有20个连接池(I