监视ADO.NET连接打开时间

本文关键字:时间 连接 ADO NET 监视 | 更新日期: 2023-09-27 18:00:29

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

最近,一位客户对我们的应用程序进行了压力测试。在测试过程中,web服务器生成了很多错误,如下所示:

无法连接到连接字符串"…"的数据库。超时已过期。在操作完成或服务器没有响应之前经过的超时时间。

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

我们正试图弄清楚web服务器连接数据库超时的原因。我已将web服务器设置为启用所有ADO.NET性能计数器。然而,我没有看到任何与连接所需的时间或连接超时等相关的信息。理想情况下,我们可以将perfmon中的连接时间绘制在其他ADO.NET计数器旁边。

有没有一种方法可以监控ADO.NET在获取连接时的性能?

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

监视ADO.NET连接打开时间

您可以使用perfmon来获取这些信息。您需要连接到SQL Server: General Statistics下的User Connections监视器。这是我从中获得的博客文章。这将使您知道在什么时间点连接处于打开状态。

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

一旦你完成了这项工作,你就会想在using语句中获得这些连接,如果你还没有:

using (SqlConnection cn = new SqlConnection("some connection string"))
{
    cn.Open();
    ...
}

通过这样做,您将不需要发布Close,也不必担心它们会被正确处理。

简言之,性能计数器应该可以帮助您追踪应用程序中导致问题的代码,但它不会一直到最后一行,即使从那以后也需要付出更多的努力。