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

Dar*_*o Z 35 sql-server asp.net performance session stateserver

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

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

小智 56

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

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

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

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


Col*_*lin 14

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

这里:

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

  • 还要记住,SQL Server 和进程外都涉及会话数据的序列化和反序列化,这是 inproc 没有负担的额外性能开销。 (3认同)
  • 除此之外,SQL 服务器和进程外通常需要通过网络发送数据,因此还涉及网络通信的开销,InProc 也没有负担。 (2认同)

Col*_*kay 11

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

性能

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

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

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

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

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