我目前正在ASP.net 2.0应用程序上进行一些GUI测试。 RDBMS是SQL Server 2005.主机是Win Server 2003 / IIS 6.0。

我没有该应用程序的源代码,因为它是由一个没有发布代码的外部公司编写的。

我注意到当我重新启动IIS时应用程序运行良好但经过一些测试后,在我打开并关闭浏览器几个小时之后,应用程序开始变得越来越慢。我想知道这种行为是否是由于程序员关闭连接错误造成的:我怀疑这里数据库是否存在打开的连接泄漏。

我想.Net垃圾收集器最终会关闭它们但是......这可能需要一段时间,不是吗?

我有SQL Server Management Studio,我从活动监视器中注意到数据库上打开了很多连接。

从上述所有内容来看,这里有一些与主要问题相关的问题:

  1. 有没有办法在SQL中知道 Server 2005如果连接是 打开,因为他们正在等待 用于连接池或if 他们是开放的,因为他们被一个人使用 应用

  2. somone是否知道好 我可以在线/纸张资源 学习如何使用性能 计数器或其他一些工具 帮助追踪这类 问题

  3. 如果性能指标是最好的 解决方案,我有哪些变数 应该看吗?

有帮助吗?

解决方案

您始终可以检查来自web.config的连接字符串(主要是如果它们已激活连接池,则启用了连接限制)。

此外,如果您使用的是IIS 6,则可以将Web应用程序设置为使用单独的应用程序池,并设置其他选项以回收内存和进程。

关于性能计数器,您可以检查垃圾收集器运行的时间, 应用程序使用了多少内存等等。

如果您有权访问sql server,则可以监视从应用程序建立的连接(为每个已安装的SQL Server实例定义了性能计数器)。

MSDN Magazine 中有一些文章。您还可以使用SOS调试库附加到应用程序的进程并手动检查它。

并且,如果您没有源代码,请尝试使用 Reflector 获取应用程序的源代码(它们对于调试非常有用)

@Later编辑:您也可以在stackoverflow.com上查看此问题

其他提示

发现这个线程正在研究类似的问题。我想出了以下SQL作为调试SQL Server中漏洞连接的好方法:

SELECT S.spid, login_time, last_batch, status, hostname, program_name, cmd,
(
      select text from sys.dm_exec_sql_text(S.sql_handle)
) as last_sql
FROM sys.sysprocesses S
where dbid > 0
and DB_NAME(dbid) = '<my_database_name>'
and loginname = '<my_application_login>'
order by last_batch asc

这给你的是特定数据库和登录的所有开放连接,以及在该连接上执行的最后一个sql ,按执行sql的时间排序。

由于连接池,你可以依靠这样一个事实:有很多连接闲置告诉你你有连接泄漏,因为连接池即使关闭也会保持连接正确地从代码。但是,如果你确实有连接泄漏,你会看到一些连接变得“冻结”,并且它们将出现在上面的查询中并且&#8220; last_batch&#8221;时间戳永远不会改变。其他连接也会挂起,但每次在它们上面运行新的sql时,&#8220; last_batch&#8221;时间戳得到更新。因此效果是冻结的连接将浮动到此查询的顶部。

如果您有相关应用程序的源代码,那么这将为您提供在孤立连接上执行的最后一个sql,这对于调试非常有价值。

我遇到了这个问题,发现SQL Server Profiler是一个很棒的工具,我在一个简短的测试运行中监控了网站,发现有很多连接被创建(sp_who),连接池没有重用,所以我只是打开了SQL然后检查Server Profiler,然后检查是否所有对代码的SP调用都跟着“sp_reset_connection”。呼叫。如果在新批次开始之前没有呼叫,那么您只是缺少第一个连接。

MSDN参考( ADO.NET性能计数器)非常清楚在分析应用程序时可以查找的内容。您可以使用“perfmon”应用程序。

除此之外,我建议学习ADO.NET连接池。如果你真的怀疑他们的代码中有错误,可以使用红门反射器来查看它。 (现在免费)将MSIL分解为C#。

我首先查看连接并查看活动时间,然后查看是否可以找到保持连接打开的项目。

我想如果解决方案是重新启动IIS,您可能还会查看应用程序的内存使用情况,以查看是否存在内存泄漏或其他内容确实导致其占用空间增长。

如果打开连接是一个问题,在活动监视器中,您会看到非常多的连接没有活动。

对于性能计数器,您可能会开始查看“SQL Server:General Stats”和“SQL Server:General Stats”。表现对象。

Todd Denlinger写了一篇精彩的课程 http://www.codeproject.com/KB/数据库/ connectionmonitor.aspx ,它监视Sql Server连接并报告在一段时间内未正确处理的连接。将它连接到您的站点,它会在发生泄漏时通知您。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top