SQLServer与StateServer for ASP.NET会话状态性能

时间:2009-09-18 23:03:25

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

我正在攻读MS认证,我正在做的一个练习测试有一个问题,争论点是在SQL Server中存储会话而不是StateServer之间的性能。

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

4 个答案:

答案 0 :(得分:55)

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

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

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

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

答案 1 :(得分:14)

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

来自here

  • 正在进行中。在进程中将表现最佳,因为会话状态内存保留在ASP.NET进程中。对于托管在单个服务器上的Web应用程序,保证用户可以重定向到正确服务器的应用程序,或者会话状态数据不重要的应用程序(在某种意义上可以重新构建或重新填充) ,这是可供选择的模式。
  • 退出流程。当性能很重要时,最好使用此模式,但无法保证用户从哪个服务器请求应用程序。使用进程外模式,您可以获得从内存中读取的性能以及管理所有服务器状态的单独进程的可靠性。
  • SQL Server。当数据的可靠性对应用程序的稳定性至关重要时,最好使用此模式,因为数据库可以针对故障情况进行集群。性能不如过程快,但权衡是更高的可靠性。

答案 2 :(得分:11)

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

  

性能

     
      
  • InProc - 最快,但会话数据越多,内存就越多   在Web服务器上使用,以及   会影响表现。

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

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

  •   

所以看起来StateServer比SQL Server存储会话状态要快一点。

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

答案 3 :(得分:8)