AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Clientseitiges Performanceproblem nach Query-Update- Fehlersuche, wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Clientseitiges Performanceproblem nach Query-Update- Fehlersuche, wie?

Ein Thema von baurat · begonnen am 31. Jan 2012 · letzter Beitrag vom 3. Feb 2012
Antwort Antwort
baurat

Registriert seit: 20. Jan 2007
34 Beiträge
 
#1

Clientseitiges Performanceproblem nach Query-Update- Fehlersuche, wie?

  Alt 31. Jan 2012, 21:07
Datenbank: MySQL • Version: 5.1 • Zugriff über: Zeos
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
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#2

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

  Alt 31. Jan 2012, 21:09
Welche Delphi Version nutzt Du?

Seit XE ist ja der AQTime Profiler dabei, der sehr gute Ergebnisse liefert.
Lars
  Mit Zitat antworten Zitat
baurat

Registriert seit: 20. Jan 2007
34 Beiträge
 
#3

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

  Alt 31. Jan 2012, 21:18
Sorry: hab noch ein "uraltes" D6 prof...
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

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

  Alt 31. Jan 2012, 22:01
breakpoint setzen, durchsteppen.
In jeder Zeile in ein Logfile schreiben, mit Zeitstempel, a la "Zeile xy"

Vielleicht hast Du auch ein DisableControls irgendwo vergessen.
  Mit Zitat antworten Zitat
baurat

Registriert seit: 20. Jan 2007
34 Beiträge
 
#5

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

  Alt 2. Feb 2012, 16:30
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?
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#6

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

  Alt 2. Feb 2012, 17:09
Den Hinweis von Furtbichler hast Du aber gelesen?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

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

  Alt 2. Feb 2012, 17:53
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.

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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#8

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

  Alt 2. Feb 2012, 21:07
[...] Ich hätte ein .Open genutzt? [...]
Code:
procedure TQuery.Open;
begin
  Active := True;
end;
Ob das so einen großen Unterschied macht?...
  Mit Zitat antworten Zitat
baurat

Registriert seit: 20. Jan 2007
34 Beiträge
 
#9

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

  Alt 3. Feb 2012, 09:12
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...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:09 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