2012-03-06 63 views
0

我有两个应用程序使用相同的2个数据库。 1应用程序运行良好,没有性能问题。当我运行下面的查询时,我得到每个数据库1个连接。他们保持开放一段时间。所以当我浏览它似乎这两个连接被重用。过了一会他们关门了。数据库连接正在关闭导致性能降低:MS SQL SERVER

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

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

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 
+0

在dba.stackexchange.com上,您可能会获得有关此类问题的更多帮助。另外,你可以发布两个连接字符串吗? – RThomas 2012-03-06 19:48:27

回答

0

@ User1253073 - >从最佳实践的角度,你应该打开和所需只有当应用程序密切的联系。例如:a)打开连接,执行查询并在断开连接时将结果加载到DataSet中b)关闭连接并执行操作DataSet结果的任务。 c)继续代码。这种方法可以毫无理由地减少活动连接到数据库的数量,并提高应用程序的性能。

+0

是的,我知道。问题出在应用程序池上,我创建了一个新的应用程序池并对其进行了修复。不知道是什么问题。 – user1253073 2012-06-12 07:00:21

0

是的,我知道。问题出在应用程序池上,我创建了一个新的应用程序池并对其进行了修复。不知道是什么问题。 - user1253073刚才编辑

0

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

通常在池中打开的连接数最多为200个。每周,在大约一个小时内,池中的连接在每个命令后立即关闭,并在需要执行一些新命令时重新打开。它显着降低了服务速度。

我试图改变池的最小和最大尺寸,它不会改变任何东西。这个问题不容易重现:它每周只发生一次。目前,我们没有找到任何方法来确定谁决定关闭连接:.NET池或SQL服务器。