Announcement

Collapse
No announcement yet.

Langsame SQL-Abfragen unter Delphi

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Langsame SQL-Abfragen unter Delphi

    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.

  • #2
    Hallo,

    wie sieht diese SQL-Abfrage aus? Wird im Delphi-Programm irgend etwas anderes gemacht als im SQL-Explorer (explizite Transaktionen etc.)? Werden in der Delphi-Anwendung via TDatabase vorhandene BDE-Alias-Parameter überschrieben

    Comment


    • #3
      Die SQL-Abfrage habe ich über die Zwischenablage 1:1 kopiert. Im Delphi-Client werden keine Transactions gestartet. Im SQL-Monitor finde ich keine Hinweise auf die Zeitverzögerung

      Comment


      • #4
        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?
        &#10

        Comment


        • #5
          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


          • #6
            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


            • #7
              Es ist scheinbar tatsächlich so, daß der Delphi-Client sich alle Datensätze holt und der SQL-Explorer nicht. TQuery.RecordCount wird nicht aufgerufen, da diese Eigenschaft immer den Wert -1 hat ...
              Trotzdem vielen Dank für die Hinweise

              Comment

              Working...
              X