mojaSymfonia FORUM
https://forum.mix-soft.pl/

Szybkość bazy danych
https://forum.mix-soft.pl/viewtopic.php?f=15&t=9884
Strona 1 z 1

Autor:  robert [ 2021-03-23, 23:26 ]
Tytuł:  Szybkość bazy danych

Cześć,

Sprawa dotyczy programu Handel 2.0

Napisałem dla klienta program na Androida dla jego przedstawicieli handlowych, który pozwala na odczyt w terenie zaległości klientów.

Prosta aplikacja która czyta z serwera REST dane.

Serwerem REST jest aplikacja na serwerze z bazą danych. Łączę się z bazą poprzez ODBC. Można powiedzieć że wszystko działa dość dobrze, poza jednym.

Standardowo każdy przedstawiciel widzi wszystkich swoich kontrahentów (aplikacja na start pobiera taką listę). Robię to bardzo prostym zapytaniem sql w którym pobieram kod kontrahenta z warunkiem z pola poledod2 (tam wrzucone mam przypisanie przedstawiciela do kontrahenta). Zapytanie wygląda następująco:
Kod:
select kod from KH where rodzaj = 3100 and poledod2 = 'tutaj_nazwa_przedstawiciela' order by kod


Takie pytanie wykonuje się dość szybko.

Jednak dzisiaj wpadłem na pomysł aby przedstawiciel mógł pobrać tylko listę swoich klientów którzy mają zaległości (dokładnie to jest wybór trybu pracy).

Takie dane pobieram z bazy PN:
Kod:
select d.khkod from PN d inner join KH k on d.khid = k.id where (d.typdk = 'FVS' or d.typdk = 'FVSW') and d.kwotawal > 0 and d.termin < Now() and k.poledod2 = 'tutaj_nazwa_przedstawiciela' GROUP BY d.khkod order by d.khkod


No i zaczęły się problemy. Na serwerze testowym jeszcze jakoś to działa, chociaż według mnie tragicznie ale na serwerze produkcyjnym do którego było podpiętych kliku klientów wynik był tragiczny. Gdy kliku przedstawicieli wpadło na pomysł odświeżenia listy kontrahentów z zaległościami prawie zabiło mi to bazę danych.

Sprzęt raczej wydala, niezły serwer Della z dobrymi komponentami, Pervasive 12 Workgroup (fakt że ten dołączany do Symfonii).

Takie pytanie na serwerze testowym (w tabeli PN jest trochę ponad 220 tys. rekordów więc nie jakoś strasznie dużo a w tabeli KH około 1,5 tys.) trwa około 2,2 sekundy.
Pomyślałem że to może być wina ODBC które jednak pośredniczy w tym zadaniu. Sprawdziłem więc pytanie na PSQL Control Center. Jest lepiej, pytanie trwa 1,8 sekundy.

Ktoś może powiedzieć że jest to w miarę ok.

Zrobiłem więc eksperyment, na tym samym serwerze postawiłem MS SQL 2017 w wersji express (więc niezbyt wydajne rozwiązanie). Zaimportowałem bazę klienta i sprawdziłem to samo zapytanie, na odpowiedź czekałem, uwaga ... 48 ms !!!

To jest przepaść.

No i teraz pytanie, czy pervasive jest aż tak mało wydajny w porównaniu z MS SQL czy to raczej wersja workgroup jest taka wolna?

Podzielcie się swoimi doświadczeniami.
Na dzisiaj myślę o napisaniu narzędzia które co kilka godzin będzie importowało dane do bazy MS SQL, fakt dane nie będą "najświeższe" ale za to nie będę się stresował lagami.

Pozdrawiam
Robert

Autor:  rafal [ 2021-03-23, 23:57 ]
Tytuł:  Re: Szybkość bazy danych

To jest Pervasive. unikaj Group by i warunków na nieindeksowanych polach.

Autor:  robert [ 2021-03-24, 00:35 ]
Tytuł:  Re: Szybkość bazy danych

chętnie bym to zrobił inaczej, nawet mocno się ucieszyłem że w tabeli KH są kolumny "stanpl" i "stannl" bo pomyślałem że w nich są trzymane zagregowane dane które mi są potrzebne, ale nie, pusto tam jest niestety.

Autor:  rafal [ 2021-03-24, 12:08 ]
Tytuł:  Re: Szybkość bazy danych

Niedługo Klient i tak będzie przechodził na Handel na SQL.

Autor:  robert [ 2021-03-24, 12:15 ]
Tytuł:  Re: Szybkość bazy danych

Rafale, jest coś czego nie wiem, możesz mnie oświecić? Klient ma oczywiście abonament (zresztą kupowany u ciebie) ale zainteresowałeś mnie mocno?

Strona 1 z 1 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/