Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Clientseitiges Performanceproblem nach Query-Update- Fehlersuche, wie? (https://www.delphipraxis.net/166142-clientseitiges-performanceproblem-nach-query-update-fehlersuche-wie.html)

baurat 31. Jan 2012 20:07

Datenbank: MySQL • Version: 5.1 • Zugriff über: Zeos

Clientseitiges Performanceproblem nach Query-Update- Fehlersuche, wie?
 
Hallo,
in meiner Datenmodul kleben viele Queries, die zur Laufzeit aktualisiert werden. In verschiedenen Forms sind DB-Komponenten (DBEdit etc, aber auch z.B. Jedi DBComboSearchBox).
"An sich" ist alles ok.
Nur bei einer Query passiert folgendes: das Programm steht für ca. 20 Sekunden, die CPU-Last schnellt nach oben, nichts geht mehr. Nach den 20 Sek. ist die Query durch, alles läuft normal weiter.

Jetzt bin ich auf der Suche nach der Ursache bzw. am Nachforschen, was da überhaupt passiert.
Ach so: die Query selbst ist's nicht, die braucht 0,... Sekunden wenn ich sie direkt ausführe.

In allen anderen Queries machen ich "eigentlich" nichts anderes, da läuft alles fix.

Vermutungen:
1) am Dataset der Query hängen irgendwelche Komponenten, die nach einem Update ständig neu über nachgeschaltete OnChange-Ereignisse oä andere Aktionen triggern; an der Query hängt insbes. eine JvComboSearchBox mit einem onchange
-> das habe ich soweit möglich händisch kontrolliert und mal alles deaktiviert, kein Unterschied
2) anderer Versuch: mit SendMessage(f_main.Handle, WM_SETREDRAW, 0, 0) die Aktualsierung zu unterbinden
3) über den asmProfiler versucht, etwas mehr Info zu bekommen - leider sagen mir die Ergebnisse nichts, ich kann keinen Bezug zu evtl. aufgerufenen Prozeduren finden

Jetzt bin ich wohl ziemlich mit meinem Latein am Ende. "Irgendetwas" läuft da massiv an, wenn die query neue Daten kriegt.

Wie komme ich der Ursache auf den Grund?

Vielen Dank für eure Tipps!

LG Heiko

daywalker9 31. Jan 2012 20:09

AW: Clientseitiges Performanceproblem nach Query-Update- Fehlersuche, wie?
 
Welche Delphi Version nutzt Du?

Seit XE ist ja der AQTime Profiler dabei, der sehr gute Ergebnisse liefert.

baurat 31. Jan 2012 20:18

AW: Clientseitiges Performanceproblem nach Query-Update- Fehlersuche, wie?
 
Sorry: hab noch ein "uraltes" D6 prof...

Furtbichler 31. Jan 2012 21:01

AW: Clientseitiges Performanceproblem nach Query-Update- Fehlersuche, wie?
 
breakpoint setzen, durchsteppen.
In jeder Zeile in ein Logfile schreiben, mit Zeitstempel, a la "Zeile xy"

Vielleicht hast Du auch ein DisableControls irgendwo vergessen.

baurat 2. Feb 2012 15:30

AW: Clientseitiges Performanceproblem nach Query-Update- Fehlersuche, wie?
 
Das hab ich gemacht. Ich weiß, dass die Anwendung genau nach query.active := true für 15 Sekunden einfriert und dann wieder ganz normal weitermacht. Und das passiert nach jedem Neuerzeugen der Query.

Ein comboSearchBox.enabled := false graut das angeschlossene Feld zwar aus, ändert aber leider nichts am Einfrieren.

Ich müsste irgendwie rausfinden, was intern von Auslösen dieses Events getriggert wird, dh. wer in Folge dessen alles aktiv wird... nur wie?

vagtler 2. Feb 2012 16:09

AW: Clientseitiges Performanceproblem nach Query-Update- Fehlersuche, wie?
 
Den Hinweis von Furtbichler hast Du aber gelesen?

p80286 2. Feb 2012 16:53

AW: Clientseitiges Performanceproblem nach Query-Update- Fehlersuche, wie?
 
Zitat:

Zitat von baurat (Beitrag 1148918)
Ich weiß, dass die Anwendung genau nach query.active := true für 15 Sekunden einfriert ...

Und wofür ist das gut?
Ich hätte ein .Open genutzt? (ich geh mal von einem 'Select ..' aus.

Zitat:

Zitat von baurat (Beitrag 1148918)
Und das passiert nach jedem Neuerzeugen der Query.

Was bitte ist ein "Neuerzeugen"?

Das kling alles irgendwie nach "jetzt suchen wir mal in aller Ruhe nach der richtigen DB..."

Gruß
K-H

vagtler 2. Feb 2012 20:07

AW: Clientseitiges Performanceproblem nach Query-Update- Fehlersuche, wie?
 
Zitat:

Zitat von p80286 (Beitrag 1148934)
[...] Ich hätte ein .Open genutzt? [...]

Code:
procedure TQuery.Open;
begin
  Active := True;
end;
Ob das so einen großen Unterschied macht?... :dancer2:

baurat 3. Feb 2012 08:12

AW: Clientseitiges Performanceproblem nach Query-Update- Fehlersuche, wie?
 
Ok, die Verwendung von open und active := true ist damit ja geklärt :)

"Neuerzeugen" ist aber sicher nicht der richtige Ausdruck - die Query wird einmal im Datenmodul erzeugt, aber zur Laufzeit immer wieder mit neuen Parametern an den DBServer geschickt. Und genau DAS dauert dann ewig - wobei die Query selbst nicht das Problem ist, die ist in 0.0xy Sekunden erledigt.

Zum Hinweis von Furtbichler:
Zitat:

breakpoint setzen, durchsteppen.
In jeder Zeile in ein Logfile schreiben, mit Zeitstempel, a la "Zeile xy"
Vielleicht bin ich zu unwissend, wie man mit dem Debugger richtig arbeitet - beim Durchsteppen springt er mir in den ganzen Datenbank-Klassen kreuz und quer, für mich wenig erhellend - und ich kann dabei nicht erkennen, wann ein Ereignis außerhalb des gerade betrachteten Quelltexts gefeuert wird (oder doch?).

Zitat:

Vielleicht hast Du auch ein DisableControls irgendwo vergessen.
Versucht: problemquery.disableControls, dann problemquery.open (;-)) und dann wieder problemquery.enableControls - leider das gleiche...


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 Uhr.

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