2013-03-22 88 views
1

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

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

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

我是非常有经验的开发人员(自80年代初以来),我现在谷歌搜索小时 - 有大量文章对比了会话状态方法和一般性能概念等,但我什么都没有找到如何实际测量SQL会话状态提供程序的总时间。我最初想到使用HttpModule挂钩事件并使用秒表,但似乎并没有一条干净的路径。 (我会解决的方法是合理精确到百分之几...)

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

+0

你有没有尝试添加使用'Trace',然后就打开跟踪一些诊断代码?这样你可以非常彻底地诊断选定的页面。 – 2013-03-22 14:23:27

+0

你会在哪里添加Trace语句? – 2013-03-22 14:55:38

+0

在您的代码中尽可能多地分析确切的时间点, – 2013-03-22 15:06:33

回答

0

您不仅可以将会话超时更改为秒,然后更低和更低的量,直到它不加载和保存会话?

+0

感谢您的想法......问题在于会话状态通常会随着用户点击更多页面,执行更多操作等而建立。实际衡量整个应用程序的状态提供者性能非常重要,而不仅仅是达到低阈值时间到。 – 2013-03-22 14:21:11

0

托管堆栈可以在VS探查器中进行概要分析。请参阅:

对于低层次的东西用Xperf,看到Two Minute Drill: Introduction to XPerf

对于SQL Server端有性能故障排除许多方法,如Waits and Queues。对于特定的报表持续时间/ IO成本,您可以使用分析器跟踪,请参阅Scenarios for Using SQL Server Profiler

现在为一个非常具体入侵方式在你的情况下,你可以使用性能计数器。不是股票种类,但创建自己的。请参阅Using XSLT to generate Performance Counters,以获得一种简便的方法,通过它自己的性能计数器来增强您的应用所需的管道,然后使用性能跟踪来连接您的代码。使用标准Perforrmance计数器工具链(logman.exe,perfmon.exe)进行采集和分析。

0

要做到这一点,最简单的方法是分析应用程序,并查看时间在ASP.NET深处花费的时间。您将能够通过类和方法名称快速找出与会话相关的活动。

Perfview对此很好。它有一个采样分析器,这意味着它会给你准确的,未校正的分析信息。但它不能告诉你用什么方法花了多少秒。它告诉你的是百分比。

我会对空白页面进行负载测试,让perfview运行30秒。

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

0

首先想到的是创建一个页面,除了可能加载/存储会话状态变量外,其他任何内容都不会执行任何操作。从那里你可以设置一个编码的UI测试,访问页面多次,并建立一个统计估计页面加载时间的变化和分布。

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