【问题标题】:SQLServer vs StateServer for ASP.NET Session State PerformanceASP.NET 会话状态性能的 SQLServer 与 StateServer
【发布时间】:2010-11-29 15:36:40
【问题描述】:

我正在攻读 MS 认证,而我正在进行的一项实践测试有一个问题,其中争论的焦点是在 SQL Server 中存储会话与在 StateServer 中存储会话之间的性能。

鉴于应用程序在网络场中运行,哪种会话状态解决方案可提供最佳性能(SQL Server 或 StateServer),最重要的是,为什么?

【问题讨论】:

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


【解决方案1】:

一点但重要的旁注:InProc 不能在农场中使用,顾名思义,它在当前的 w3wp 进程中运行,不能在农场之间共享。 StateServer 是一个 Windows 服务,因此使用 StateServer 的速度取决于运行 stateserver 服务的机器的速度,它只是内存。 SQL当然需要写入数据和检索,这可能比只使用内存要慢。

来自here

  • 处理中。进程中的性能最好,因为会话状态内存保存在 ASP.NET 进程中。对于托管在单个服务器上的 Web 应用程序,保证用户被重定向到正确服务器的应用程序,或者当会话状态数据不重要时(从某种意义上说,它可以重新构造或重新填充) ,这是可供选择的模式。
  • 进程外。当性能很重要但您不能保证用户将从哪个服务器请求应用程序时,最好使用此模式。使用进程外模式,您可以获得从内存读取的性能以及管理所有服务器状态的单独进程的可靠性。
  • SQL 服务器。当数据的可靠性是应用程序稳定性的基础时,最好使用此模式,因为数据库可以集群以应对故障情况。性能不如进程外快,但代价是更高级别的可靠性。

【讨论】:

  • 另外请记住,SQL Server 和进程外都涉及会话数据的序列化和反序列化,这是 inproc 不负担的额外性能开销。
  • 除此之外,SQL 服务器和进程外通常需要通过网络发送数据,因此还涉及到网络通信的开销,而 InProc 也没有负担。
【解决方案2】:

【讨论】:

【解决方案3】:

State Server 速度更快,因为它将会话数据存储在内存字典中。 SQL Server 速度较慢,因为它存储在将数据持久化到磁盘的数据库中。

SQL 服务器也较慢,因为所有内容都存储在一个表中,随着越来越多的客户端访问/更新会话数据,这会导致争用。

SQL 服务器更可靠,因为它被持久化到磁盘并且可以设置为具有故障转移功能的集群。

请参阅this article 中的序言以获得深入的解释。

【讨论】:

【解决方案4】:

来自这个链接:http://www.eggheadcafe.com/articles/20021016.asp

性能

  • InProc - 最快,但会话数据越多,内存就越多 在 Web 服务器上使用,并且 会影响性能。

  • StateServer - 存储基本类型的数据时(例如字符串、整数、 等),在一个测试环境中为 15% 比 InProc 慢。然而,成本 序列化/反序列化可以 如果您正在存储影响性能 很多 的对象。你必须自己做性能测试 场景。

  • SQLServer - 存储基本类型的数据(例如字符串、整数、 等),在一个测试环境中为 25% 比 InProc 慢。同样的警告 像在 StateServer 中一样进行序列化。

因此,StateServer 似乎在存储会话状态方面比 SQL Server 快一些。

就原因而言,我建议 SQL Server 具有更多用途,并且可能还会用于其他用途。不仅如此,存储机制是磁盘,因为 StateServer 在单独的进程中运行,但它只是将数据存储在另一个进程的内存空间中,而不必将其写入磁盘(虚拟内存允许)

【讨论】:

  • 太棒了;了解现实世界的性能影响真的很有帮助
猜你喜欢
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
相关资源
最近更新 更多