Drodzy forumowicze - mam bardzo nietypowy problem z wydajnością Subiekta (programu sprzedażowego, który korzysta z serwer sql). Nie wiem czy znajdzie się wystarczająco mądra głowa, żeby mi pomóc, aczkolwiek bardzo na to liczę ponieważ ja sam już nie mam koncepcji.
Sytuacja wygląda tak: zainstalowałem dawno temu subiekta "serwer" na jednym komputerze. Zwykły pecet - Intel Core duo, 2,4GHz, 8GB RAMu, normalny magnetyczny HDD - naprawdę nic szalonego, ale jednocześnie wystarczającego. Wszystko działało dobrze, ja na tym komputerze na co dzień pracowałem, a dwa pozostałe komputery podłączały się do serwera subiekta i wszystko było przez trochę ponad rok super dobrze. Subiekt działał jak szalony (czyt. bardzo dobrze) - po sieci także. Sytuacja zaczęła się rozwijać i pomyślałem sobie, że fajnie będzie postawić "serwer", który będzie włączony 24/7 i każdy w każdej chwili będzie mógł się do niego podłączyć i nie będzie potrzeby uruchamiania tego konkretnego PC tylko po to, żeby ktokolwiek mógł skorzystać z subiekta. Poza tym to rozwiązanie ma dla mnie jeszcze całą masę innych plusów ale nie o tym chcę pisać.
Wybór na "bazę" na serwer padł na laptopa - Lenovo T400: Intel core duo P8400 (2,4GHz), 4GB ramu Hynix w jednej kości (upolowane najlepsze możliwe - toż to serwer, musi być dobre), dysk twardy SSD Plextor M6P (importowany jeszcze z Niemiec miesiąc temu bo w Polsce był niedostępny), gigabitowa karta sieciowa itp., itp. Zabawka Naprawdę idealna, wychuchana, poskładana na najlepszych możliwych komponentach - wychodzi na to że Subiekt powinien na tym szaleć i tańczyć, a na pewno nie powinno być gorzej niż na komputerze stacjonarnym, z którego się przesiadłem, głównie ze względu na dysk SSD oraz fakt, że ten komputer bezie zajmował się "głównie" subiektem, a nie tylko "przy okazji" - tak jak to było podczas korzystania z komputera stacjonarnego na którym jednocześnie pracowałem.
No i cóż - jest gorzej. Jest kiepsko, dzisiaj pół dnia próbowałem dowiedzieć się, co zrobiłem nie tak i mi się nie udało. Otóż całokształt działa nieźle - naprawdę podejrzewam że podczas normalnego użytkowania będzie czuć spadek wydajności, ale nie na tyle duży, żeby powiedzieć że spadnie jakość pracy. Być może spora część osób by się nawet nie zorientowała, że program pracuje gorzej, ale to ewidentnie różnica jest i to spora.
Problem jest głównie w odświeżaniu całości. Mam odpaloną bazę danych, wchodzę w sprzedaż detaliczną - czyli wyświetlam listę wszystkich wystawionych paragonów. Wciskam F5 - i całość odświeża się - okolice 0,7 sekundy. Czyli klik - komputer myśli - reakcja. Naprawdę jest to zauważalne i problematyczne przy częstym odświeżaniu. Na komputerze stacjonarnym Ten czas na pewno jest poniżej 0,05 sekundy. Jedna baza danych, dwa różne komputery, na jednym - czyli laptopie - mogę atakować F5 - nacisnąć je powiedzmy najszybciej jak to możliwe 100 razy - i spokojnie zdjąć ręce z klawiatury a komputer ma jeszcze na 30 sekund liczenia i odświeżania mimo, że ja już klawiszy nie dotykam. Na komputerze stacjonarnym na którym wszystko było do tej pory takiej sytuacji wymusić się nie da - mogę naciskać F5 dwukrotnie szybciej a komputer reaguje na polecenie natychmiast, reakcja to przysłowiowe mgnienie oka.
Całość przekłada się też na dostęp do dokumentów, oraz ich tworzenie. Czuć wyraźną różnicę, że zamiast otworzyć dokument, to po wciśnięciu enter trzeba po prostu tą niecałą sekundę zaczekać.
Nie chcę żeby ktoś tutaj pisał, że z sekundy oczekiwania robię problem, ale to naprawdę podczas obsługi klienta przez telefon może stać się niekomfortowe, poza tym w przeniosłem serwer subiekta na maszynę szybszą, a działa wolniej - coś nie gra ;)
Zmierzajmy pomału do meritum. Atakując F5 uruchomiłem managera zadań i wszystkie możliwe znane mi aplikacje do monitoringu pracy systemu i starałem się znaleźć, gdzie jest "wąskie gardło". Od razu piszę: wykluczyć możemy technologie typu intel speedstep - procesor spięty jest na sztywno na 80 i więcej procent w biosie. I tak na dobrą sprawę niewiele udało mi się ustalić. Zerknijcie na te dwa zdjęcia - pierwsze z laptopa-serwera, który działa wolniej a drugi z PC-serwera, który działa bardzo szybko. Zdjęcia wykonane są po minucie atakowania F5 w sprzedaży detalicznej:
LAPTOP
[url=http://fotozrzut.pl/][img]http://fotozrzut.pl/zdjecia/113ac7d3a4.png[/img][/url]
PC
[url=http://fotozrzut.pl/][img]http://fotozrzut.pl/zdjecia/ea0d1d88fe.png[/img][/url]
I dodam jeszcze jedno - wynik z crystaldisk na laptopie wykluczający "wąskie gardło" w postaci SSD lub obsługi SATA (tak wiem, wynik niewiarygodny, ale nowe SSD Plextora M6P z funkcją Plextrubo która - z tego co wiem - używa pamięci ram komputera jako cache HDD robi robotę):
[url=http://fotozrzut.pl/][img]http://fotozrzut.pl/zdjecia/90ea981fad.png[/img][/url]
Co widać na wykresach:
Na wykresie CPU niebieską linią zaznaczone jest taktowanie procesora (100% znaczy że speedstep nie jest tu kłopotem bo procesor faktycznie pracuje na 2,4GHz), zieloną linią widnieje obciążenie procesora (które jak widać "stoi" przy 50%, ale w miarę jednakowo na obydwu komputerach, więc nie robię z tego problemu - najwidoczniej darmowe SQL na którym "stawiany" jest subiekt nie potrafi obsłużyć dwurdzeniowego procesora na maksimum, tylko jeden rdzeń na 100% co daje nam dokładnie połowę użycia), a pomarańczona linia pokazuje ile procent procesora używa proces LSASS, który tak bardzo chciałbym winić za wolne działanie ale nie potrafię. Otóż z tego co wywnioskowałem aplikację, które powodują łącznie 50% obciążenia procesora są dwie: LSASS w połączeniu z SQLSRVR - z tym że na komputerze stacjonarnym LSASS zjada 5%, a SQLSRVR 45%, a na laptopie LSASS zjada 35% przez co SQLSRVR ma tylko 15% do dyspozycji. I tutaj być może jest problem, ale nie potrafię wywnioskować jak i dlaczego LSASS zjada tak dużo zasobów na moim laptopie Jak widać na końcu wykresu, gdy komputer przestaje być atakowany F5 - jeden i drugi proces przestają obciążać procesor.
To co widać na dyskach w obydwu przypadkach - nie mają wiele roboty. Pamięć tak samo - jest jeszcze w zapasie.
Interesuje mnie za to wykres SIEĆ i prawdopodobnie tutaj jest problem. Otóż atakując F5 na laptopie - mimo, że wszystko dzieje się wewnątrz jednego komputera - wskaźnik użycia sieci w Windowsowym Monitorze zasobów pokazuje użycie sieci na poziomie 50Mb/s i nie chce więcej. Tak jakby to był dławik całego procesu. Na komputerze stacjonarnym ta linia jest wyżej - bo na poziomie 100Mb/s. I tutaj właśnie zgubiłem trop. Co, jak i dlaczego. Ja to widzę tak, analizując ten ruch "sieciowy" to wynika, że ruch odbywa się pomiędzy dwoma aplikacjami na jednym komputerze - pomiędzy procesem SUBIEKT oraz procesem SQLSRVR. Pytanie brzmi czy to faktycznie jest jakieś "wirtualne" połączenie sieciowe, czy tak to widzi komputer i czy ewentualnie gdzieś jest do ustawienia coś, to takie ograniczenie może powodować? A możę problem jest gdzie indziej? I dlaczego LSASS zjada tak dużo czasu procesora na laptopie? czy to może być spowodowane tym, że czeka na wynik z "sieci"?
Proszę o jakąkolwiek jak to ugryźć, jak to diagnozować każdego, kto przeczytał ten temat i ma jakikolwiek pomysł...
P.S. Żeby było śmieszniej: komputer ma kartę sieciową 100mbps a laptop 1gbps ;) Tak wiem, że to nie jest połączenie sieciowe, ale piszę tylko po to, żeby Was upewnić w przekonaniu, że sieć to nie sieć, tylko jakieś ruchy między aplikacjami w komputerze :)