2009-09-18 64 views
30

我正在学习MS认证,我正在做的一个练习测试有一个问题,争用的焦点是将会话存储在SQL Server中的性能为与StateServer相反。SQLServer vs StateServer for ASP.NET会话状态性能

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

+1

有关ASP.net会话状态的更多详细信息,看看这里:> http://msdn.microsoft.com /fr-fr/library/system.web.sessionstate.httpsessionstate%28v=vs.80%29.aspx – 7addan 2013-03-26 10:24:49

回答

53

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

由于越来越多的客户端访问/更新会话数据,SQL服务器的速度也会变慢,因为所有数据都存储在一个表中,导致争用。

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

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

+0

谢谢马克,非常清楚并且重点回答 – 2009-09-20 21:07:53

11

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

性能

  • 是InProc - 最快的,但更多的会话数据,更多的内存是 消耗的Web服务器上,并且 可能会影响性能。 StateServer - 当存储基本类型的数据(例如字符串,整数, 等)时,在一个测试环境中,它比InProc慢15% 。但是,如果您要存储 批次 的对象,则序列化/反序列化的成本 可能会影响性能 。您必须为自己的 方案执行性能测试。 SQLServer-当存储基本类型数据(例如字符串,整数, 等)时,在一个测试环境中,它比InProc慢25%,即 。与StateServer中的 序列化相同的警告。

所以它似乎是StateServer的快一点,用于存储会话状态的SQL Server。

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

14

有点但重要的注意事项:InProc在服务器场中不可用,顾名思义,它运行在当前的w3wp进程中,无法在服务器场中共享。 StateServer是一项Windows服务,因此使用StateServer的速度取决于运行状态服务器的计算机的速度,它只是内存。当然,SQL需要编写数据并进行检索,这可能比内存更慢。

here

  • 在过程。进程中执行得最好,因为会话状态内存保存在ASP.NET进程中。对于托管在单个服务器上的Web应用程序,确保用户被重定向到正确服务器的应用程序,或会话状态数据不重要的应用程序(就其可以重新构建或重新填充而言) ,这是可供选择的模式。
  • 过程中。当性能很重要时最好使用此模式,但不能保证用户将从哪个服务器请求应用程序。在进程外模式下,您可以获得从内存读取的性能以及管理所有服务器状态的单独进程的可靠性。
  • SQL Server。当数据的可靠性对应用程序的稳定性至关重要时,最好使用此模式,因为数据库可以针对故障情况进行群集。性能没有过程那么快,但折衷是更高的可靠性水平。
+0

还要记住,SQL Server和进程外包含会话数据的序列化和反序列化,这是一个inproc中额外的性能开销不会带来负担。 – 2017-01-12 07:54:06

+0

除此之外,SQL服务器和进程外通常需要通过网络发送数据,因此也会涉及网络通信的开销,InProc也没有负担。 – 2017-01-12 07:56:08