Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Abfrage dauert zu lange unter Delphi (https://www.delphipraxis.net/183394-abfrage-dauert-zu-lange-unter-delphi.html)

Dumpfbacke 7. Jan 2015 08:05

Datenbank: Firebrid • Version: 2.5 • Zugriff über: IBX

Abfrage dauert zu lange unter Delphi
 
Hallo Leite,
ich habe hier ein Problem mit der Laufzeit einer SQL Abfrage

Hier die Abfrage:
Delphi-Quellcode:
Select Refernz,Eingang,StatusRein ,StatusRaus
From Material
where Eingang IS NULL and MaterialTyp not in ('Rohre')
and StatusRaus <> 'Auftrag noch nicht erzeugt' and Refernz is not NULL
Ein Index ist jewals auf den Felden Refernz, Eingang, StatusRaus und Materialtyp
Die Tabelle hat ca. 3,8 Mio Datensätze und das Ergebnis sind ca. 1 - 20 Datersätze.

Nun aber zum Problem.
Ich benutze hier eine TIBQuery um die Daten abzufragen. Wenn ich die Query im Objektinspektor bei Active auf True gestzt so dauert es ca. 8 Sekunden was auch in Ordnung ist. Wenn ich es nun in meinen Programm mache dauert es 5-8 Minten bis die Daten vorliegen. Vor dem Aktivieren Starte ich eine neue Transaction.
Was mache ich den falsch ? So langsam weiß ich nicht mehr weitere. Ich haben schon UniDirectional und BufferChuks geändert. Die Version von Delphi ist 7
Es kann doch kein Unterschied sein ob die im Abjektinspektor die Eigenschalt Active auf True setzte oder im Programm ?

Dejan Vu 7. Jan 2015 08:08

AW: Abfrage dauert zu lange unter Delphi
 
Und Du bist Dir ganz sicher, das es der gleiche Connection ist? Und andere Fallen gibt es auch nicht? Z.B. berechnete Felder oder irgendwelche Events?

Nersgatt 7. Jan 2015 08:09

AW: Abfrage dauert zu lange unter Delphi
 
Zitat:

Zitat von Dumpfbacke (Beitrag 1285688)
ich habe hier ein Problem mit der Laufzeit einer SQL Abfrage
[...]
Ich benutze hier eine TIBQuery um die Daten abzufragen. Wenn ich die Query im Objektinspektor bei Active auf True gestzt so dauert es ca. 8 Sekunden was auch in Ordnung ist. Wenn ich es nun in meinen Programm mache dauert es 5-8 Minten bis die Daten vorliegen.

Hängt an der Query noch irgendwas an Ereignissen im AfterOpen, AfterScroll, oder Ähnliches? Oder sind da noch Dinge dran gebunden, wo Ereignisse dran hängen, die lange dauern?

Jasocul 7. Jan 2015 08:25

AW: Abfrage dauert zu lange unter Delphi
 
Mach doch mal vor dem Open ein DisableControls und hinterher ein EnableControls.

TRomano 7. Jan 2015 08:52

AW: Abfrage dauert zu lange unter Delphi
 
Es sind halt auch 3.8 Mio records und er macht Stringvergeliche ohne Ende (auch noch mit IN('',...)) ... das kann je nach DBMS und DB-Server (hardware) etwas dauern.
Ich würde einfach mal die zeit messen oder mit einem Admin-Tool die Abfrage laufen lassen und sehen, wie lange das alles ohne das eventuelles Client-Gedönse (Delphi, Events) dauert.
Dann würde ich wissen, wo ich ansetzen muss ...

Uwe Raabe 7. Jan 2015 09:29

AW: Abfrage dauert zu lange unter Delphi
 
Zitat:

Zitat von TRomano (Beitrag 1285702)
wie lange das alles ohne das eventuelles Client-Gedönse (Delphi, Events) dauert.

Wir wissen bereits, daß es in der IDE ca. 8 Sekunden dauert:
Zitat:

Wenn ich die Query im Objektinspektor bei Active auf True gestzt so dauert es ca. 8 Sekunden was auch in Ordnung ist.

mjustin 7. Jan 2015 09:48

AW: Abfrage dauert zu lange unter Delphi
 
Zitat:

Zitat von Dumpfbacke (Beitrag 1285688)
Ein Index ist jewals auf den Felden Refernz, Eingang, StatusRaus und Materialtyp
Die Tabelle hat ca. 3,8 Mio Datensätze und das Ergebnis sind ca. 1 - 20 Datersätze.

Wenn die Query innerhalb von 8 Sekunden geöffnet wird, so heisst das meistens, dass nur der erste Datensatz da ist.
Zur Laufzeit werden auch die folgenden bis zu 19 Datensätzen aus den 3,8 Millionen angefordert, und bis die eintreffen, dauert es länger.
Beweis: in einem SQL Client Tool die gleiche Abfrage ausführen und bis zum Ende des Resultsets scrollen.

Dejan Vu 7. Jan 2015 10:17

AW: Abfrage dauert zu lange unter Delphi
 
Zitat:

Zitat von mjustin (Beitrag 1285720)
Wenn die Query innerhalb von 8 Sekunden geöffnet wird, so heisst das meistens, dass nur der erste Datensatz da ist.
Zur Laufzeit werden auch die folgenden bis zu 19 Datensätzen aus den 3,8 Millionen angefordert, und bis die eintreffen, dauert es länger.
Beweis: in einem SQL Client Tool die gleiche Abfrage ausführen und bis zum Ende des Resultsets scrollen.

Er spricht vom Objektinspektor. Ist das dann da auch so? Im OI dauert das Öffnen 8 Sekunden, im Programm wesentlich länger.

Trotzdem gute Idee. Hat mich schon manchen Haarbüschel gekostet...

TRomano 7. Jan 2015 10:32

AW: Abfrage dauert zu lange unter Delphi
 
Okay, dann hatte ich etwas überlesen. Ich wollte auch nur die grundlegende Herangehensweise bei solchen Problemen benennen.
Trotzdem sollte man immer alles betrachten (DB-Design, Protokolle, clientseitige Events).

Dumpfbacke 7. Jan 2015 13:18

AW: Abfrage dauert zu lange unter Delphi
 
Zitat:

Zitat von Dejan Vu (Beitrag 1285689)
Und Du bist Dir ganz sicher, das es der gleiche Connection ist? Und andere Fallen gibt es auch nicht? Z.B. berechnete Felder oder irgendwelche Events?

Ja so ist es. Es sind keine Events und keine berechnetet Felder vorhande.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz