2009-09-18 10 views
30

Estoy estudiando para obtener una certificación de MS y una de las pruebas de práctica que estoy realizando tiene una pregunta donde el punto de discusión es el rendimiento entre el almacenamiento de la sesión en SQL Server como opuesto a StateServer.SQLServer vs StateServer para ASP.NET Session State Performance

Dado que la aplicación se ejecuta en una granja de servidores web, ¿qué solución para el estado de la sesión proporciona el mejor rendimiento (Servidor SQL o StateServer) y lo más importante, por qué?

+1

Para más detalles sobre el estado de sesión ASP.net echar un vistazo aquí:> http://msdn.microsoft.com /fr-fr/library/system.web.sessionstate.httpsessionstate%28v=vs.80%29.aspx – 7addan

Respuesta

53

Estado El servidor es más rápido porque almacena los datos de la sesión en un diccionario en la memoria. SQL Server es más lento porque está almacenado en una base de datos que conserva los datos en el disco.

El servidor SQL también es más lento porque todo está almacenado en una tabla lo que genera contención a medida que más y más clientes acceden/actualizan los datos de la sesión.

servidor SQL es más confiable porque se conserva en el disco y se puede configurar como un clúster con capacidad de conmutación por error.

Consulte el preámbulo en this article para obtener una explicación más detallada.

+0

Gracias Mark, muy claro y al punto respuesta –

11

Desde este enlace: http://www.eggheadcafe.com/articles/20021016.asp

Rendimiento

  • InProc - más rápido, pero las más datos de la sesión, el más memoria consumida en el servidor web, y que puede afectar al rendimiento .

  • StateServer - Al almacenar datos de tipos básicos (por ejemplo, cadena, entero, etc), en un entorno de prueba que es 15% más lento que InProc. Sin embargo, el costo de serialización/deserialización puede afectar el rendimiento si está almacenando lotes de objetos. Tienes que hacer pruebas de rendimiento para tu propio escenario .

  • SQLServer - Al almacenar datos de tipos básicos (por ejemplo, cadena, entero, etc), en un entorno de prueba que es 25% más lento que InProc. La misma advertencia sobre la serialización que en StateServer.

Por lo tanto, parecería que StateServer es un poco más rápido que SQL Server para almacenar el estado de sesión.

En términos de por qué, sugeriría que SQL Server sea más polivalente y probablemente también se use para otras cosas. No solo eso, sino el mecanismo de almacenamiento en disco, mientras que el StateServer se ejecuta en un proceso separado, pero simplemente almacena los datos en el espacio de la memoria del otro proceso en lugar de tener que escribirlos en el disco (lo que permite la memoria virtual)

14

Nota breve, pero importante: InProc no se puede usar en una granja de servidores, como su nombre indica, se ejecuta en el proceso w3wp actual y no se puede compartir en una granja. StateServer es un servicio de Windows, por lo que la velocidad de uso de StateServer depende de la velocidad con la que se ejecute el servicio Stateserver, solo de memoria. Por supuesto, SQL necesita escribir los datos y recuperarlos, lo que probablemente sea más lento que la memoria solamente.

De here:

  • En proceso. En proceso funcionará mejor porque la memoria de estado de la sesión se mantiene dentro del proceso ASP.NET. Para aplicaciones web alojadas en un único servidor, aplicaciones en las que se garantiza que el usuario será redirigido al servidor correcto, o cuando los datos del estado de la sesión no son críticos (en el sentido de que pueden reconstruirse o rellenarse) , este es el modo para elegir.
  • Fuera de proceso. Este modo se utiliza mejor cuando el rendimiento es importante, pero no se puede garantizar a qué servidor solicitará un usuario una aplicación. Con el modo fuera de proceso, obtiene el rendimiento de la lectura de la memoria y la confiabilidad de un proceso separado que administra el estado de todos los servidores.
  • SQL Server. Este modo se utiliza mejor cuando la confiabilidad de los datos es fundamental para la estabilidad de la aplicación, ya que la base de datos se puede agrupar para escenarios de falla. El rendimiento no es tan rápido como fuera de proceso, pero la compensación es el mayor nivel de fiabilidad.
+0

Tenga en cuenta también que tanto SQL Server como Out-of-process implica serialización y deserialización de datos de sesión, que es un el rendimiento adicional inproc no está cargado con. –

+0

Además de eso, el servidor SQL y el fuera de proceso generalmente requieren el envío de datos a través de una red, por lo que hay gastos generales también relacionados con las comunicaciones de red, con lo que InProc tampoco tiene que cargar. –