2010-09-26 18 views
5

Występują problemy z wydajnością w mojej aplikacji asp.net. Czasami wykonanie polecenia zajmuje klientowi 30-40 sekund, ponieważ czasami zajmuje to 3-4 sekundy. Próbowałem SQL Profiler i nie widzę żadnych problemów. Nie mogłem powtórzyć problemu po mojej stronie, w tym samym scenariuszu, gdy klient próbował.Wydajność sesji ASP.NET

Myślę, że może to mieć związek ze zmiennymi sesji, których używam. Używam ich bardzo dużo, aby przekazywać informacje na stronie. Jednak ja ich nie usuwam.

Czy mogę je wyczyścić, czy to pomoże? i jeśli tak, to wpłynie to na innych użytkowników. Czy może to zrobić tylko dla tego użytkownika?

Każda pomoc jest doceniana.

+0

Czy możesz podać nam więcej informacji dotyczących obciążenia serwera, gdy tak się stanie, w tym zarówno użycie procesora, jak i użycie pamięci? Zwykle szukam zakleszczeń zasobów lub przekroczenia czasu, kiedy żądania nagle zaczynają brać ponad 30 sekund. – sisve

+2

Tego typu pytania naprawdę trudno odpowiedzieć. Jaki jest sprzęt? Ilu użytkowników serwerów internetowych? Dokładnie ile danych w sesji (możesz określić "wiele z nich") na użytkownika? Ilu użytkowników serwera SQL? Różnice w przepustowości platform/sprzętu/sieci i około miliona innych czynników (zły kod, zła architektura, pora dnia, równoważenie obciążenia, buforowanie itp.) Mogą wpływać na wydajność. Jakie jest środowisko? –

+0

Jakiego trybu stanu sesji używasz? tj. inproc, sqlserver lub serwer stanowy? Dwóch z nich wykorzysta więcej zasobów niż poprzednie, choć są one również bardziej odporne. –

Odpowiedz

0

Zmienne sesji i tak są specyficzne dla użytkownika, więc ich wyczyszczenie nie wpłynie na innych użytkowników.

utrzymanie światła sesji z pewnością pomoże poprawić wydajność.

0

Należy zasugerować, że sesja ASP.NET nie wpłynie na czas obiegu serwera SQL w normalnym trybie działania. Zakładając, że nic nie jest przechowywane w sesji związanej z twoją warstwą danych (np. Statyczne obiekty SqlConnection)

Jeśli widzisz te długie czasy (30-40 sekund), spróbuj określić, czy wydajność jest stopniowym spowolnieniem, czy też Czas obiegu programu SQL Server jest sporadyczny.

Zastanów się nad wdrożeniem rejestrowania, aby określić wzór. Zacznij od zapisania na dysku, jeden plik na dzień/godzinę, jak uważasz za stosowne.

  • Rozpoczęto uruchamianie polecenia SQL. Zaloguj zapytanie/dataset/istotne informacje, które przekazujesz.
  • czas zakończenia polecenia SQL.
 
--- Executing statement SELECT * FROM Customers 
--- Start 08:55.44 
--- End 08:55.45 
=== Roundtrip was 1 second SELECT * FROM Customers 

Po godzinie/dzień/tydzień, otwórz dzienniki szukać „w obie strony”, a może napisać program do analizowania tych dzienników dla Ciebie.

1

Wystąpił problem z blokowaniem rekordów w jednej z procedur składowanych w .NET 2.0 implementacji pamięci sesji opartej na programie SQL Server. Wygląda na to, że MS włączyło poprawkę do wydania .NET 4.0.

Spójrz tutaj: http://sanjevsharma.blogspot.com/2008/03/improving-aspnet-session-state-database.html

Jestem w 99% pewien, że można uruchomić wersję 4.0 aspnet_regsql -ssadd i nadal uruchomić ASP.NET 2.0 przeciwko niemu. Pamiętam, jak robiłem różnicę w skrypcie SQL 2.0 2.0, a powyższa poprawka była jedyną prawdziwą różnicą. Wdrożenie poprawki przez MS było trochę ładniejsze niż (i wyraźnie oparte na) powyższym linku.

0

Jeśli problem nie jest Twoją bazą danych, możesz spróbować profilować swoją aplikację internetową i sprawdzić, gdzie znajdują się wąskie gardła. Trudno jest odtworzyć zmienne problemy, takie jak w przypadku produkcji (opóźnienia 4-40 sekund), ale wyniki liczby wywołań metod i tych, które zużywają najwięcej czasu wykonania, mogą stanowić wskazówkę.

Niektóre z nich są wymienione w What Are Some Good .NET Profilers?

Osobiście jestem wielkim fanem profilera EQATEC.

0

Jeśli masz zmienność w tej skali, możesz bardzo dobrze spojrzeć na problem blokowania lub rywalizacji. W zależności od czasu i tego, co jeszcze dzieje się podczas profilowania, może nie być problemu z blokowaniem SQL, jeśli tak właśnie jest. Spróbuj monitorować dane blokady w perfmon, aby sprawdzić, czy jest tam coś podejrzanego, i zastanowić się, co jeszcze w systemie może powodować blokowanie lub opóźnianie czasu oczekiwania.

0

Czy próbowałeś włączyć rejestrowanie śledzenia ASP.NET i przeglądanie czasów ładowania w stosie wywołań? Używałem tego całkiem sporo do zdiagnozowania wąskich gardeł w wydajności ASP.NET. Jeśli jesteś zaznajomiony z trace.axd, można włączyć go za pomocą pliku konfiguracyjnego

<trace enabled="true" /> 

Włączenie tego ustawienia konfiguracji pozwoli Ci przeglądać trace.axd u podstaw swojej stronie i przeglądanie ostatnich 10 transakcji szczegółowo. Możesz włączyć większy zestaw wyników, zestawy wyników toczenia i kilka innych fajnych opcji śledzenia za pomocą tego elementu śledzenia.