数据库连接正在关闭导致性能降低:MS SQL SERVER

时间:2012-03-06 19:33:44

标签: sql sql-server-2008 connection-pooling

我有两个使用相同2个数据库的应用程序。 1个应用程序运行良好,没有性能问题。当我运行下面的查询时,每个数据库获得1个连接。他们保持开放一段时间。因此,当我浏览它时,似乎重用了这两个连接。过了一会儿他们就闭上了。

当我运行第二个应用程序时,连接打开并立即关闭。我注意到,当我运行下面的查询时,页面刷新时连接数的值会增加,并且一旦页面完成加载,连接数就会减少。

我将此添加到连接字符串:

   Max Pool Size=75;Min Pool Size=5;

但是现在连接数从0跳到5然后再跳回到0

这导致应用程序非常慢,因为某些页面中包含许多查询。

任何有关解决此问题的帮助都将不胜感激。

查询:

SELECT
   DB_NAME(dbid) as DBName, 
   COUNT(dbid) as NumberOfConnections,
   loginame as LoginName
  FROM
   sys.sysprocesses
 WHERE 
   dbid > 0
GROUP BY 
   dbid, loginame   

3 个答案:

答案 0 :(得分:0)

@ User1253073 - >从最佳实践角度来看,您应该仅在需要时打开和关闭两个应用程序的连接。类似于:a)打开连接,执行查询并在断开连接时将结果加载到DataSet中b)关闭连接并执行操作以操作DataSet结果。 c)继续编码。这种方法可以减少与数据库的活动连接数,而无需提高应用程序性能。

答案 1 :(得分:0)

是的,我知道。问题在于应用程序池,我创建了一个新的应用程序池并修复了它。不知道问题是什么。 - user1253073刚刚编辑

答案 2 :(得分:0)

我有同样的问题。我在用C#编写的.NET Windows服务中不断地对SQL Server 2008数据库进行一些密集更新:一分钟内大约有100k个查询。

通常,池中打开的连接数是最大值:200。每周,在大约一小时内,池中的连接会在每个命令后立即关闭,并在需要执行某些新命令时重新打开。它大大减慢了服务速度。

我尝试更改池的最小和最大尺寸,但它不会改变任何东西。问题不可能轻易复制:它只是每周发生一次。目前,我们还没有找到任何方法来确定谁决定关闭连接:.NET池或SQL服务器。