Wir haben große Laufzeitverzögerungen bei SQL-Abfragen unter Delphi 4 in Verbindung mit dem Interbase-Server 5.5. Eine Abfrage benötigt z.B. im SQL-Explorer oder Marathon ca. 5 Sekunden, im Delphi-Client 3-4 Minuten. Die SQL-Abfrage steht in einem TQuery-Object, das zur Laufzeit erzeugt wird.
Announcement
Collapse
No announcement yet.
Langsame SQL-Abfragen unter Delphi
Collapse
X
-
Hallo,
aber wie sieht denn diese SQL-Abfrage aus (welche SELECT-Anweisung wird abgesetzt) und wieviel Datensätze werden zurückgeliefert? Wird wirklich der gleiche BDE-Alias und das gleiche Netzwerkprotokoll beim Zugriff auf die InterBase-Datenbank verwendet? Ist der Zeitunterschied auch wirklich auf dem gleichen Rechner feststellbar? Wenn ja, liegen dort eventuell mehrere BDE-Versionen rum. Sind mehrere GDS32.DLL-Versionen auf dem Rechner?
Wie sieht die Situation im SQL-Monitor konkret aus. Wann tritt die Zeitverzögerung auf? Beim Erstellen der Ergebnismenge (d.h. die Zeitspanne zwischen dem Abschicken der SELECT-Anweisung und dem ersten Fetch ist grösser) oder wird bereits für das Prepare eine spürbare Zeit benötigt. Oder dauert das Übertragen des Ergebnisses so lange?


Comment
-
Es werden mit der SELECT-Anweisung ca. 30 Felder ausgewählt und zwischen 500 und 700 Datensätze zurückgeliefert. Es wird sicher der gleiche Alias verwendet, es gibt nur eine BDE (5.10) und nur eine GDS32.DLL. Die Zeitverzögerung tritt bei FETCH auf. PREPARE habe ich nicht verwendet, da diese Abfrage nur einmal im Programm durchgeführt wird. Die große Zeitunterschied ist zwischen dem "Eintreffen" des ersten und dem des letzten Datensatzes der Ergebnismenge.
Meine Frage war eigentlich, ob generell die Abfragen in Delphi langsamer laufen als im SQL-Explorer / Marathon
Comment
-
Hallo Christian,
der SQL-Explorer nutzt die gleichen SQL Links-Treiber wie die Delphi-Anwendung. Wenn der Geschwindigkeitsunterschied zwischen der Delphi-Anwendung und dem InterBase-Tool <i>InterBase Windows ISQL</i> aufgetreten wäre, könnte man das ja auf die BDE schieben. Trotzdem muss es irgend einen Konfigurations-Unterschied geben. Entspricht im SQL-Monitor die Anzahl der gefetchten Datensätze der Anzahl der Datensätze in der Ergebnismenge? Wenn ja, schaufelt die Delphi-Anwendung alle Datensätze vom Server zum Client, während der SQL-Explorer nur die holt, die zur Zeit angezeigt werden. Wieviel Zeit braucht der SQL-Explorer, wenn auf den letzten Datensatz gesprungen wird? Wenn diese Zeit mit der Delphi-Zeit identisch ist, steht die Ursache fest.
Wird eventuell so etwas wie TQuery.RecordCount aufgerufen
Comment
Comment