🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi.bazy-danych
14 messages
14 total messages Started by Maciek Sanocki Wed, 07 Mar 2018 17:34
dziwne zachowanie TQuery
#82918
Author: Maciek Sanocki
Date: Wed, 07 Mar 2018 17:34
18 lines
1744 bytes
Cześć
mam następujący problem:
w Query jest zapytanie w postaci select sum(kol1), sum(kol2 ) ... 
sum(kolx), typ from tabelka where data>dat1 and data<data2 group by typ

query zwraca ~1000 rekordow
jesli czyszcze casche sql serwera wykonanie query trwa ~20sek,
przetworzenie query, czyli zrobienie obiektow z pol i wrzucenie ich na 
liste twa ~100sek
kazde następne wykonanie tego query, jak juz plan wykonania jest w cache
trwa ~3sek, a przetworzenie kolejne ~5sek.
Pytanie jak przyspieszyć tego sql?
I ważniejsze, dlaczego jest taka duża różnica w czasie przetwarzania 
tego query?

---
Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast.
https://www.avast.com/antivirus
Re: dziwne zachowanie TQuery
#82919
Author: Roman Tyczka
Date: Wed, 07 Mar 2018 20:01
22 lines
1668 bytes
On Wed, 7 Mar 2018 18:34:58 +0100, Maciek Sanocki wrote:

> mam następujący problem:
> w Query jest zapytanie w postaci select sum(kol1), sum(kol2 ) ... 
> sum(kolx), typ from tabelka where data>dat1 and data<data2 group by typ
> 
> query zwraca ~1000 rekordow
> jesli czyszcze casche sql serwera wykonanie query trwa ~20sek,
> przetworzenie query, czyli zrobienie obiektow z pol i wrzucenie ich na 
> liste twa ~100sek
> kazde następne wykonanie tego query, jak juz plan wykonania jest w cache
> trwa ~3sek, a przetworzenie kolejne ~5sek.
> Pytanie jak przyspieszyć tego sql?
> I ważniejsze, dlaczego jest taka duża różnica w czasie przetwarzania 
> tego query?

Jaka baza, jaka biblioteka dostępowa? Ile jest rekordów w tej tabeli? I czy
w jakimś narzędziu bazodanowym to zapytanie SQLowe wykonuje się też długo?

-- 
pozdrawiam
Roman Tyczka
Re: dziwne zachowanie TQuery
#82920
Author: wloochacz
Date: Wed, 07 Mar 2018 20:46
35 lines
2391 bytes
W dniu 2018-03-07 o 21:01, Roman Tyczka pisze:
> On Wed, 7 Mar 2018 18:34:58 +0100, Maciek Sanocki wrote:
> 
>> mam następujący problem:
>> w Query jest zapytanie w postaci select sum(kol1), sum(kol2 ) ...
>> sum(kolx), typ from tabelka where data>dat1 and data<data2 group by typ
>>
>> query zwraca ~1000 rekordow
>> jesli czyszcze casche sql serwera wykonanie query trwa ~20sek,
>> przetworzenie query, czyli zrobienie obiektow z pol i wrzucenie ich na
>> liste twa ~100sek
>> kazde następne wykonanie tego query, jak juz plan wykonania jest w cache
>> trwa ~3sek, a przetworzenie kolejne ~5sek.
>> Pytanie jak przyspieszyć tego sql?
>> I ważniejsze, dlaczego jest taka duża różnica w czasie przetwarzania
>> tego query?
> 
> Jaka baza, 
MSSQL?

> jaka biblioteka dostępowa? 
> Ile jest rekordów w tej tabeli? 
Bez znaczenia.

> I czy w jakimś narzędziu bazodanowym to zapytanie SQLowe wykonuje się też długo?
Na pewno :D
Ty lepiej Maciek pokaż to zapytanie.
A na ślepo, to dodaj na końcu (jeśli to faktycznie MSSQL)
option(recompile)

I to poczytaj:
https://stackoverflow.com/questions/20864934/option-recompile-is-always-faster-why

-- 
wloochacz
Re: dziwne zachowanie TQuery
#82921
Author: Roman Tyczka
Date: Wed, 07 Mar 2018 20:54
32 lines
1922 bytes
On Wed, 7 Mar 2018 21:46:40 +0100, wloochacz wrote:

>>> mam następujący problem:
>>> w Query jest zapytanie w postaci select sum(kol1), sum(kol2 ) ...
>>> sum(kolx), typ from tabelka where data>dat1 and data<data2 group by typ
>>>
>>> query zwraca ~1000 rekordow
>>> jesli czyszcze casche sql serwera wykonanie query trwa ~20sek,
>>> przetworzenie query, czyli zrobienie obiektow z pol i wrzucenie ich na
>>> liste twa ~100sek
>>> kazde następne wykonanie tego query, jak juz plan wykonania jest w cache
>>> trwa ~3sek, a przetworzenie kolejne ~5sek.
>>> Pytanie jak przyspieszyć tego sql?
>>> I ważniejsze, dlaczego jest taka duża różnica w czasie przetwarzania
>>> tego query?
>> 
>> Jaka baza, 
> MSSQL?

Co prawda napisał "sql serwera", ale to niekoniecznie musi być SQL Server
;-)

>> jaka biblioteka dostępowa? 
>> Ile jest rekordów w tej tabeli? 
> Bez znaczenia.

Liczba rekordów jest bez znaczenia dla funkcji agregującej? Ciekawa teoria,
możesz przybliżyć szczegóły?
 
-- 
pozdrawiam
Roman Tyczka
Re: dziwne zachowanie TQuery
#82922
Author: wloochacz
Date: Wed, 07 Mar 2018 21:30
14 lines
1616 bytes
W dniu 2018-03-07 o 21:54, Roman Tyczka pisze:
/ciach/

> Liczba rekordów jest bez znaczenia dla funkcji agregującej? Ciekawa teoria,
> możesz przybliżyć szczegóły?

Przeczytaj posta...
Wg Ciebie liczba rekordów zmiana się przy każdym odpaleniu tego samego 
zapytania na tej samej bazie danych po czyszczeniu cache?

Ciekawa teoria, możesz przybliżyć szczegóły?

-- 
wloochacz
Re: dziwne zachowanie TQuery
#82923
Author: Maciek Sanocki
Date: Wed, 07 Mar 2018 21:58
27 lines
2468 bytes
W dniu 2018-03-07 o 22:30, wloochacz pisze:
> W dniu 2018-03-07 o 21:54, Roman Tyczka pisze:
> /ciach/
> 
>> Liczba rekordów jest bez znaczenia dla funkcji agregującej? Ciekawa 
>> teoria,
>> możesz przybliżyć szczegóły?
> 
> Przeczytaj posta...
> Wg Ciebie liczba rekordów zmiana się przy każdym odpaleniu tego samego 
> zapytania na tej samej bazie danych po czyszczeniu cache?
> 
> Ciekawa teoria, możesz przybliżyć szczegóły?
> 
z jakiegos powodu nie widzę posta od Roman Tyczka, ale doprecyzuję

liczba rekordow jest oczywiscie stala za kazdym razem,
nie wiem tylko dlaczego po oczyszczeniu caschu
przejscie przez query za pomoca while not query.eof ...
twa wielokrotnosc tego tego co bez czyszczenia caschu.
To ze po oczyszczeniu caschu query wykonuje się dluzej to oczywistosc
wynikajaca z tego ze nie ma wtedy planu wykonania, za kazdym nastepnym 
ten plan juz jest.

---
Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast.
https://www.avast.com/antivirus
Re: dziwne zachowanie TQuery
#82924
Author: wloochacz
Date: Thu, 08 Mar 2018 00:42
23 lines
1988 bytes
W dniu 2018-03-07 o 22:58, Maciek Sanocki pisze:
/ciach/

> liczba rekordow jest oczywiscie stala za kazdym razem,
> nie wiem tylko dlaczego po oczyszczeniu caschu
> przejscie przez query za pomoca while not query.eof ...
> twa wielokrotnosc tego tego co bez czyszczenia caschu.
> To ze po oczyszczeniu caschu query wykonuje się dluzej to oczywistosc
> wynikajaca z tego ze nie ma wtedy planu wykonania, za kazdym nastepnym 
> ten plan juz jest.

No to teraz podaj szczegóły, o które pytał Roman;
Jaka baza danych?
Jak się z nią łączysz?
Jakie komponenty?
Dane ściągasz paczkami z serwera czy wszystko od razu (FetchAll)?

Pokaż zapytanie i może nawet to otwieranie i iterację.

Po co czyścisz cache, przecież po coś on jest prawda?

-- 
wloochacz
Re: dziwne zachowanie TQuery
#82925
Author: Mak
Date: Thu, 08 Mar 2018 06:27
68 lines
3712 bytes
W dniu 08.03.2018 o 01:42, wloochacz pisze:
> W dniu 2018-03-07 o 22:58, Maciek Sanocki pisze:
> /ciach/
> 
>> liczba rekordow jest oczywiscie stala za kazdym razem,
>> nie wiem tylko dlaczego po oczyszczeniu caschu
>> przejscie przez query za pomoca while not query.eof ...
>> twa wielokrotnosc tego tego co bez czyszczenia caschu.
>> To ze po oczyszczeniu caschu query wykonuje się dluzej to oczywistosc
>> wynikajaca z tego ze nie ma wtedy planu wykonania, za kazdym nastepnym 
>> ten plan juz jest.
> 
> No to teraz podaj szczegóły, o które pytał Roman;
> Jaka baza danych?
> Jak się z nią łączysz?
> Jakie komponenty?
> Dane ściągasz paczkami z serwera czy wszystko od razu (FetchAll)?
> 
> Pokaż zapytanie i może nawet to otwieranie i iterację.
> 
> Po co czyścisz cache, przecież po coś on jest prawda?
> 
baza SQLSerwer 2008
do laczenia uzywam blibow ( wlasne firmowe komponenty ) ale jak 
probowalem zwyklego TQuery bylo to samo
liczba rekordow w tabelce 2200 ale na rzeczywistej bazie klienta moga 
byc miliony
czasy wykonania w narzedziach bazodanowych sa wlasciwie takie same jak w 
programie,
kawalek kodu:

tq:=TBQuery.create(nil);
   try
     tq.databasename:='PETER';

       tq.sql.add('SELECT SUM(BETRAG) AS UMNETTO, 
SUM(BETRAG+NACHLASSSUMME) AS UMBRUTTO, SUM(STATISTIKMENGE) AS SMENGE,');
       tq.sql.add('SUM(DECKUNGSBEITRAG) AS DB, TYP, DATUM, NRBELEGTYP 
FROM AVK120  WHERE ');
       tq.sql.add('DATUM>=:DAT_FROM AND DATUM<:DAT_TO  AND  NRBELEGTYP 
IN (20,21,31,40,41,241) ');
      tq.sql.add('GROUP BY TYP,  NRBELEGTYP, DATUM ');

     tq.parambyname('DAT_FROM').asdatetime:=dfrom;
     tq.parambyname('DAT_TO').asdatetime:=dto;

     tq.open;
     tq.FetchAll;
     tq.First;
     while not tq.eof do
     begin 
details:=TDataDetails.create(tq.FieldByName('DATUM').asdatetime,tq.fieldbyname('NRBELEGTYP').asinteger,tq.FieldByName('TYP').AsInteger, 
 
tq.fieldbyname('UMNETTO').asfloat,tq.FieldByName('UMBRUTTO').asfloat, 
 
tq.fieldbyname('SMENGE').asfloat,tq.FieldByName('DB').asfloat);
       tmplist.Add(details);
       tq.Next;
     end;
  finally
   tq.free;
  end;

cache czyszcze wylacznie dla testow
generalnie sytuacja jest taka, ze rano klent pierwszy raz odpala program 
i wczytanie i pokazanie danych zajmuje 2min, kazde nastepne odpalenie to 
ok 10sek, 95% czasu przypada na powyzszy kawalek kodu, z czego wiekszosc 
nie na same zapytanie a na petle z tworzeniem obiektow
Re: dziwne zachowanie TQuery
#82926
Author: Mak
Date: Thu, 08 Mar 2018 06:58
10 lines
1267 bytes

> A na ślepo, to dodaj na końcu (jeśli to faktycznie MSSQL)
> option(recompile)
> 
> I to poczytaj:
> https://stackoverflow.com/questions/20864934/option-recompile-is-always-faster-why 
> 
> 
dodalem, pomoglo, wielkie dzięki
Re: dziwne zachowanie TQuery
#82927
Author: wloochacz
Date: Thu, 08 Mar 2018 12:09
17 lines
1708 bytes
W dniu 2018-03-08 o 07:58, Mak pisze:
> 
> 
>> A na ślepo, to dodaj na końcu (jeśli to faktycznie MSSQL)
>> option(recompile)
>>
>> I to poczytaj:
>> https://stackoverflow.com/questions/20864934/option-recompile-is-always-faster-why 
>>
>>
> dodalem, pomoglo, wielkie dzięki
Na zdrowie.
Tylko bardzo Cię proszę, zrozum jak to działa i nie dodawaj na pałę 
wszędzie jak popadnie ;-)

-- 
wloochacz
Re: dziwne zachowanie TQuery
#82928
Author: Mak
Date: Thu, 08 Mar 2018 12:17
20 lines
1782 bytes
W dniu 08.03.2018 o 13:09, wloochacz pisze:
> W dniu 2018-03-08 o 07:58, Mak pisze:
>>
>>
>>> A na ślepo, to dodaj na końcu (jeśli to faktycznie MSSQL)
>>> option(recompile)
>>>
>>> I to poczytaj:
>>> https://stackoverflow.com/questions/20864934/option-recompile-is-always-faster-why 
>>>
>>>
>> dodalem, pomoglo, wielkie dzięki
> Na zdrowie.
> Tylko bardzo Cię proszę, zrozum jak to działa i nie dodawaj na pałę 
> wszędzie jak popadnie ;-)
> 
doksztalce sie :-)
co prawda to rozwiazuje tylko polowe mojego problemu ( na szczescie ta 
pilna ), bo program w zaleznosci od klienta dziala na roznych wersjach 
ms sql, oracla i informixa
Re: dziwne zachowanie TQuery
#82929
Author: wloochacz
Date: Thu, 08 Mar 2018 14:07
19 lines
1884 bytes
W dniu 2018-03-08 o 13:17, Mak pisze:
/ciach/

> doksztalce sie :-)
> co prawda to rozwiazuje tylko polowe mojego problemu ( na szczescie ta 
> pilna ), bo program w zaleznosci od klienta dziala na roznych wersjach 
> ms sql, oracla i informixa
Nie widzę związku, ponieważ Twój problem to problem ściśle powiązany z 
konkretną daną bazą danych.

PS.
Działa na różnych bazach i jest tak napisany?
Głębokie wyrazy współczucia...

I jak sobie poradzisz z tym option(recompile), bo to dyrektywa ważna 
tylko dla MSSQL?

-- 
wloochacz
Re: dziwne zachowanie TQuery
#82930
Author: Maciek Sanocki
Date: Thu, 08 Mar 2018 17:41
32 lines
2491 bytes
> W dniu 2018-03-08 o 13:17, Mak pisze:
> /ciach/
> 
>> doksztalce sie :-)
>> co prawda to rozwiazuje tylko polowe mojego problemu ( na szczescie ta 
>> pilna ), bo program w zaleznosci od klienta dziala na roznych wersjach 
>> ms sql, oracla i informixa
> Nie widzę związku, ponieważ Twój problem to problem ściśle powiązany z 
> konkretną daną bazą danych.
nie, taki sam efekt jest jak sie podlacze do oracla na takiej samej 
bazie danych ( w sensie zawartosci tabelek czoywiscie )


> 
> PS.
> Działa na różnych bazach i jest tak napisany?
> Głębokie wyrazy współczucia...
ale o co Tobie tu chodzi?

> 
> I jak sobie poradzisz z tym option(recompile), bo to dyrektywa ważna 
> tylko dla MSSQL?
rozpoznaje do jakiej bazy jestem podlaczony i odpowiednio modyfikuje 
sql, jak rozwiazac to z oraclem? nie wiem jeszcze, ale na to akurat mam czas

> 


---
Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast.
https://www.avast.com/antivirus
Re: dziwne zachowanie TQuery
#82931
Author: wloochacz
Date: Fri, 09 Mar 2018 09:16
50 lines
2902 bytes
W dniu 2018-03-08 o 18:41, Maciek Sanocki pisze:
> 
>> W dniu 2018-03-08 o 13:17, Mak pisze:
>> /ciach/
>>
>>> doksztalce sie :-)
>>> co prawda to rozwiazuje tylko polowe mojego problemu ( na szczescie 
>>> ta pilna ), bo program w zaleznosci od klienta dziala na roznych 
>>> wersjach ms sql, oracla i informixa
>> Nie widzę związku, ponieważ Twój problem to problem ściśle powiązany z 
>> konkretną daną bazą danych.
> nie, taki sam efekt jest jak sie podlacze do oracla na takiej samej 
> bazie danych ( w sensie zawartosci tabelek czoywiscie )
Hmmm... może i tak.
Ja się na Oracle nie znam i nie będę się wypowiadał.

>> PS.
>> Działa na różnych bazach i jest tak napisany?
>> Głębokie wyrazy współczucia...
> ale o co Tobie tu chodzi?
Uuuu... nie dogadamy się.

Takie klepanie jest przede wszystkim MEGA upierdliwe w utrzymaniu oraz...
A szkoda gadać.
Ale rozumiem Cię - o co mi chodzi, przecież działa.

>> I jak sobie poradzisz z tym option(recompile), bo to dyrektywa ważna 
>> tylko dla MSSQL?
> rozpoznaje do jakiej bazy jestem podlaczony i odpowiednio modyfikuje 
> sql, 

Ale jak, tak aby coś na kształt może?
case dbConnKind of
   dbOra = 'SQL for Oracle'
   dbMSSQL = 'SQL for MSSQL'
   dbInfX = 'SQL for Informix'
end;

I jeśli to coś podobne, to naprawdę nikt się nie zastanawiał nad tym jak 
zrobić to lepiej/inaczej?

Tylko mi nie pisz w stylu "o co ci chodzi? przecież 80% SQL jest 
identyczne, a więc w czym problem".

jak rozwiazac to z oraclem? nie wiem jeszcze, ale na to akurat mam
> czas
Pisałem jak wyżej...

-- 
wloochacz
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads