【发布时间】:2013-02-22 15:30:39
【问题描述】:
我们有一个包含 C# 客户端、C# WCF Web 服务层和 SQL Server 数据库的 3 层应用程序。 Web 服务使用 ADO.NET 连接到数据库。我们所有的 C# 代码都使用 .NET Framework 2.0。
最近,一位客户对我们的应用程序进行了压力测试。在测试过程中,Web 服务器产生了很多错误,如下所示:
无法连接到连接字符串“...”的数据库。超时已过。在操作完成之前超时时间已过或服务器没有响应。
我知道有一些方法可以在连接池已满时捕获连接错误并尝试在连接池之外获取连接。我们还发现了一些需要调整的查询,但它们没有解释 Web 服务器连接超时。
我们正试图找出网络服务器连接数据库超时的原因。我已设置 Web 服务器以启用所有 ADO.NET performance counters。但是,我没有看到与连接所需的时间或连接超时等相关的任何内容。理想情况下,我们可以在 perfmon 中与其他 ADO.NET 计数器相邻绘制连接时间。
有没有办法监控 ADO.NET 在获取连接时的性能?
我想我们可以通过定时尝试打开连接来创建自己的“平均连接打开时间”性能计数器,但我宁愿使用已经存在的东西。
【问题讨论】:
-
SQL Profiler 在这方面有帮助吗?
-
@MrMoose:分析器在查找一些问题查询方面帮助很大。但我需要一些特定的东西来监控连接时间,以查看它们何时上升以及何时开始超时。
-
这需要一个专门关于监控连接打开时间的答案。如...多长时间调用 SqlConnection.Open 需要多长时间 - 它等待池连接具体可用的时间 - 诊断为什么池连接需要很长时间才能变为可用。诸如连接泄漏之类的事情。诸如 EF 之类的框架不会暴露诸如连接打开之类的事件,并且不会为连接工厂和 DbConnections 密封该死的类,因此很难检测。我们需要 ADO.NET 级别的东西,但它没有这样的性能计数器。
标签: c# wcf ado.net perfmon connection-timeout