Porównaj ceny domen i usług IT, sprzedawców z całego świata

Rozwiązywanie problemów z sporadycznym spadkiem wydajności serwera


Zbyt długo rozwiązywałem problemy z przerywaną wydajnością serwera i kończą mi się pomysły. Szukam jakichkolwiek sugestii, jak mogę ustalić przyczynę problemu.
Kilka lat temu (wraz z moim zespołem) opracowaliśmy aplikację klient/serwer Windows Forms wykorzystującą bazę danych SQL Server dla klienta. Klient niedawno zaczął mieć problemy z wydajnością i zdecydował się zaktualizować swoją infrastrukturę. Przeprowadzili migrację z jednej fizycznej maszyny SBS do środowiska zwirtualizowanego z wieloma maszynami wirtualnymi. Z powodzeniem przeprowadziliśmy migrację aplikacji i bitów SQL do nowego środowiska. Następnie klient zażądał aktualizacji aplikacji, aby naprawić niektóre wycieki pamięci i inne problemy/błędy z wydajnością, z którymi pracował od lat. Dokonaliśmy aktualizacji i system otrzymał dobre oceny w naszym środowisku. Następnie wdrożyliśmy ich nowe środowisko produkcyjne i system wydawał się działać dobrze.
Dzień lub dwa po wdrożeniu otrzymaliśmy skargi dotyczące zawieszania się systemu lub opóźnień podczas ładowania/zapisywania danych formularza lub generowania raportów. Skontaktowaliśmy się z klientem zdalnie i potwierdziliśmy problem. Przeanalizowaliśmy środowisko klienta i sprawdziliśmy, czy nie występują wycieki pamięci i inne problemy, które mogą powodować objawy. Nic nie znaleźliśmy. Następnie zdaliśmy sobie sprawę, że problem z wydajnością dotyczy wielu komputerów w sieci i musi być powiązany ze środowiskiem. Klient następnie poprosił specjalistów ds. Pomocy technicznej o wyeliminowanie potencjalnej konfiguracji sprzętu/sieci dla źródła. Nic nie znaleźli.
Podczas naszych rund rozwiązywania problemów z klientem natknęliśmy się na sposoby naprawienia problemu z wydajnością, gdy wystąpi (który wydaje się przypadkowy). Ponowne uruchomienie serwera rozwiązuje problem, ale nie jest to poprawne rozwiązanie.
Innym sposobem i powodem, dla którego to publikuję, jest to, że gdy klient zauważy spadek wydajności, może otworzyć „starszą” wersję aplikacji (która jest nadal dostępna na niektórych komputerach klienckich) i wydajność zostanie przywrócona. Nie ma potrzeby ponownego uruchamiania istniejącej instancji aplikacji klienckiej.
System działa dobrze między incydentami i wydaje się, że problem występuje średnio co 2-3 dni, ale działał bez incydentów przez tydzień, a także miał kilka incydentów w ciągu jednego dnia (jeden rano, a następnie jeden po tygodniu). w ciągu dnia).
Myśleliśmy, że problem mógł być związany z programem SQL Server. Więc sprofilowałem, zapisałem ślady, a także śledziłem liczniki wydajności SQL w poszukiwaniu wskazówek. Nie jestem ekspertem od wydajności SQL, więc może nie radzę sobie dobrze z poprawnymi licznikami, ale SQL Server nie wydaje się być mocno obciążony. Nie ma stałych skoków procesora, pamięci, pakietów na sekundę, transakcji na sekundę, kompilacji na sekundę, ponownej kompilacji na sekundę, a liczniki wymiany i pamięci podręcznej są zwykle statyczne.
Aplikacja może działać jednocześnie od 10 do 20 aktywnych instancji. Aplikacja nie została pierwotnie napisana przy użyciu najbardziej wydajnych metod pobierania danych, ale generowane obciążenie jest czymś, czego serwer nie może obsłużyć.
Monitorowałem również dzienniki zdarzeń systemu Windows pod kątem błędów i ostrzeżeń, które mogą rzucić światło na problem, ale nie widziałem niczego, co zostało zgłoszone bezpośrednio przed lub w trakcie incydentu wskazującego na problem.
Kolejną dziwną obserwacją, którą odkryliśmy, było to, że aplikacja działa bez pogorszenia wydajności, gdy jest uruchamiana bezpośrednio na serwerze, niezależnie od ogólnej wydajności systemu. Uruchomiłem aplikację bezpośrednio na serwerze, gdy wystąpił problem na innych maszynach i nie miałem spowolnienia ani opóźnień.
Przepraszam za książkę. Będę nadal szukał wskazówek, ale wszelkie sugestie byłyby bardzo mile widziane.
Serwer: Windows Server 2012 R2 (maszyna wirtualna z dużą ilością dedykowanych zasobów) SQL: SQL Server 2014 Standard Klienci: mieszani, ale głównie Windows 7 Professional
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli chodzi o bazę danych, to zaczynałbym rejestrować aktywność w tabeli,

lubię to
https://www.brentozar.com/resp ... e/... Będziesz musiał skonfigurować zapisany proces tak, aby działał przez dłuższy czas, aby dane były nadal rejestrowane (SET @numberOfRuns = 10) lub całkowicie pomiń tę kontrolę.
Istnieją narzędzia, które ułatwiają analizę dziennika wydajności serwera.

Tutaj
https://pal.codeplex.com/
jest jeden. Tutaj

blog autorów
https://blogs.technet.microsoft.com/clinth/page/2/
.
Możesz spróbować użyć Monitora sieci, aby zobaczyć, co dzieje się na kliencie, gdy wystąpi problem. Przyjrzyj się również licznikom ruchu sieciowego w programie perfmon na serwerze. Sprawdź swoje sesje TCP, jeśli może wystąpić problem z netstatem. Nie wiem zbyt wiele na temat sieci, więc może to być przypadek, w którym niewidomy prowadzi niewidomego :)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Czy kiedykolwiek to rozgryzłeś? Z jakich parametrów połączenia korzysta Twoja aplikacja? Jeśli działa dobrze na serwerze, ale nie działa na klientach, pamiętaj o połączeniu sieciowym. te. jeśli twoje połączenie używa datasource = nazwa_komputera, wtedy na serwerze użyje pętli zwrotnej, a na klientach będzie używał rozpoznawania nazw i adresów IP. Może spróbuj użyć adresu IP w ciągu połączenia zamiast nazwy DNS, aby uniknąć wyszukiwania DNS.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się