Skocz do zawartości

(1.37.1) Wydajność Sello przy rejestrowaniu wpłaty

Polecane posty

Jest tego typu problem, że przy rejestrowaniu wpłat w zakładce Transakcje->Oczekujące na płatność program zawiesza się na około jedną minutę. Liczba rejestrowanych jednocześnie wpłat to mniej więcej 20, ale przy mniejszej ich liczbie (1-10) tylko nieznacznie skraca się czas zawieszenia.

Oczywiście od pewnego czasu (już nie pamiętam, która to była wersja Sello) następuje synchronizacja z Allegro podczas tego procesu. Pytanie jest takie, czy to właśnie przez nią następuje zawieszenie Sello? Osoby obsługujące transakcje, zgłaszają że bardzo utrudnia im to pracę, gdyż w tym czasie nie mogą wykonać żadnej innej czynności do czasu "odwieszenia" programu.

Link to postu

Synchronizacja z Allegro jest opóźniona o 10s po zapisie transakcji. Można ją na chwilę wyłączyć w parametrach wysyłania i odbierania i sprawdzić czy ma ona wpływ na to przywieszanie.

Ile trwa odświeżenie listy transakcji po naciśnięciu klawisza F5? Czy są wybrane jakieś filtry w tym czasie?

Link to postu

Ok, testy zostały przeprowadzone i sytuacja wygląda następująco:

  1. Odświeżanie zakładek w transakcjach (F5) bez żadnych filtrów:
    • oczekujące na płatność, do paczek - 1 do 3 sekund
    • wszystkie - 10-15 sekund (przejście na zakładkę wszystkie po zatwierdzeniu wpłat i wydrukach trwa nieco dłużej, ale jest to 20-25 sekund)
  2. Rejestrowanie wpłat przy wyłączonej synchronizacji z Allegro trwa znacznie krócej i jest to około 10 sekund, co prawda program się zawiesza, ale maksymalnie na 2-3 sekundy z tego czasu 10 sekund. Różnica jest kolosalna w porównaniu do tego, gdy przy włączonej synchronizacji jest zawieszony na około 60 sekund.

Wyłączenie synchronizacji raczej nie wchodzi w grę, ponieważ jest ona wymagana. Najlepiej byłoby tak zrobić, żeby ten proces nie miał wpływu na responsywność systemu ? Dziwię się, że nikt na forum tego nie zgłasza, ale współpracownicy bardzo narzekają w ostatnim czasie właśnie na tą przypadłość. Sam nie miałem świadomości, dopóki się temu nie przyglądnąłem. Jedna minuta tzw. "freeza" wygląda okropnie...

Link to postu
5 godzin temu, Jakub *** napisał:

Najlepiej byłoby tak zrobić, żeby ten proces nie miał wpływu na responsywność systemu

Bo mieć nie powinien. Jest wykonywany w osobnym wątku i w zasadzie nie widzę powodu, dla którego miałby jakkolwiek wpływać na to co się dzieje z transakcjami. Chyba, że serwer SQL jakoś wymięka na tych dwóch procesach wykonywanych równolegle. Może podesłanie do nas bazy do testów by coś pomogło w zdiagnozowaniu przyczyny. Wątpię aby była to kwestia już samego wysyłania statusów więc to możemy wyłączyć (aby nie dotykać zamówień na Allegro) i analizować samo uruchamianie procesu aktualizacji. W razie czego proszę napisać na sello@insert.com.pl w tej sprawie.

Link to postu

Przeprowadziliśmy jeszcze raz testy tym razem na 3 stanowiskach klienckich. Do testu zostało wybranych 10 transakcji i mierzony czas od momentu kliknięcia zarejestruj wpłatę do czasu zakończenia synchronizacji z Allegro.

  1. laptop i5-7200u / 20GB RAM - czas około 33 sekundy
  2. laptop i5-2520m / 8GB RAM - czas około 33 sekundy
  3. desktop e3-1246 v3 / 16GB RAM - czas około 23 sekundy

Podczas testu sama rejestracja wpłaty trwała na wszystkich stanowiskach do 10 sekund, reszta czasu to synchronizacja z Allegro i oczekiwanie na odwieszenie komputera :). Zużycie procesora było na niskim poziomie (~1%). Wszystkie komputery były podłączone na zasadzie komputer->switch->router->serwer. Żeby wyeliminować możliwość opóźnień na tej ścieżce, podłączyliśmy laptopa z pozycji 1 w ten sposób laptop->router->serwer, ale nie zmniejszyło to czasu wykonywania.

Z bardziej istotnych rzeczy do odnotowania:

  • pracujemy na SQL Server Express 2017 (sam serwer to E3-1225 v3 / 20GB RAM / 240GB SATA SSD)
  • połączenie między komputerami a serwerem jest na kablu, porty 1Gb
  • baza zawiera dużo transakcji (wszystkie ~290k), nie była zmieniana od początku istnienia, ale raczej wszystko poza synchronizacją działa zadowalająco

W mojej ocenie istnieją tylko trzy możliwości dlaczego u nas się takie coś dzieje, a inni użytkownicy Sello nie zauważają tego problemu:

  1. ograniczenia SQL Server Express - z pewnością jest wielu użytkowników z większą bazą od naszej, ale bardzo możliwe, że mają oni wersję płatną, natomiast na mniejszych bazach nie jest to odczuwalne i dlatego nie ma wielu zgłoszeń
  2. możliwość wysyłania jakiś dodatkowych danych podczas synchronizacji (nie wiem, jakieś "zaległe") - dlatego u nas zamiast 10 wysyła się np. 70, co powoduje znaczne wydłużenie czasu synchronizacji
  3. oczekiwanie na zakończenie jakiegoś zadania - zastanawia bardzo niskie zużycie CPU, a mimo to program się zawiesza (wygląda jakby Sello na coś czekało, a te dane nie nadchodzą - np. nie otrzymało danych do odświeżenia grida, bo select jest w jakiejś kolejce dopiero po wykonaniu synchronizacji z Allegro)
17 godzin temu, Bartosz Rosa napisał:

Może podesłanie do nas bazy do testów by coś pomogło w zdiagnozowaniu przyczyny.

Pewnie by pomogło, ale musiałbym dostać takie pozwolenie. Jeżeli już wszyscy nie wytrzymają, to pewnie wtedy :D

 

P.S.

Byłoby fajnie, gdyby ktoś jeszcze się wypowiedział ile czasu mu schodzi na oczekiwanie na zakończenie synchronizacji przy rejestracji wpłat dla 10 transakcji.

Link to postu

Aktualizacja statusu zamówienia to jest jedna z najszybszych aktualizacji, bo to jest tylko pojedynczy strzał do serwera API z minimalną ilością danych, do tego serwer nie zwraca żadnych danych, nie są one przetwarzane, nie są zapisywane w bazie ani nic z tych rzeczy. Zapis pojedynczej transakcji generuje tylko jedno zadanie aktualizacji statusu w Allegro, więc nie ma mowy tutaj o wysyłaniu jakichś zaległości.

Natomiast, ze względu na to, że zadania są generowane niezależnie przez zapis każdej transakcji, każde zadanie trafia do osobnej puli zadań. Pula zadań to jest taki pojedynczy zbiór zadań do wykonania, np. naciśnięcie pobrania transakcji generuje jedno zadanie, które sprawdza czy są nowe transakcje i do tej samej puli trafia potem cała lista zadań związanych z pobraniem danych konkretnej transakcji. Wykonywanie takiej puli zadań jest odzwierciedlone w pasku postępu na dolnej belce.

Natomiast w przypadku rejestracji wpłaty dla 10 transakcji każda z nich generuje osobną pulę i w każdej puli jest 1 zadanie. Więc to co może tutaj fizycznie stwarzać jakieś opóźnienie to albo generowanie tych pul, albo ich przetwarzanie/przełączanie jedna po drugiej.

 

Oczekiwanie na odświeżenie grida to również nie to, bo jak wspomniałem, aktualizacja statusów nie zwraca żadnych danych i Sello nic w bazie nie zapisuje. Dlatego zadanie to jest szybkie i proste w teorii. Więc sam problem musi leżeć gdzieś w obsłudze tych pul a nie w samym wykonaniu zadań aktualizacji.

Godzinę temu, Jakub *** napisał:

musiałbym dostać takie pozwolenie. Jeżeli już wszyscy nie wytrzymają, to pewnie wtedy

Jakby co, to wiadomo gdzie nas szukać :). Przesłanie bazy do nas wiąże się z podpisaniem/zaakceptowaniem umowy przekazania danych osobowych, więc jest RODO friendly, że tak powiem :), a nie jakoś pod stołem.

 

Po wprowadzeniu aktualizacji statusów pojawiło się kilka uwag, że występują problem z tworzeniem paczek - tak jakby w jakiś sposób te procesy ze sobą wchodziły w interakcje a nie powinny. Dlatego opóźniliśmy to wysyłanie o 10s w stosunku do zapisu transakcji i ewentualnego tworzenia paczki.

  • Lubię to 1
Link to postu
1 godzinę temu, Bartosz Rosa napisał:

Przesłanie bazy do nas wiąże się z podpisaniem/zaakceptowaniem umowy przekazania danych osobowych, więc jest RODO friendly, że tak powiem :), a nie jakoś pod stołem.

Haha, dobrze o tym wiedzieć :)

 

Ok, to jeszcze jedno pytanie, czy ten czas opóźnienia synchronizacji o 10 sekund można jakoś zmienić w bazie, czy jest zaszyty w kodzie? Jeżeli byłaby taka możliwość to można by ewentualnie jeszcze sprawdzić, czy wydłużenie go do np. 20 sekund by coś zmieniło.

Link to postu

Niestety zaszyty w kodzie. Ale można zrobić jeszcze tak, aby wyłączyć wysyłanie statusów, opłacić transakcje. Następnie włączyć wysyłanie statusów i dla tych wybranych transakcji z menu pod prawym klawiszem wywołać funkcję Aktualizuj status zamówienia w serwisie. W takim wypadku tworzona jest jedna pula zadań do wykonania ze wszystkimi aktualizacjami więc można porównać jak tutaj wygląda to czasowo. Czy trwa to jakoś specjalnie długo czy raczej dość szybko.

Link to postu

Przeczytałem dyskusję i dodam, że wysyłanie statusu przesyłek też coś się rozkleiło:
1454103045_Beztytuu.thumb.png.5344656a747fc1156081b4a694fce3dc.png

Tak wygląda obraz po wcześniejszym utworzeniu listów, tzn kliknięciu Paczki do InPost (4szt.) Niestety przesyłki się nie pojawiły w Sello - natomiast pojawiły się w Inpost Manager Paczek i z tamtąd pobierzemy - to nie problem - problem jest, że nie wiem jak mogę dodać do tych przesyłek w sello numery paczek - ręcznie ?
 

obraz.png

Link to postu
2 godziny temu, Kamil Kamil napisał:

Niestety przesyłki się nie pojawiły w Sello - natomiast pojawiły się w Inpost Manager Paczek i z tamtąd pobierzemy

A jakie statusy widnieją w takiej sytuacji przy paczkach? Chodzi o status w systemie kuriera., nie o status wysyłki numeru do Allegro.

Link to postu

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.
Uwaga: Twój wpis zanim będzie widoczny, będzie wymagał zatwierdzenia moderatora.

Użytkownik forum
Odpowiedz...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...