Autor Wątek: Dziwna sytuacja z filtrami  (Przeczytany 1933 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline benyjacek

  • Aktywny użytkownik
  • ***
  • Wiadomości: 479
  • Reputacja +7/-0
Dziwna sytuacja z filtrami
« dnia: Marzec 12, 2023, 13:18:11 »
Witam

Czy spotkał się ktoś już z czym podobnym ? Mam takiego klienta u którego pojawił się ostatnio problem z szybkością działania Subiekta.
Najcześciej dzieje się to na zamówieniach od klienta. Problem polega na tym że jak wejdziemy w zamówienie (popraw)  i klikniemy zapisz proces ten trwa od 5 do 20 sekund.
Przejście z zamówień do np. faktur sprzedaży potrafi przywiesić program na kilkanaście sekund co ważne dzieje się tak nie na wszystkich stanowiskach. I teraz najciekawsze zauważyłem po paru dniach przyglądania się problemowi (testy sieci , wydajność serwera itp.)  że na stanowiskach których użytkownicy używają filtrów z okresu np. bieżący rok , bieżący kwartał pojawia się problem ale jak wybiorę okres nieokreślony problem od ręki znika zapisywanie po wejściu w dokument trwa moment to samo ładowanie listy dokumentów trwa dużo , dużo szybciej jak w wybranym filtrem. Ponowne wybranie filtra np. z bieżącego roku problem pojawia się od razu po wybraniu. Nie wiem dziwne to i nigdy bym nie zwrócić na to uwagi gdyby nie to że sam byłem tego  świadkiem i sam to testowałem. Wybranie okresu dla dokumentów nie określony sprawia że problem znika - powinno być odwrotnie. Poprosiłem użytkowników żeby przetestowali to pod tym kątem ale napisałem na forum może ktoś już miał coś podobnego ? 

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9234
  • Reputacja +1306/-21
  • Wersja programu: Najnowsza
Odp: Dziwna sytuacja z filtrami
« Odpowiedź #1 dnia: Marzec 12, 2023, 13:49:32 »
A zapytałeś profilera co ma do powiedzenia w tym temacie?
Sławek, Zduńska Wola

Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1282
  • Reputacja +47/-1
  • Wersja programu: Navireo
Odp: Dziwna sytuacja z filtrami
« Odpowiedź #2 dnia: Marzec 12, 2023, 15:04:43 »
Jakieś dodatki tam chodzą? Ktoś pamięta tam żeby co jakiś odbudować indeksy i statystyki?

Offline benyjacek

  • Aktywny użytkownik
  • ***
  • Wiadomości: 479
  • Reputacja +7/-0
Odp: Dziwna sytuacja z filtrami
« Odpowiedź #3 dnia: Marzec 12, 2023, 20:25:16 »
Dodatki jakie chodzą to generator kodów kreskowym. Indeksy i statystyki - tak pamiętamy o tym ostatnio było robione ze dwa tygodnie temu.
Profiler nie pomyślałem, poniżej przesyłam zawartość operacji które trwają nadłużej w momencie zapisu i przy wybranym filtrze bieżący rok:

Czas 23:03:37

Cytuj
SELECT Dok.dok_Id,Dok.statusreal,Dok.statusrez,Dok.dok_DataWyst,Dok.dok_Typ,Dok.dok_Podtyp,Dok.dok_NrPelny,Dok.dok_NrPelnyOryg,Adres.adrh_Nazwa,Dok.dok_KwWartosc,Dok.dok_Wystawil,Dok.zre_KwWartosc,Dok.dok_TerminRealizacji,Dok.pow_DataWyst,Dok.dok_Uwagi,Dok.dok_RodzajOperacjiVat,Dok.dok_Tytul,Dok.dok_Podtytul,Flagi.flg_Numer,FlagiWartosci.flw_CzasOstatniejZmiany,FlagaUzytk.uz_Identyfikator,Dok.dok_DefiniowalnyId,Dok.ss_PrzetworzonoZKwZD,CASE WHEN Dok.dok_SzybkaPlatnosc=1 AND Dok.dok_KwDoZaplaty > 0 THEN 1 ELSE 0 END AS dok_SzybkaPlatnosc,CASE WHEN dok_SzybkaPlatnosc = 1 AND dok_KwDoZaplaty > 0 THEN
CASE WHEN lsp_Status = 0 THEN 'Zapłacony'
WHEN lsp_Status = 1 THEN 'Wygenerowany'
ELSE 'Niewygenerowany' END
END as StatusSzybkiejPlatnosci
,FlagiWartosci.flw_Komentarz,FlagiWartosci.flw_IdFlagi,Flagi.flg_Text,Flagi.flg_Id,Dok.dok_TransakcjaId,Dok.dok_Status,Dok.dok_StatusEx, CASE WHEN DATEDIFF(day, Dok.dok_DataWyst, GETDATE()) > 15 THEN 1 ELSE 0 END _FW15, CASE WHEN DATEDIFF(day, Dok.dok_DataWyst, GETDATE()) > 25 THEN 1 ELSE 0 END _FW16 FROM vwDok4ZamGrid AS Dok LEFT JOIN adr_Historia AS Adres ON Dok.dok_OdbiorcaAdreshId=Adres.adrh_Id LEFT JOIN sl_Kategoria AS kat ON Dok.dok_KatId=kat.kat_Id LEFT JOIN fl_Wartosc AS FlagiWartosci ON Dok.dok_Id=FlagiWartosci.flw_IdObiektu AND flw_IdGrupyFlag = 8 LEFT JOIN pd_Uzytkownik AS FlagaUzytk ON FlagiWartosci.flw_IdUzytkownika=FlagaUzytk.uz_Id LEFT JOIN fl__Flagi AS Flagi ON FlagiWartosci.flw_IdFlagi=Flagi.flg_Id LEFT JOIN sl_FormaPlatnosci AS FormyPlatnosciKarta ON Dok.dok_KartaId=FormyPlatnosciKarta.fp_id LEFT JOIN sl_FormaPlatnosci AS FormyPlatnosciKredyt ON Dok.dok_KredytId=FormyPlatnosciKredyt.fp_id LEFT JOIN adr_Historia AS AdresPlatnik ON Dok.dok_PlatnikAdreshId=AdresPlatnik.adrh_Id LEFT JOIN dok_StatusWydruku AS StatusWydruku ON Dok.dok_Id=StatusWydruku.dsw_IdDokumentu WHERE Dok.dok_Typ = 16 AND Dok.dok_MagId = 1 and Dok.dok_DataWyst>= '20230101' AND '20231231' >= Dok.dok_DataWyst ORDER BY RTRIM(LEFT(Dok.dok_NrPelny, CHARINDEX(' ', Dok.dok_NrPelny, 0))) ASC, YEAR(Dok.dok_DataWyst) ASC, Dok.dok_Nr ASC

Czas 23:03:42

Cytuj
SELECT TOP(1)  NULL AS Dok_dok_Id, NULL AS Dok_statusreal, NULL AS Dok_statusrez, NULL AS Dok_dok_DataWyst, NULL AS Dok_dok_Typ, NULL AS Dok_dok_Podtyp, NULL AS Dok_dok_NrPelny, NULL AS Dok_dok_NrPelnyOryg, NULL AS Adres_adrh_Nazwa, IsNull(SUM(Dok.dok_KwWartosc),CONVERT(money,0)) AS SUMOF_Dok_dok_KwWartosc, NULL AS Dok_dok_Wystawil, IsNull(SUM(Dok.zre_KwWartosc),CONVERT(money,0)) AS SUMOF_Dok_zre_KwWartosc, NULL AS Dok_dok_TerminRealizacji, NULL AS Dok_pow_DataWyst, NULL AS Dok_dok_Uwagi, NULL AS Dok_dok_RodzajOperacjiVat, NULL AS Dok_dok_Tytul, NULL AS Dok_dok_Podtytul, NULL AS Flagi_flg_Numer, NULL AS FlagiWartosci_flw_CzasOstatniejZmiany, NULL AS FlagaUzytk_uz_Identyfikator, NULL AS Dok_dok_DefiniowalnyId, NULL AS Dok_ss_PrzetworzonoZKwZD, NULL AS Dok_UserDef, NULL AS Dok_UserDef, NULL AS FlagiWartosci_flw_Komentarz, NULL AS FlagiWartosci_flw_IdFlagi, NULL AS Flagi_flg_Text, NULL AS Flagi_flg_Id, NULL AS Dok_dok_TransakcjaId, NULL AS Dok_dok_Status, NULL AS Dok_dok_StatusEx FROM vwDok4ZamGrid AS Dok LEFT JOIN adr_Historia AS Adres ON Dok.dok_OdbiorcaAdreshId=Adres.adrh_Id LEFT JOIN sl_Kategoria AS kat ON Dok.dok_KatId=kat.kat_Id LEFT JOIN fl_Wartosc AS FlagiWartosci ON Dok.dok_Id=FlagiWartosci.flw_IdObiektu AND flw_IdGrupyFlag = 8 LEFT JOIN pd_Uzytkownik AS FlagaUzytk ON FlagiWartosci.flw_IdUzytkownika=FlagaUzytk.uz_Id LEFT JOIN fl__Flagi AS Flagi ON FlagiWartosci.flw_IdFlagi=Flagi.flg_Id LEFT JOIN sl_FormaPlatnosci AS FormyPlatnosciKarta ON Dok.dok_KartaId=FormyPlatnosciKarta.fp_id LEFT JOIN sl_FormaPlatnosci AS FormyPlatnosciKredyt ON Dok.dok_KredytId=FormyPlatnosciKredyt.fp_id LEFT JOIN adr_Historia AS AdresPlatnik ON Dok.dok_PlatnikAdreshId=AdresPlatnik.adrh_Id LEFT JOIN dok_StatusWydruku AS StatusWydruku ON Dok.dok_Id=StatusWydruku.dsw_IdDokumentu WHERE Dok.dok_Typ = 16 AND Dok.dok_MagId = 1 and Dok.dok_DataWyst>= '20230101' AND '20231231' >= Dok.dok_DataWyst

Czas 23:03:42

Cytuj
SELECT TOP(1)  NULL AS Dok_dok_Id, NULL AS Dok_statusreal, NULL AS Dok_statusrez, NULL AS Dok_dok_DataWyst, NULL AS Dok_dok_Typ, NULL AS Dok_dok_Podtyp, NULL AS Dok_dok_NrPelny, NULL AS Dok_dok_NrPelnyOryg, NULL AS Adres_adrh_Nazwa, IsNull(SUM(Dok.dok_KwWartosc),CONVERT(money,0)) AS SUMOF_Dok_dok_KwWartosc, NULL AS Dok_dok_Wystawil, IsNull(SUM(Dok.zre_KwWartosc),CONVERT(money,0)) AS SUMOF_Dok_zre_KwWartosc, NULL AS Dok_dok_TerminRealizacji, NULL AS Dok_pow_DataWyst, NULL AS Dok_dok_Uwagi, NULL AS Dok_dok_RodzajOperacjiVat, NULL AS Dok_dok_Tytul, NULL AS Dok_dok_Podtytul, NULL AS Flagi_flg_Numer, NULL AS FlagiWartosci_flw_CzasOstatniejZmiany, NULL AS FlagaUzytk_uz_Identyfikator, NULL AS Dok_dok_DefiniowalnyId, NULL AS Dok_ss_PrzetworzonoZKwZD, NULL AS Dok_UserDef, NULL AS Dok_UserDef, NULL AS FlagiWartosci_flw_Komentarz, NULL AS FlagiWartosci_flw_IdFlagi, NULL AS Flagi_flg_Text, NULL AS Flagi_flg_Id, NULL AS Dok_dok_TransakcjaId, NULL AS Dok_dok_Status, NULL AS Dok_dok_StatusEx FROM vwDok4ZamGrid AS Dok LEFT JOIN adr_Historia AS Adres ON Dok.dok_OdbiorcaAdreshId=Adres.adrh_Id LEFT JOIN sl_Kategoria AS kat ON Dok.dok_KatId=kat.kat_Id LEFT JOIN fl_Wartosc AS FlagiWartosci ON Dok.dok_Id=FlagiWartosci.flw_IdObiektu AND flw_IdGrupyFlag = 8 LEFT JOIN pd_Uzytkownik AS FlagaUzytk ON FlagiWartosci.flw_IdUzytkownika=FlagaUzytk.uz_Id LEFT JOIN fl__Flagi AS Flagi ON FlagiWartosci.flw_IdFlagi=Flagi.flg_Id LEFT JOIN sl_FormaPlatnosci AS FormyPlatnosciKarta ON Dok.dok_KartaId=FormyPlatnosciKarta.fp_id LEFT JOIN sl_FormaPlatnosci AS FormyPlatnosciKredyt ON Dok.dok_KredytId=FormyPlatnosciKredyt.fp_id LEFT JOIN adr_Historia AS AdresPlatnik ON Dok.dok_PlatnikAdreshId=AdresPlatnik.adrh_Id LEFT JOIN dok_StatusWydruku AS StatusWydruku ON Dok.dok_Id=StatusWydruku.dsw_IdDokumentu WHERE Dok.dok_Typ = 16 AND Dok.dok_MagId = 1 and Dok.dok_DataWyst>= '20230101' AND '20231231' >= Dok.dok_DataWyst

Czas 23:03:47

Cytuj
set implicit_transactions off SET NO_BROWSETABLE ON


Czyli jak widać proces zapisu Zamówienia które posiada kilka pozycji i włączony jest filtr bieżący rok trwa trochę powyżej 10 sekunf.
Z filtrem nieokreślony trwa to 2 sekundy. Te 10 sekund i tak jest w miarę szybko zacinki zdarząją się po około 30 sekund.

Niestety nie umiem czytać Profilera aby coś wywnioskować ale może wy coś podpowiecie.


Offline yemet

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1282
  • Reputacja +47/-1
  • Wersja programu: Navireo
Odp: Dziwna sytuacja z filtrami
« Odpowiedź #4 dnia: Marzec 12, 2023, 20:29:37 »
Przeklejasz zapytania do SSMS, oglądasz plan wykonania zapytania i sprawdzasz na czym zamula ;)

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17232
  • Reputacja +800/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Dziwna sytuacja z filtrami
« Odpowiedź #5 dnia: Marzec 13, 2023, 09:25:15 »
Czy spotkał się ktoś już z czym podobnym ?

Wiele, wiele razy, również wiele razy ten problem był poruszany na forum - typowy początek problemów wydajnościowych.

I teraz najciekawsze zauważyłem po paru dniach przyglądania się problemowi (testy sieci , wydajność serwera itp.)  że na stanowiskach których użytkownicy używają filtrów z okresu np. bieżący rok , bieżący kwartał pojawia się problem ale jak wybiorę okres nieokreślony problem od ręki znika zapisywanie po wejściu w dokument trwa moment to samo ładowanie listy dokumentów trwa dużo , dużo szybciej jak w wybranym filtrem. Ponowne wybranie filtra np. z bieżącego roku problem pojawia się od razu po wybraniu. Nie wiem dziwne to i nigdy bym nie zwrócić na to uwagi gdyby nie to że sam byłem tego  świadkiem i sam to testowałem. Wybranie okresu dla dokumentów nie określony sprawia że problem znika - powinno być odwrotnie.

Niby dlaczego powinno być odwrotnie ? Posłużę się takim przykładem - załóżmy, że Pan segregator z setkami dokumentów, ile czasu zajmie Panu rozpoczęcie przeglądania tych dokumentów, a ile czasu zajmie Panu znalezienie tylko jednego, konkretnego dokumentu, którego potrzebuje ?

Indeksy i statystyki - tak pamiętamy o tym ostatnio było robione ze dwa tygodnie temu.

Czyli nie pamiętacie, powinny być przebudowywane kiedy pojawiają się problemy, jeśli zaczynają się pojawiać częściej niż raz na dzień czy niczego nie zmieniają to trzeba szukać innych rozwiązań.

Czyli jak widać proces zapisu Zamówienia które posiada kilka pozycji i włączony jest filtr bieżący rok trwa trochę powyżej 10 sekunf.

Przede wszystkim nigdzie nie widać czasu zapisu zamówienia tylko czasy odświeżenia listy czy liczników listy.

Z filtrem nieokreślony trwa to 2 sekundy. Te 10 sekund i tak jest w miarę szybko zacinki zdarząją się po około 30 sekund.

Te 2 sekundy to przecież też nie jest szybko.

Niestety nie umiem czytać Profilera aby coś wywnioskować ale może wy coś podpowiecie.

Jak wspomniałem to często występujące problemy, nie poznaliśmy nawet liczy zamówień, ale pierwszy krok to usunięcie zbędnych zamówień, później pełny SQL i/lub optymalizacja lub http://forumsubiekta.pl/subiekt/faq-czyli-najczesciej-zadawane-pytania/msg75974/#msg75974.
Daniel, Białystok.

Forum Użytkownikow Subiekt GT

Odp: Dziwna sytuacja z filtrami
« Odpowiedź #5 dnia: Marzec 13, 2023, 09:25:15 »