【问题标题】:ASP.NET Session PerformanceASP.NET 会话性能
【发布时间】:2011-04-17 10:28:00
【问题描述】:

我的 asp.net 应用程序出现性能问题。有时客户端执行命令需要 30-40 秒,而有时需要 3-4 秒。我尝试了 SQL Profiler,但没有发现任何问题。在客户尝试的相同情况下,我无法复制我这边的问题。

我认为这可能与我正在使用的会话变量有关。我正在使用其中很多来在页面内传递信息。但是我不清除它们。

如果我清除它们会有帮助吗?如果是的话,这会影响其他用户吗?还是只为该用户清除?

感谢任何帮助。

【问题讨论】:

  • 当这种情况发生时,您能否向我们提供有关服务器负载的更多信息,包括 CPU 使用情况和内存使用情况?当请求突然开始花费 30 多秒时,我通常会寻找资源死锁或超时。
  • 这类问题真的很难回答。硬件怎么样?有多少 Web 服务器用户?每个用户在会话中到底有多少数据(你能量化“很多”)吗?有多少 SQL Server 用户?平台/硬件/网络吞吐量的差异以及大约一百万个其他因素(糟糕的代码、糟糕的架构、一天中的时间、负载平衡、缓存等)都会影响性能。环境怎么样?
  • 您使用的是什么会话状态模式?即 inproc、sqlserver 或 stateserver?后两者将比前者使用更多的资源,尽管它们也更具弹性。

标签: asp.net sql-server vb.net tsql session-state


【解决方案1】:

会话和会话变量是特定于用户的,因此清除它们不会影响其他用户。

保持会话轻松肯定有助于提高性能。

【讨论】:

    【解决方案2】:

    建议 ASP.NET Session 在正常操作过程中不会影响您的 SQL Server 往返时间。假设没有任何内容存储在与您的数据层相关的会话中(即静态 SqlConnection 对象)

    如果您看到这些较长的时间(30-40 秒),请尝试确定性能是逐渐变慢,还是您的 SQL Server 往返时间是零星的。

    考虑实施日志记录以帮助确定模式。首先写入磁盘,根据您的需要,每天/小时写入一个文件。

    • SQL 命令开始的开始时间。记录您传递的查询/数据集/相关信息。
    • SQL 命令的结束时间。
    --- 执行语句 SELECT * FROM Customers --- 开始 08:55.44 --- 结束 08:55.45 === 往返时间为 1 秒 SELECT * FROM Customers

    一个小时/天/周后,打开日志查找“往返”,或许可以编写一个程序为您解析这些日志。

    【讨论】:

      【解决方案3】:

      在基于 SQL Server 的会话存储的 .NET 2.0 实现中的一个存储过程中存在记录锁定问题。看起来 MS 在 .NET 4.0 版本中加入了该修复程序。

      看这里: http://sanjevsharma.blogspot.com/2008/03/improving-aspnet-session-state-database.html

      我 99% 确定您可以运行 4.0 版本的 aspnet_regsql -ssadd 并仍然针对它运行 ASP.NET 2.0。我记得对 2.0 与 4.0 SQL 脚本进行了比较,上面的修复是唯一真正的区别。 MS 的修复实现比上面的链接好一点(并且明显基于)。

      【讨论】:

        【解决方案4】:

        如果问题似乎不是您的数据库,您可以尝试分析您的网络应用程序并查看瓶颈在哪里。很难重现您在生产中看到的可变问题(4-40 秒延迟),但是发生了多少方法调用以及哪些方法调用消耗最多执行时间的结果可能会提供提示。

        What Are Some Good .NET Profilers?中提到了一些

        就我个人而言,我是 EQATEC 分析器的忠实粉丝。

        【讨论】:

          【解决方案5】:

          如果您有这种规模的可变性,您很可能正在研究某种锁定或争用问题。根据时间安排以及分析时发生的其他情况,您可能看不到 SQL 锁定问题(如果确实如此)。尝试在 perfmon 中监控锁定指标,看看是否有任何可疑之处,并考虑系统中的其他原因可能导致任何类型的锁定或延迟等待时间。

          【讨论】:

            【解决方案6】:

            您是否尝试过启用 ASP.NET 跟踪日志记录并查看调用堆栈中的加载时间?我已经多次使用它来诊断 ASP.NET 性能的瓶颈。如果你对 trace.axd 不熟悉,可以通过配置文件启用它

            <trace enabled="true" />
            

            启用此配置设置将允许您浏览到位于站点根目录的 trace.axd 并详细查看最近 10 笔交易。您可以通过该跟踪元素启用更大的结果集、滚动结果集以及许多其他漂亮的跟踪选项。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-08-23
              • 1970-01-01
              • 2010-11-29
              • 2016-10-03
              • 1970-01-01
              • 2011-07-07
              • 1970-01-01
              • 2013-06-06
              相关资源
              最近更新 更多