SQLServer vs StateServer pour les performances de l'état de session ASP.NET

J'étudie pour une certificateion MS et l'un des tests pratiques que je fais a une question où le sharepoint contention est la performance entre stocker la session dans SQL Server par opposition à StateServer.

Étant donné que l'application est en cours d'exécution dans une ferme Web, quelle solution pour l'état de session donne les meilleures performances (SQL Server ou StateServer) et, surtout, pourquoi?

State Server est plus rapide car il stocke datatables de session dans un dictionary en memory. SQL Server est plus lent car il est stocké dans une database qui conserve datatables sur le disque.

Le server SQL est également plus lent car tout est stocké dans une table, ce qui entraîne des conflits, car de plus en plus de clients accèdent / mettent à jour datatables de session.

Le server SQL est plus fiable car il est conservé sur disque et peut être configuré en tant que cluster avec capacité de basculement.

Voir le préambule dans cet article pour une explication approfondie.

Un petit, mais important sidenote: InProc n'est pas utilisable dans une ferme, comme son nom l'indique, il fonctionne dans le process w3wp actuel et ne peut pas être partagé à travers une ferme. StateServer est un service Windows, de sorte que la vitesse d'utilisation de StateServer dépend de la vitesse d'exécution de la machine sur laquelle le service stateserver s'exécute. Il s'agit uniquement de memory. SQL doit bien sûr écrire datatables et les récupérer, ce qui est probablement plus lent que la memory.

D' ici :

  • En cours. En cours fonctionnera mieux parce que la memory de l'état de la session est conservée dans le process ASP.NET. Pour les applications Web hébergées sur un server unique, les applications dans lesquelles l'user a la garantie d'être redirigé vers le server approprié ou lorsque datatables d'état de session ne sont pas critiques (en ce sens qu'elles peuvent être reconstruites ou remplacées) , c'est le mode à choisir.
  • Hors process Ce mode est mieux utilisé lorsque les performances sont importantes, mais vous ne pouvez pas garantir quel server un user requestra une application. Avec le mode out-of-process, vous obtenez les performances de lecture de la memory et la fiabilité d'un process séparé qui gère l'état de tous les servers.
  • Serveur SQL. Ce mode est le mieux utilisé lorsque la fiabilité des données est fondamentale pour la stabilité de l'application, car la database peut être mise en cluster pour les scénarios de défaillance. La performance n'est pas aussi rapide que hors process, mais le compromis est le plus haut niveau de fiabilité.

De ce lien: http://www.eggheadcafe.com/articles/20021016.asp

Performance

  • InProc – Plus rapide, mais plus il y a de données de session, plus la memory est consommée sur le server Web, ce qui peut affecter les performances.

  • StateServer – Lorsque vous stockez des données de types de base (par exemple, string, entier, etc.), dans un environnement de test, il est 15% plus lent que InProc. Cependant, le coût de la serialization / déserialization peut affecter les performances si vous stockez beaucoup d'objects. Vous devez effectuer des tests de performance pour votre propre scénario.

  • SQLServer – Lorsque vous stockez des données de types basiques (par exemple, string, entier, etc.), dans un environnement de test, il est 25% plus lent que InProc. Même avertissement concernant la serialization que dans StateServer.

Donc, il semblerait que StateServer est un peu plus rapide que SQL Server pour stocker l'état de la session.

Pour ce qui est du pourquoi, je dirais que le SQL Server est plus polyvalent et sera probablement utilisé pour d'autres choses aussi. Non seulement cela, mais le mécanisme de stockage est sur le disque, où StateServer s'exécute dans un process séparé, mais il stocke simplement datatables dans l'espace memory de l'autre process plutôt que d'écrire sur le disque (la memory virtuelle le permet)

SQL Server (en memory) est la réponse – disponible dans SQL 2014

http://blogs.msdn.com/b/kenkilty/archive/2014/07/03/asp-net-session-state-using-sql-sever-in-memory.aspx