监视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在获取连接时的性能?
我想我们可以通过计时打开连接的尝试来创建自己的"平均连接打开时间"性能计数器,但我宁愿使用已经存在的东西。
您可以使用perfmon
来获取这些信息。您需要连接到SQL Server: General Statistics
下的User Connections
监视器。这是我从中获得的博客文章。这将使您知道在什么时间点连接处于打开状态。
然后,您需要将其与应用程序任务关联起来(即,当您看到它们不断攀升时,您在应用程序中所做的事情)。
一旦你完成了这项工作,你就会想在using
语句中获得这些连接,如果你还没有:
using (SqlConnection cn = new SqlConnection("some connection string"))
{
cn.Open();
...
}
通过这样做,您将不需要发布Close
,也不必担心它们会被正确处理。
简言之,性能计数器应该可以帮助您追踪应用程序中导致问题的代码,但它不会一直到最后一行,即使从那以后也需要付出更多的努力。