1

我们有一个非常大的三层 .NET 4.0 Web 应用程序(ASP.NET、WCF、SQL Server 2008 R2),我正在尝试诊断一些性能问题。ASP.NET 层使用 SQL 会话状态提供程序,并且相当广泛地使用会话状态。

<sessionState mode="SQLServer" sqlConnectionString="..." cookieless="false" timeout="20"/>

我试图弄清楚将会话加载和保存到数据库需要多少时间。请注意,这与使用 SQL 分析器或其他数据库方法来测量该层上的时间不同;我想测量从 ASP.NET 层花费的总时间。 即,这将包括会话对象序列化/反序列化、连线时间和 SQL 保存/加载时间。

我是一位经验丰富的开发人员(自 80 年代初以来),我已经在网上搜索了几个小时——有大量文章对比会话状态方法和一般性能概念等,但我找不到任何关于如何实际衡量这个总数的文章SQL 会话状态提供程序的时间。我最初考虑使用 HttpModule 来挂钩事件并使用秒表,但似乎没有一条干净的路径。(我会选择一种合理准确到百分之几的方法......)

非常感谢任何想法/建议,谢谢。

4

4 回答 4

0

您能否将会话超时更改为秒,然后更改为越来越低的数量,直到它无法加载和保存会话?

于 2013-03-22T14:19:18.023 回答
0

首先想到的是创建一个除了加载/存储会话状态变量之外什么都不做的页面。从那里您可以设置一个编码的 UI 测试,该测试多次访问页面,并为页面加载时间所涉及的可变性和分布构建统计估计。

WCAT(Web容量分析工具)也可用于查看负载下性能如何变化......

于 2014-05-06T18:31:16.427 回答
0

托管堆栈可以在 VS 分析器中进行分析。看:

对于使用 Xperf 的低级内容,请参阅两分钟练习:XPerf 简介

对于 SQL Server 端,有许多性能故障排除方法,例如Waits 和 Queues。对于特定的语句持续时间/IO 成本,您可以使用探查器跟踪,请参阅使用 SQL Server Profiler 的场景

现在,在您的情况下,您可以使用一种非常具体侵入性的方式,您可以使用性能计数器。不是股票种类,而是创建自己的。请参阅使用 XSLT 生成性能计数器,以轻松生成使用自己的性能计数器增强应用程序所需的管道,然后将代码与性能跟踪挂钩。使用标准性能计数器工具链(logman.exeperfmon.exe)进行捕获和分析。

于 2013-03-22T16:09:43.433 回答
0

执行此操作的最简单方法是分析应用程序并查看在 ASP.NET 内部深处花费的时间。您将能够通过类和方法名称快速发现与会话相关的活动。

Perfview 很适合这个。它有一个采样分析器,这意味着它将为您提供准确、无偏差的分析信息。但它不能告诉你用什么方法花了多少秒。它告诉你的只是百分比。

我会针对一个空页面启动负载测试,并让 perfview 运行 30 秒。

dottrace 是一个简单的分析器,我相信它还可以显示每次调用所花费的 CPU 时间。

于 2013-03-22T16:14:43.067 回答