asp.net sql-server performance session stateserver

SQLServer vs StateServer para ASP.NET Session State Performance



sql-server (4)

Estoy estudiando para obtener una certificación de MS y una de las pruebas de práctica que estoy haciendo tiene una pregunta donde el punto de disputa es el rendimiento entre el almacenamiento de la sesión en SQL Server en lugar de StateServer.

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


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

Actuación

  • InProc: el más rápido, pero mientras más datos de sesión, más memoria se consume en el servidor web, y eso puede afectar el rendimiento.

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

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

Entonces, parece que StateServer es un poco más rápido que SQL Server para almacenar el estado de la sesión.

En términos de por qué, sugeriría que el servidor SQL 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)



State Server es más rápido porque almacena datos de sesión en un diccionario en 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 se almacena 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.

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

Vea el preámbulo en este artículo para una explicación en profundidad.


Una pequeña pero importante nota al margen: InProc no se puede utilizar en una granja, 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.

Desde 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.
  • Servidor SQL. 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.