Skocz do zawartości

Problemy z funkcjonowaniem Sello - powolna synchronizacja z Navireo

Polecane posty

Mam problem u jednego z klientów pracujących na Navireo z synchronizacją oraz ogólnie pracą Sello.

Panie Bartku proszę o pomoc w kwestii zrozumienia mechanizmów synchronizacji oraz optymalnych ich ustawień, aby klient mógł wrócić do normalnej ludzkiej pracy.

Teraz ze względu na długości trwania niektórych operacji praca jest praktyczne niemożliwa i strasznie uciążliwa.

Pracujemy w następujący sposób.

Towary wprowadzane są w Navireo. Dodawane są tam zdjęcia. Właściwie tylko miniaturka, ponieważ reszta zdjęć leci już z Navireo na FTP i jest doklejanych jako galeria do opisu HTML w Navireo (pole tw_Charakter).

Towary dodawane/aktualizowane są w ciągu dnia przez kilku użytkowników i tworzone są z nich później aukcje. I tu pojawia się problem.

Synchronizacja towarów.

Co się dzieje podczas tego procesu? Staram się go zrozumieć aby móc spróbować zoptymalizować.

Analizując ruch od strony bazy danych wygląda na to, że weryfikowane są towary z Sello pod kątem zmian w Navireo.

Nie wiem czy wszystkie i jak to konkretnie wygląda, ale na pierwszy rzut oka wygląda jakby Sello wykonywało taką synchronizację następująco dla każdego kolejnego towaru:

- Pobiera jego ID w systemie zewnętrznym

- Sprawdza datę ostatniej synchronizacji towarów w Sello

- Sprawdza czy towar był zmieniony w Navireo głównie w tabeli tw_Zmiana

- Sprawdza pola własne

W przypadku jeżeli zostaną wykazane zmiany w tabeli tw_Zmiana przeprowadzana jest synchronizacja.

 

Klient ma ponad 40000 towarów w Sello (baza około 5GB) i synchronizacja trwa ponad 45 minut, mimo że np. w tym czasie zostaje dodanych 5 towarów, a 10 zaktualizowanych, lub też 0.

W tym czasie zostają zmodyfikowane kolejne towary w Navireo i zazwyczaj dopiero po kolejnych 45-90 minutach aktualne opisy są dostępne w Sello.

Wtedy też dopiero klient może przygotować aukcje do wystawienia co jest olbrzymim opóźnieniem.

Dodatkowo dziwne jest to, że operacja synchronizacji trwa zawsze podobną ilość czasu jakby Sello faktycznie leciało po wszystkich 40000 towarach.

Ostatnio została utracona informacja o dacie ostatniej synchronizacji (w tabeli ep__Registration w kolumnie pr_ItemSynch znajdował się NULL) Sello więc raczyło się pełną synchronizacją, która trwała jedyne 16 godzin (Serwer na dwóch Xeonach E5-2620 i 16GB ramu i pełny SQL 2014).

Kolejne dziwne jest to, że mimo wyłączenia synchronizacji towarów jest ona wykonywana przez Sello:

5aa37faccba67_Synchronizacja_mimo_wyczenia.png.1deb8e740d04a21db0484d7a04275024.png

 

To jest główny temat, który muszę rozwiązać.

Dodatkowo mam kilka pytań dodatkowych:

- Jak działa parametr Wysyłaj aukcje zaplanowane przez X minut.

  Ostatnio sporo aukcji zaplanowanych się nie wystawiało, i kolejna synchronizacja również tych aukcji nie wystawiła. Czy jeżeli było ustawione np. 30 minut i aukcja była zaplanowana na 21:00 to jeżeli przez jakąś inną synchronizacją aukcja nie została wystawiona i o 21:32 np. puszczę wysyłkę aukcji to pominie aukcję zaplanowaną na 21:00? Jak ustawić to optymalnie aby nie pomijało aukcji?

- Jak pobierane są parametry czasów ostatnich synchronizacji oraz kiedy ma nastąpić kolejna? Próbuję wymusić synchronizację pewnych rzeczy o konkretnych godzinach, ze względu na duże obciążenie i czasy wykonania.

Czy jeżeli np. chciałbym wymusić pobranie pełnych danych transakcji i formularzy pozakupowych o godzinie 22 to jeżeli przy włączonym Sello ustawię w tabeli pd_AutoSyncTimes:

- pp_SaleReceiveCounter = 0

- pp_LastSaleReceive = ustawię ticka na 21:29 tego samego dnia (ustawione pobieranie co 30 minut)

to czy Sello pobierze te dane? Czy program musi zostać uruchomiony ponownie lub parametry musiały by być zapisane z okna z ustawieniami? Sama zmiana w bazie zadziała?

 

Na ten moment tyle mi przychodzi do głowy i będę wdzięczny za każdą pomoc.

Link to postu

Tak z ciekawości zapytam, czy to Sello, które synchronizuje towary jest uruchomione na tym samym serwerze, gdzie stoi baza Navireo ?

 

Jeżeli nie - czy próbowaliście sprawdzić ile czasu zajmowałaby synchronizacja w takiej konfiguracji ?

 

Bo nic nie napisałeś na temat sieci łączącej Sello i server SQL.

Link to postu

Sieć w tym równaniu nie ma znaczenia. Zarówno na serwerze jak i na stanowisku klienckim znajdującym się w sieci zachowanie jest identyczne.

Ostatnio większość testów była wykonywana lokalnie na maszynie serwerowej i te 16 godzin pełna synchronizacja szła lokalnie na serwerze.

 

 

Link to postu

Pierwsze co robi Sello, to synchronizuje słowniki, sprawdza czy nie trzeba w Sello dodać jakiejś nowej wartości.

 

Dalej, przygotowuje listę towarów, które w Navireo uległy zmianie dokładnie tak jak to zostało opisane w pierwszym poście, posiłkując się tabelą tw_Zmiana.

Dodatkowo są też weryfikowane stany towarowe oraz ceny i to prawdopodobnie zajmuje tyle czasu. Przy kilku tysiącach towarów mechanizm działa dosyć szybko, dla tak dużych danych nie był on optymalizowany.

Aczkolwiek, pracujemy obecnie nad nowym mechanizmem synchronizacji danych, więc postaramy się uwzględnić tak wielkie bazy.

 

Kolejne dziwne jest to, że mimo wyłączenia synchronizacji towarów jest ona wykonywana przez Sello

 

Synchronizacja towarów jest wywoływana również po utworzeniu dokumentów.

 

Jeśli klient nie korzysta ze wszystkich 40k towarów, bo są np, jednorazowe, to można spróbować, czy wyłączenie w towarze Navireo znacznika "Do serwisu aukcyjnego" rozwiąże problem długiej synchronizacji. Sello nie bierze pod uwagę takich towarów. Ewentualnie może jakieś rozwiązanie polegające na dynamicznym zarządzaniu tymże znacznikiem po stronie Navireo tak aby sterować co konkretnie ma Sello w danej chwili zsynchronizować.

 

- Jak działa parametr Wysyłaj aukcje zaplanowane przez X minut.

  Ostatnio sporo aukcji zaplanowanych się nie wystawiało, i kolejna synchronizacja również tych aukcji nie wystawiła. Czy jeżeli było ustawione np. 30 minut i aukcja była zaplanowana na 21:00 to jeżeli przez jakąś inną synchronizacją aukcja nie została wystawiona i o 21:32 np. puszczę wysyłkę aukcji to pominie aukcję zaplanowaną na 21:00? Jak ustawić to optymalnie aby nie pomijało aukcji?

Tak, aukcja taka zostanie pominięta. Generalnie Sello wykonuje jedną operację w serwisie aukcyjnym w jednym czasie. Jeśli nie są pobierane dane z serwisu aukcyjnego ani nie trwa poprzednia synchronizacja to o 21 powinno wystartować wysyłanie aukcji przygotowanych przez Sello. Jednak może się zdarzyć, że trwa jeszcze wysyłanie poprzednio wybranych aukcji i mechanizm wysyłania nie zadziała o 21:00 ale np. o 21:14.

 

Jeśli zatem parametr jest ustawiony na 30 minut, to o 21:15 Sello podejmie próbę wysłania aukcji zaplanowanych na 21:00.  Jeśli minie godzina 21:30 a nadal aukcja się nie wystawi to Sello nie będzie próbować jej już wysłać. Mechanizm ten został wprowadzony właśnie po to, aby dać szansę aukcjom na wystawienie się pomimo trwających innych synchronizacji, ale też aby nie wystawiać aukcji niezgodnie z intencjami użytkownika. Czyli, żeby nie było sytuacji, że aukcje miały się pojawić pomiędzy 21-22 (Allegro i tak publikuje aukcje z opóźnieniem) a pojawiły się o 5 rano.

 

- Jak pobierane są parametry czasów ostatnich synchronizacji oraz kiedy ma nastąpić kolejna? Próbuję wymusić synchronizację pewnych rzeczy o konkretnych godzinach, ze względu na duże obciążenie i czasy wykonania.

Sello sprawdza te wartości co około minutę. Około oznacza, że nie jest to zawsze dokładnie minuta. Raz może to być 50s raz 1:31.

Samo wpisanie wartości do bazy powinno zadziałać.

 

Link to postu

To trochę tłumaczy w kwestii wiecznej synchronizacji towarów.

Jeżeli po utworzeniu dokumentów ponownie jest wyzwalana synchronizacja, to jest to właśnie czynnikiem praktycznie uniemożliwiającym pracę.

Skoro Sello ma nie brać pod uwagę towarów bez znacznika "Do serwisu aukcyjnego", spróbuję uruchomić jakiś mechanizm czyszczący / ustawiający znaczniki w danym momencie dla towarów posiadających stany na magazynie przeznaczonym do Allegro.

Powinienem zejść o około 50% towarów, może faktycznie wpłynie to pozytywnie na czasy synchronizacji.

Kiedy planowane są zmiany w mechanizmie synchronizacji? Za ile wersji jest szansa na wprowadzenie takich zmian?

Jeżeli mógłbym jakoś pomóc w kwestiach testów mechanizmu na dużych bazach, proszę dać znać, chętnie pomogę w miarę możliwości.

Swego czasu Sello bardzo kulało również w kwestii synchronizacji transakcji z Allegro, co również mieliśmy okazję już kiedyś przerabiać, całe szczęście ten temat działa już sprawniej.

Teraz mam firmę z inną specyfiką pracy, i tu z kolei duża ilość towarów daje się we znaki uniemożliwiając pracę:/

 

Mam jeszcze pytanie odnośnie powielonych słowników kategorii. Drzewko zawiera wiele identycznych. Wiem, że został udostępniony skrypt porządkujący takie duplikaty, ale co może być powodem zaistnienia takiej sytuacji? Jak ustrzec się przed czymś takim? Regularnie porządkować duplikaty (np. co dobę czyścić?))?

 

Jeszcze jeden temat, który bardzo by się przydał a może nie zauważyłem takiej możliwości. Czy istnieje szansa na wykorzystanie pola własnego (najlepiej zewnętrznego) jako tytułu aukcji?

A jeszcze lepiej jako kategorię (na podstawie id kategorii) lub wartość dla pola specyficznego:) W dużym skrócie np. jeżeli znajdzie kategorię o danym fid niech wybierze ją dla aukcji, lub dla specyficznych jeżeli znajdzie w combo pola specyficznego podaną wartość tekstową niech Sello wybierze jej id w innej sytuacji nie ma wybranej wartości dla danej aukcji. Wartości tekstowe specyficznych w wielu przypadkach się nie zmieniają jedynie ich id. A czasami trzeba je ponownie wybrać tak jak i kategorię.

Rozważam przeniesienie wyboru tych pól w oparciu o aktualizowane z Allegro słowniki z bazy Sello do Navireo. Największymi problemami jest jednak tytuł aukcji, kategoria oraz specyficzne (i to dosłownie 5-10 specyficznych). Dopóki aukcja nie zostanie utworzona nie mogę nic zrobić. A tworząc aukcję i tak ktoś musi wybrać kategorię i specyficzne. Niestety wybór dużej ilości pól specyficznych ma spory wpływ na skuteczności sprzedaży:/

A jakby Sello wrzucało tworząc aukcję wartości tytułu (o ile z tytułem można sobie częściowo poradzić), kategorii czy specyficznych na podstawie pól własnych, wszystko by się samo robiło. Wystarczyło by przygotować dane towaru do aukcji tylko raz w jednym miejscu bez dopełniania już w aukcji, i nie stosując przy tym tysiąca szablonów:)

W Navireo i tak mam okno towaru zupełnie zmienione. Nie korzystam z interfejsu oryginalnego, przez co wprowadzenie towaru w jednym oknie z opisami html oraz zdjęciami wrzucanymi od razu na serwer generuje mi kompletny opis, a dodatkowo wszystko w jednym okienku widoczne od razu i nie obciąża zdjęciami bazy danych.

Możliwość wykorzystania w tych obszarach Sello w jakikolwiek sposób pól własnych czy to wewnętrznych, zewnętrznych czy SQLowych bardzo mocno usprawniło by wystawianie aukcji. Można by zadbać o automatyzację wypełniania specyficznych bez wielokrotnego ręcznego klikania.

Z częścią tych rzeczy radzę sobie aktualnie skryptami, ale fajnie było by się wyzbyć konieczności odpalenia skryptu przez wystawieniem aukcji:)

Możliwość wykorzystania pól własnych ograniczająca się tylko do opisu, przynajmniej dla mnie w danej chwili ma znikomą użyteczność.

Wiem, że sprawa kategorii i specyficznych ma znikomą szansę na realizację ze względu na olbrzymią złożoność problemu. Ale może w kwestii wykorzystania pól własnych w tytule aukcji coś da się zrobić?

Link to postu
Kiedy planowane są zmiany w mechanizmie synchronizacji? Za ile wersji jest szansa na wprowadzenie takich zmian?

Sporo jest do zrobienia, bo w zasadzie przepisujemy mechanizm od nowa. W tej chwili dokładny termin trudno określić, ale powinien być to pierwszy kwartał 2017.

W nowym mechanizmie kładziemy duży nacisk na kwestie wydajności i zminimalizowania wykonywania operacji do minimum.

 

Jeżeli mógłbym jakoś pomóc w kwestiach testów mechanizmu na dużych bazach, proszę dać znać, chętnie pomogę w miarę możliwości.

W razie czego odezwiemy się.

 

 

Mam jeszcze pytanie odnośnie powielonych słowników kategorii. Drzewko zawiera wiele identycznych. Wiem, że został udostępniony skrypt porządkujący takie duplikaty, ale co może być powodem zaistnienia takiej sytuacji? Jak ustrzec się przed czymś takim? Regularnie porządkować duplikaty (np. co dobę czyścić?))?

Nie jesteśmy do końca pewni co powoduje ten problem, bo trudno go uchwycić na żywo. Zaczął on się występować w pewnym momencie, gdzie w samym Sello nie było żadnych modyfikacji pobierania kategorii. Można zatem wnioskować, że błędne (zdublowane) dane pochodzą z Allegro. Za rękę jednak nikogo nie złapaliśmy. Czy duble kategorii powstają zatem codziennie? Czy to są zawsze te same kategorie czy różnie?

 

Czy istnieje szansa na wykorzystanie pola własnego (najlepiej zewnętrznego) jako tytułu aukcji?

Oczywiście, wystarczy wpisać w tytuł aukcji w szablonie [Towar::PWZ::nazwa_pola_z_tytulem_aukcji]. Obok pola brakuje jeszcze standardowego drzewka tagów, jest tam obecnie pozostałość po poprzednim mechanizmie tagów, ale dorobimy je wkrótce. Pole samo w sobie obsługuje normalnie nowe tagi wraz z modyfikatorami.

 

Niestety kategorii oraz atrybutów specyficznych jeszcze nie da się w ten sposób obsłużyć. Mamy to w planach, jednak ze względu na inne pilne potrzeby jesteśmy zmuszeni przesuwać realizację tego zagadnienia.

 

A jakby Sello wrzucało tworząc aukcję wartości tytułu (o ile z tytułem można sobie częściowo poradzić), kategorii czy specyficznych na podstawie pól własnych, wszystko by się samo robiło

Wiemy o tym i do tego dążymy. Nawet mamy w planach podobną implementację, tylko zamiast fidów chcieliśmy użyć "magicznych" nazw pól własnych, które byłyby automatycznie mapowane na atrybuty specyficzne oraz ich wartości. Fid jest mało czytelny dla użytkownika, ale dopuszczam również i takie, alternatywne rozwiązanie.

 

 

 

Link to postu

Dziękuję za informacje i czekam z niecierpliwością na zmiany w mechanizmie synchronizacji.

Zobaczę może uda mi się jakoś sensownie to ustawić na aktualnym mechanizmie synchronizacji.

 

Wracając jednak jeszcze do mechanizmu synchronizacji transakcji i liczników.

Chcę wymusić pobieranie o danej porze pełnych danych o transakcjach.

Ustawiłem pobieranie transakcji co 15 minut.

Nie chcę aby Sello w ciągu dnia rozpoczęło pełne pobieranie ustawiłem więc Pobieraj pełne dane co: 99999.

I tu pojawiła się pewne niepewność bo coś nie działa do końca tak jak mi się wydawało.

W tabeli pd_AutoSyncTimes zostaje wpisana w pole pp_SaleReceiveCounter wartość 99999 a pp_LastSaleReceive ustawia ticka jako kolejne moment przeprowadzenia synchronizacji.

Czy w polu pp_SaleReceiveCounter wartość co każde pobieranie transakcji, co każdą zmianę wartości ticka w pp_LastSaleReceive nie powinna być zmniejszana dążąc do 0?

W momencie kiedy będzie to 0 przeprowadzić pełną synchronizację i po tym ponownie ustawić 99999?

Jeżeli tak to wygląda na to, że z jakiegoś powodu tak się nie dzieje. Chyba, że jednak wymagane jest ponowne uruchomienie programu, lub jakieś inne ustawienie ma jeszcze na to wpływ?

Aktualnie sytuacja wygląda tak, że w momencie ustawienia parametrów wpisane w licznik zostało 99999 i co 15 minut patrząc od strony bazy wartość ticka się zmienia (zmiana ticka nastąpiła już prawie 10 razy) ale licznik ciągle stoi na wartości 99999.

 

Aktualizacja:)

Po północy ustawiłem w liczniku 0. Ostatecznie rano w liczniku pojawiło się 99998. Niestety nie mam pojęcia czy użytkownicy nie uruchomili ponownie Sello.

Nie wiem, w którym momencie i czy w ogóle nastąpiła pełna synchronizacja danych.

 

Link to postu

Nie chcę aby Sello w ciągu dnia rozpoczęło pełne pobieranie ustawiłem więc Pobieraj pełne dane co: 99999.

 

Stwórz sobie użytkownika typowo synchronizacyjnego i ustaw go w parametrach pobierania o tu:

 

synch.png.850c9583211f2ec324e5576755fd3977.png

 

w harmonogramie windowsa zaplanuj zamykanie i otwieranie Sello na konkretnym użytkowniku.

Tym sposobem uzyskasz taki efekt jak chcesz, bez ręcznego przestawiania.

 

 

Link to postu
Stwórz sobie użytkownika typowo synchronizacyjnego i ustaw go w parametrach pobierania

Mam tak ustawione ale niestety nie mogę wykorzystać kolejnego stanowiska ze względu na licencjonowanie w przypadku Navireo oraz nie do końca się takie rozwiązanie sprawdza.

Klient ma kilka kont gdzie musi być również przeprowadzona synchronizacja towarów.

Każdy komputer odpowiada za synchronizację danego konta. Nie mogę wyłączyć żadnego stanowiska na noc, bo każde coś synchronizuje.

Próbowałem już tego rozwiązania i nie sprawdza się i generuje niestety dwa problemy:

- Po uruchomieniu z harmonogramu na innym stanowisku jeżeli szła synchronizacja transakcji pełny proces nie zawsze startował

- Proces startował z dużym opóźnieniem i zamknięcie Sello rano przed rozpoczęciem pracy następowało często w trakcie jeszcze prowadzonej synchronizacji

 

Najlepszym i najpewniejszym rozwiązaniem jest pod warunkiem, że by zadziałało kontrolowanie licznika.

Nie muszę odpalać kolejnego Sello tylko mówię już odpalonemu, że w danym momencie w liczniku jest 0 i wykonuje pełną synchronizację z dokładnością do 15 minut (w przypadku synchronizacji jak mamy ustawionej co taki czas). Później licznik ustawia się na 99999 i znów w ciągu dnia mi nie wykona. Tylko o konkretnej porze muszę w liczniku wstawić 0, a reszta sama powinna się zrobić.

Link to postu

Teoretycznie powinno to tak zadziałać, przy każdej próbie synchronizacji automatycznej jest ta wartość licznika zmniejszana i jeśli jest mniejsza lub równa 0 to wywoływane jest pełne pobieranie. Musi być również zaznaczona opcja Pobieraj pełne dane.

Link to postu
Teoretycznie powinno to tak zadziałać, przy każdej próbie synchronizacji automatycznej jest ta wartość licznika zmniejszana i jeśli jest mniejsza lub równa 0 to wywoływane jest pełne pobieranie. Musi być również zaznaczona opcja Pobieraj pełne dane.

Włączone jest automatyczne pobieranie co 15 minut.

Włączone jest pełne pobieranie co 99999 razy.

W liczniku nie zmniejsza się wartość.

Na innym stanowisku jednak działa ciągle Sello i to Sello właśnie prowadzi synchronizację. W momencie uruchamiania na nim pełna synchronizacja nie była wyłączona.

Może znacznik Pobieraj pełne dane jest odczytywany podczas startu programu i jego zmiana w trakcie pracy nie jest brana pod uwagę?

Link to postu

Przy starcie na pewno nie, ale niektóre wartości parametrów mogą być brane z cache uzupełnianego przy pierwszym odczycie. Patrząc pobieżnie na kod wydaje się, że te wartości są odczytywane z bazy ale musiałbym się temu przyjrzeć dokładniej. Dam znać, jak będę wiedział.

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ę...