SQLServer与StateServer在ASP.NET Session State性能方面的比较

39
我正在学习MS认证,其中一份模拟测试中有一道问题涉及将会话存储在SQL Server中与存储在StateServer中的性能差异。
考虑到应用程序在Web集群中运行,哪种会话状态的解决方案具有最佳性能(SQL Server或StateServer),最重要的是为什么?

1
有关ASP.net会话状态的更多详细信息,请查看此处:> http://msdn.microsoft.com/fr-fr/library/system.web.sessionstate.httpsessionstate%28v=vs.80%29.aspx - 7addan
4个回答

62

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

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

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

有关详细说明,请参见本文中的前言部分。


不好意思,但 SQL Server 的默认配置是使用内存中的 tempdb,而不是写入磁盘。请参见此处:https://www.codeproject.com/Articles/104082/Configuring-ASP-session-state-on-SQL-server - 8vtwo

16
一个小但重要的旁注:InProc在农场中无法使用,因为它在当前w3wp进程中运行,不能在农场中共享。StateServer是一个Windows服务,因此使用StateServer的速度取决于运行状态服务器服务的机器有多快,它仅限于内存。当然,SQL需要编写和检索数据,这可能比仅限于内存的速度慢。从这里开始:
  • 进程内。进程内表现最佳,因为会话状态内存保存在ASP.NET进程内。对于托管在单个服务器上的Web应用程序,在用户保证被重定向到正确的服务器的应用程序或会话状态数据不是关键的情况下(即可以重新构建或重新填充),这是选择的模式。
  • 进程外。当性能很重要但无法保证用户将从哪个服务器请求应用程序时,最好使用此模式。通过进程外模式,您可以获得从内存读取的性能和管理所有服务器的状态的单独进程的可靠性。
  • SQL Server。当数据的可靠性对应用程序的稳定性至关重要时,最好使用此模式,因为数据库可以针对故障场景进行集群。性能不如进程外快,但权衡是更高的可靠性。

3
请注意,SQL Server和Out-of-process都涉及序列化和反序列化会话数据,这是inproc不需要承担的额外性能开销。 - CShark
2
除此之外,SQL Server 和 out-of-process 通常需要通过网络发送数据,因此还涉及与网络通信相关的开销,而 InProc 也没有负担。 - CShark

12

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

性能

  • InProc - 最快,但是会消耗更多的内存来存储会话数据在Web服务器上,会影响性能。

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

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

因此,看起来对于存储会话状态,StateServer比SQL Server略快。

就为什么而言,我建议SQL Server更多用于多种目的,很可能也会用于其他事情。不仅如此,存储机制是磁盘,而StateServer是运行在单独的进程中,但它只是将数据存储在另一个进程的内存空间中,而不是需要写入磁盘(虚拟内存允许的情况下)。


了解真实世界的性能影响确实非常有帮助。 - TruthOf42

7

链接已不再可用。以下页面可能类似:https://cloudblogs.microsoft.com/sqlserver/2014/07/10/new-asp-net-session-state-provider-for-sql-server-in-memory-oltp/ - cadull
SQL Server SessionState 已经使用了内存中的 tempdb。 - 8vtwo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接