【问题标题】:Measure performance of ASP.NET SQL session state provider测量 ASP.NET SQL 会话状态提供程序的性能
【发布时间】:2013-03-12 10:29:38
【问题描述】:

我们有一个非常大的三层 .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 来挂钩事件并使用秒表,但似乎没有一条干净的路径。 (我会选择一种合理精确到百分之几的方法......)

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

【问题讨论】:

  • 您是否尝试使用Trace 添加一些诊断代码,然后打开跟踪?这样您就可以非常彻底地诊断所选页面。
  • 你会在哪里添加 Trace 语句?
  • 在你的代码中,尽可能多的,这样你就可以分析命中跟踪的确切时间。

标签: asp.net sql-server performance session-state


【解决方案1】:

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

【讨论】:

  • 感谢您的想法...问题是会话状态通常会随着用户访问更多页面、执行更多操作等而建立。实际测量整个应用程序的状态提供程序性能非常重要,不仅仅是达到低阈值超时。
【解决方案2】:

可以在 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 以轻松生成使用自己的性能计数器增强应用程序所需的管道,然后将您的代码与性能跟踪挂钩。使用标准性能计数器工具链(logman.exeperfmon.exe)进行捕获和分析。

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-08-23
        • 1970-01-01
        • 2013-07-21
        • 2011-06-23
        • 2015-09-08
        • 1970-01-01
        • 2015-06-18
        • 2015-03-10
        • 2015-11-28
        相关资源
        最近更新 更多