监视ADO.NET连接打开时间

Pau*_*ams 6 c# ado.net wcf perfmon connection-timeout

我们有一个带有C#客户端,C#WCF Web服务层和SQL Server数据库的3层应用程序.Web服务使用ADO.NET连接到数据库.我们所有的C#代码都使用.NET Framework 2.0.

最近,客户对我们的应用程序进行了压力测试.在测试期间,Web服务器生成了许多错误,如下所示:

无法连接到数据库以获取连接字符串'...'.超时已过期.操作完成之前经过的超时时间或服务器没有响应.

我知道有些方法可以在连接池已满时捕获连接错误并尝试获取连接池外部的连接.我们还发现了一些需要调整的查询,但它们并不能解释Web服务器连接超时.

我们试图弄清楚为什么Web服务器超时连接到数据库.我已经设置了Web服务器以启用所有ADO.NET性能计数器.但是,我没有看到任何与连接或连接超时等所需时间相关的内容.理想情况下,我们可以perfmon在其他ADO.NET计数器旁边绘制连接时间图.

有没有办法监控ADO.NET在获取连接时的性能?

我想我们可以通过尝试打开连接来创建我们自己的"平均连接开放时间"性能计数器,但我宁愿使用已经存在的东西.

Mik*_*oud 2

您可以使用perfmon来获取此信息。您需要连接到User Connections下的显示器SQL Server: General Statistics。这是我从中抓取的博客文章。这会让您知道连接在什么时间点保持开放状态。

然后,您需要将其与应用程序任务关联起来(即,当您看到它们不断攀升时,您在应用程序中正在执行的操作)。

完成此操作后,您将希望在using语句中获取这些连接(如果您还没有这样做):

using (SqlConnection cn = new SqlConnection("some connection string"))
{
    cn.Open();
    ...
}
Run Code Online (Sandbox Code Playgroud)

通过这样做,您将不需要发出 aClose并且您不必担心它们会被正确处置。

简而言之,性能计数器应该帮助您追踪应用程序中导致问题的代码,但它不会精确到每行,甚至从那里开始也需要更多的努力。