2010-06-21 121 views
9

我想确定是否有数据库连接泄漏。 所以我需要看到打开连接的数量。 我有一个创建泄漏一些简单的测试代码:你如何测量打开的数据库连接数

protected void Page_Load(object sender, EventArgs e) 
{ 
    for(int i = 0; i < 100; i++) 
    { 
    SqlConnection sql = new SqlConnection(@"Data Source=.\SQLExpress;UID=sa;PWD=fjg^%kls;Initial Catalog=ABC"); 
    sql.Open(); 
    } 

} 

注意有没有.Close,这确实在快速连续运行3次后INFACT崩溃。

为了测量泄漏我运行性能监控和测量的SQLServer:常规统计/用户连接:

alt text http://www.yart.com.au/stackoverflow/counter.png

然而,这些似乎是零,当我运行我的代码:

alt text http://www.yart.com.au/stackoverflow/counter1.jpg

我应该改变什么才能看到连接?

ANSWER

我在下面认可的答案。尽管它不使用性能工具,但它足够我的使用。底线是我想看看打开网页后有多少连接仍然打开,这就是诀窍。

+0

“ASP.NET SQL”是什么意思?如果只有两个标签,请将它们留给标题。 – 2010-06-21 03:04:37

回答

5

你可以试着运行针对主查询数据库这样的:

SELECT SPID, 
     STATUS, 
     PROGRAM_NAME, 
     LOGINAME=RTRIM(LOGINAME), 
     HOSTNAME, 
     CMD 
FROM MASTER.DBO.SYSPROCESSES 
WHERE DB_NAME(DBID) = 'TEST' AND DBID != 0 

详情请参阅this link

2

您是否尝试过运行sp_who存储过程?如果有过时的开放连接,他们应该出现在那里。

即可显示sa用户进程中运行:

EXEC sp_who 'sa' 
+0

这是否意味着我无法看到性能图中的连接? – Petras 2010-06-21 05:05:21