4

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

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

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

这是我的会话状态:

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

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

4

3 回答 3

0

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

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

<sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424" cookieless="false" timeout="60" />
于 2013-03-14T15:32:17.187 回答
0

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

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

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

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

于 2020-10-17T18:43:51.217 回答
0

您的问题涉及广泛的领域-

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

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

于 2017-04-04T13:20:26.540 回答