7

我们有一个带有 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 在获取连接时的性能?

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

4

1 回答 1

2

您可以使用perfmon来获取此信息。您需要User ConnectionsSQL Server: General Statistics. 这是我从中获取的博客文章。这将让您知道连接在什么时间点保持打开状态。

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

完成后,如果您还没有,您将希望在using语句中获取这些连接:

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

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

简而言之,性能计数器应该可以帮助您跟踪导致问题的应用程序中的代码,但它不会归结为每条线,即使从那里也需要更多的努力。

于 2013-02-25T16:46:23.190 回答