2009-09-18 12 views
30

Uczę się w celu uzyskania certyfikatu MS i jeden z testów próbnych robię ma pytanie, gdzie punktem spornym jest wydajność między przechowywanie sesji w SQL Server jako przeciwieństwie do StateServer.SQLServer vs StateServer dla wydajności stanu sesji ASP.NET

Biorąc pod uwagę, że aplikacja działa w farmie sieciowej, które rozwiązanie dla stanu sesji zapewnia najlepszą wydajność (SQL Server lub StateServer) i co najważniejsze, dlaczego?

+1

Aby uzyskać więcej informacji na temat stanu sesji ASP.net rzucić okiem tutaj:> http://msdn.microsoft.com /fr-fr/libary/system.web.sessionstate.httpsessionstate%28v=vs.80%29.aspx – 7addan

Odpowiedz

53

Serwer państwowy jest szybszy, ponieważ przechowuje dane sesji w słowniku w pamięci. Serwer SQL jest wolniejszy, ponieważ jest przechowywany w bazie danych, która utrzymuje dane na dysku.

Serwer SQL jest także wolniejszy, ponieważ wszystko jest przechowywane w jednej tabeli, co prowadzi do rywalizacji, ponieważ coraz więcej klientów uzyskuje dostęp/aktualizuje dane sesji.

Serwer SQL jest bardziej niezawodny, ponieważ jest przechowywany na dysku i można go skonfigurować jako klaster z możliwością przełączania awaryjnego.

Zapoznaj się z preambule w this article, aby uzyskać wnikliwe wyjaśnienie.

+0

Dzięki Mark, bardzo jasne i na temat odpowiedzi –

11

z tego linku: http://www.eggheadcafe.com/articles/20021016.asp

Wyniki

  • InProc - Najszybsze, ale im więcej danych sesji, więcej pamięci zostanie spożywane na serwerze WWW, a mogą mieć wpływ na wyniki .

  • StateServer - Podczas przechowywania danych podstawowych typów (na przykład łańcuch, liczba całkowita itp), w jednym środowisku testowym, to jest o 15% mniejsza niż InProc. Jednak koszt serializacji/deserializacji może wpłynąć na wydajność w przypadku przechowywania partii obiektów. Musisz wykonać test wydajności dla własnego scenariusza .

  • SQLServer - Podczas przechowywania danych podstawowych typów (na przykład łańcuch, liczba całkowita itp), w jednym środowisku testowym, to jest o 25% mniejsza niż InProc. To samo ostrzeżenie o serializacji jak w StateServer.

Więc wydaje się, że StateServer jest trochę szybciej niż SQL Server do przechowywania stanu sesji.

Pod względem dlaczego, chciałbym zasugerować, że SQL Server jest bardziej uniwersalny i prawdopodobnie będzie również używany do innych rzeczy. Nie tylko to, ale mechanizm przechowywania jest na dysku, gdzie jako StateServer działa w oddzielnym procesie, ale jest to po prostu przechowywanie danych w przestrzeni pamięci innego procesu, zamiast zapisywania go na dysku (na co pozwala pamięć wirtualna)

14

Nieco mała, ale ważna zasada: InProc nie nadaje się do użytku w gospodarstwie, jak sama nazwa wskazuje, działa w bieżącym procesie w3wp i nie może być współdzielony przez farmę. StateServer jest usługą systemu Windows, więc szybkość korzystania z StateServer zależy od szybkości komputera, na którym działa usługa serwera stanu, jest to tylko pamięć. Oczywiście SQL musi zapisać dane i je pobrać, co prawdopodobnie jest wolniejsze od pamięci.

Od here:

  • W procesie. Proces będzie działał najlepiej, ponieważ pamięć stanu sesji jest przechowywana w procesie ASP.NET. W przypadku aplikacji internetowych hostowanych na pojedynczym serwerze, aplikacje, w których użytkownik ma zagwarantowane przekierowanie na właściwy serwer lub gdy dane stanu sesji nie są krytyczne (w tym sensie, że można je ponownie utworzyć lub ponownie wypełnić) , jest to tryb do wyboru.
  • Z procesu. Ten tryb najlepiej jest stosować, gdy wydajność jest ważna, ale nie można zagwarantować, który serwer będzie wymagał od użytkownika aplikacji. W trybie out-of-process uzyskuje się wydajność odczytu z pamięci i niezawodność oddzielnego procesu, który zarządza stanem dla wszystkich serwerów.
  • Serwer SQL. Ten tryb najlepiej jest stosować, gdy wiarygodność danych ma fundamentalne znaczenie dla stabilności aplikacji, ponieważ baza danych może być klastrowana dla scenariuszy awarii. Wydajność nie jest tak szybka, jak z procesu, ale kompromisem jest wyższy poziom niezawodności.
+0

Należy również pamiętać, że zarówno SQL Server, jak i Out-of-process obejmują serializację i deserializację danych sesji, która jest dodatkowe obciążenie związane z wydajnością nie jest obciążone. –

+0

Ponadto, serwer SQL i proces poza procesem zwykle wymaga wysyłania danych przez sieć, a więc również koszty ogólne, w tym także w przypadku InProc, nie są obciążone. –

Powiązane problemy