39

我正在学习 MS 认证,我正在做的一项实践测试有一个问题,其中争论的焦点是将会话存储在 SQL Server 和 StateServer 之间的性能。

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

4

4 回答 4

62

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

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

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

请参阅本文的序言以获得深入的解释。

于 2009-09-20T20:27:36.543 回答
16

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

这里

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

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

表现

  • InProc - 最快,但会话数据越多,Web 服务器消耗的内存就越多,这会影响性能。

  • StateServer - 当存储基本类型的数据(例如字符串、整数等)时,在一个测试环境中它比 InProc 慢 15%。但是,如果要存储大量对象,序列化/反序列化的成本会影响性能。您必须为自己的场景进行性能测试。

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

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

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

于 2009-09-18T23:12:56.920 回答
7

SQL Server(内存中)是答案 - SQL 2014 中可用

http://blogs.msdn.com/b/kenkilty/archive/2014/07/03/asp-net-session-state-using-sql-sever-in-memory.aspx

于 2015-05-14T01:51:37.640 回答