Thread View: pl.comp.lang.delphi.bazy-danych
14 messages
14 total messages
Started by Maciek Sanocki
Wed, 07 Mar 2018 18:34
dziwne zachowanie TQuery
Author: Maciek Sanocki
Date: Wed, 07 Mar 2018 18:34
Date: Wed, 07 Mar 2018 18:34
18 lines
731 bytes
731 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
Author: Roman Tyczka
Date: Wed, 07 Mar 2018 21:01
Date: Wed, 07 Mar 2018 21:01
21 lines
858 bytes
858 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
Author: wloochacz
Date: Wed, 07 Mar 2018 21:46
Date: Wed, 07 Mar 2018 21:46
34 lines
1170 bytes
1170 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
Author: Roman Tyczka
Date: Wed, 07 Mar 2018 21:54
Date: Wed, 07 Mar 2018 21:54
31 lines
1026 bytes
1026 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
Author: wloochacz
Date: Wed, 07 Mar 2018 22:30
Date: Wed, 07 Mar 2018 22:30
13 lines
392 bytes
392 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
Author: Maciek Sanocki
Date: Wed, 07 Mar 2018 22:58
Date: Wed, 07 Mar 2018 22:58
27 lines
1031 bytes
1031 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
Author: wloochacz
Date: Thu, 08 Mar 2018 01:42
Date: Thu, 08 Mar 2018 01:42
22 lines
765 bytes
765 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
Author: Mak
Date: Thu, 08 Mar 2018 07:27
Date: Thu, 08 Mar 2018 07:27
67 lines
2434 bytes
2434 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:ßrom; 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
Author: Mak
Date: Thu, 08 Mar 2018 07:58
Date: Thu, 08 Mar 2018 07:58
10 lines
231 bytes
231 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
Author: wloochacz
Date: Thu, 08 Mar 2018 13:09
Date: Thu, 08 Mar 2018 13:09
16 lines
407 bytes
407 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
Author: Mak
Date: Thu, 08 Mar 2018 13:17
Date: Thu, 08 Mar 2018 13:17
19 lines
646 bytes
646 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
Author: wloochacz
Date: Thu, 08 Mar 2018 15:07
Date: Thu, 08 Mar 2018 15:07
18 lines
548 bytes
548 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
Author: Maciek Sanocki
Date: Thu, 08 Mar 2018 18:41
Date: Thu, 08 Mar 2018 18:41
32 lines
1005 bytes
1005 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
Author: wloochacz
Date: Fri, 09 Mar 2018 10:16
Date: Fri, 09 Mar 2018 10:16
49 lines
1592 bytes
1592 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