【问题标题】:ASP.NET SQL Server Session State extremely slowASP.NET SQL Server 会话状态极慢
【发布时间】:2012-12-11 00:24:42
【问题描述】:

我的 ASP.NET 应用程序出现问题,我需要进行网络农场,但是仅登录到我的应用程序大约需要 15 秒

我做了一个小实验,我创建了我的应用程序的非网络农场版本,然后改用 INPROC 会话状态,登录时间是即时的。在这个测试实例中,我在同一台机器上运行 SQL Express。

我知道 SQL 服务器上的会话状态较慢,但它不可能这么慢。有关如何追踪问题的任何建议?

这是我的会话状态:

<sessionState mode="SQLServer" timeout="60" sqlConnectionString="Data Source=localhost;Integrated Security=SSPI;" sqlCommandTimeout="30" cookieless="false" useHostingIdentity="False" regenerateExpiredSessionId="True" />

我已经尝试过使用用户名密码和集成安全性。

【问题讨论】:

  • 查看this question中的比较
  • 您可以将您的 web.config 部分发布到您放置连接字符串的位置吗?
  • @DOK 我看过了。是的,我知道 SQL Server 应该更慢,但我们说的是要慢几个数量级。
  • 接下来我会尝试分析器
  • 您的连接字符串指向默认的 SQL Server 实例,而 SQL Server Express 默认安装一个命名实例 (SQLEXPRESS)。不确定这是否与您的问题有关,但值得研究。一个需要 15 秒的简单操作肯定会导致某种超时,也许您的 ASP.NET 根本无法连接到您的 SQL Server Express……我不知道在这种情况下预期的行为是什么。

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


【解决方案1】:

您能做的最好的事情(如果您的应用程序允许)是完全避免使用会话存储后端。如果会话数据适合 HTTP 标头本身(通常是这样),您可以对其进行编码并与请求本身作为 cookie 来回移动。

此外,会话状态提供程序的大多数实现都是“阻塞”的,因此您不能对同一会话有并发请求,从而成为一个巨大的瓶颈。

本文指向一个基于 JWT 的插入式会话状态提供程序:

http://www.drupalonwindows.com/en/content/aspnet-session-state-scaling-and-performance-issues

【讨论】:

    【解决方案2】:

    您的问题涉及广泛 -

    1. 代码:您在会话中推送的内容非常重要。如果您要存储大型 blob 等,则每次存储会话数据并从数据库中读取时都会发生序列化/反序列化。你能解析存储的数据并尝试找出平均大小吗?我见过业务应用程序在 sql server 上存储 1mb 到 2mb 的数据,连接了数千个用户,但底层硬件足以支持吞吐量。
    2. 基础设施:您的机器上有多少 RAM?您可以尝试在您的 aspstate 数据库上运行 sql trace 以查看有多少连接进入以及执行查询需要多长时间?问题可能不在数据库端,可能是您的应用程序在存储会话信息时尝试做某事。

    SQL Server 会话存储并没有这么慢,在我的机器上有 8gig ram 和通过 Visual Studio (IIS Express) 运行的 asp.net 应用程序,只需一秒钟即可连接和启动应用程序。

    【讨论】:

      【解决方案3】:

      关系数据库是原子的 (ACID),所以当每个人都在访问同一个表 (ASPStateTempSessions) 时,性能会很差。

      我们在使用 SessionState 模式时遇到了同样的问题,我们在负载均衡器上启动了 ASPNet 状态服务并使用了它。更好的吞吐量。

      <sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424" cookieless="false" timeout="60" />
      

      【讨论】:

        猜你喜欢
        • 2019-10-28
        • 2014-09-17
        • 2011-07-21
        • 1970-01-01
        • 2010-12-21
        • 2018-12-01
        • 2023-03-10
        • 2012-03-02
        • 1970-01-01
        相关资源
        最近更新 更多