Announcement

Collapse
No announcement yet.

TQuery: Wie messe ich die Dauer einer SQL- Abfrage?

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

  • TQuery: Wie messe ich die Dauer einer SQL- Abfrage?

    Hallo,<BR><BR>
    ich will testen wie lange eine Abfrage mit TQuery dauert um Zeitunterschiede bei den Zugriffen auf eine locale und eine remote Datenbank festzustellen.<BR>
    Abfrage: einfacher JOIN der sich auf zwei Tabellen bezieht. Die Ergebnisse sollen mit TDBGrid angezeigt werden.
    Mein Quelltext sieht etwa so aus:<BR><BR><B>
    t1 = GetCurrentTime();<BR>
    dbComp->quQuery->Open();<BR>
    t2 = GetCurrentTime();<BR>
    dt = t2 - t1;<BR><BR></B>
    Die Abfragen dauert 2-3 Minuten, aber es werden bloß 30 msec angezeigt.<BR>
    Umgebung: C++Builder 5, Firebird 1.5, Windows XP.<BR>
    Mache ich was falsch?<BR><BR>
    MfG Dennis

  • #2
    Hi Dennis,

    verwende mal GetTickCount an Stelle von GetCurrentTime().

    MS SDK: The GetCurrentTime is obsolete. This function is provided only for compatibility with 16-bit versions of Windows...

    Grüße

    Joche

    Comment


    • #3
      Hallo Jochen,<BR><BR>
      ich habe <BR><BR><B>
      t1 = TimeToStr(Time()); oder<BR>
      t1 = GetCurrentTime(); oder <BR>
      t1 = GetTickCount();<BR>
      ...</B><BR><BR>
      ausprobiert- dasselbe Ergebnis. Bei der selben Abfrage liegen die Zeiten in msec- Bereich, obwohl bis die Daten in TDBGrid angezeigt werden einige Minuten vergehen. Messe ich vielleich die Zeit an der falschen Stelle oder hängt es irgendwie mit TDBGrid zusammen?<BR>
      <BR>Mfg Denni

      Comment


      • #4
        Hi Dennis,

        mit dem DBGrid kann das (eingentlich) nichts zu tun haben. Wird die Query 'prepared'? Wenn ja, an welcher Stelle? Sind in der Query aufwändig berechnete Felder enthalten? Ist es überhaupt das Query, das mit dem DBGrid verknüpft ist?

        Viele dumme Fragen, aber sonst weiß ich auch nichts mehr.

        Sorry Joche

        Comment


        • #5
          Hi Jochen, <BR><BR>
          die Query wird an der Stelle<BR><BR><B>
          dbComp->quQuery->Prepare();<BR>
          t1 = GetTickCount();<BR>
          dbComp->quQuery->Open();<BR>
          t2 = GetTickCount();<BR><BR></B>
          'prepared'. Query- Bsp.:<BR><BR><B>
          select t.vorname, t.nachname, p.gehalt<BR>
          from testadr t, p_daten p<BR>
          where t.vorname = 'Dennis'<BR><BR></B>
          Es gibt eigentlich keine schwerberechnete Felder. Was die Verknüpfung angeht war ich mir nicht sicher und habe es sogemacht:<BR>
          Tabelle <B>testadr</B> ist mit mit<B>TDataSource1</B> verknüpft.<BR>
          TQuery1->DataSource = DataSource1 und DBGrid1 ist mit Query1 (DBGrid1->DataSource = DataSource2) über TDataSource2 (DataSource2->DataSet = Query1) verknüpft.<BR>
          Die Ergebnisse der Abfrage werden richtig in DBGrid angezeigt aber es dauert zu lange.
          <BR><BR>
          MfG Denni

          Comment


          • #6
            Die meiste Zeit geht für das Prepare() drauf. Setzt mal t1 = ... vor das Prepare(). Oder werte die Zeit für das Prepare() und das Open() getrennt aus. Du wirst überrascht sein, die meiste Zeit braucht das Prepare() (was aber vollkommen korrekt ist).

            Die schlechte Performance kann aus einem ungünstigen Select resultieren. Je nachdem für welche Datenbank das ist, kann ich Dir da eventuell helfen...

            Joche

            Comment


            • #7
              Hallo Jochen,<BR><BR>
              du hast Recht- Prepare() nimmt die meiste Zeit in Anspruch. Jetzt habe ich brauchbare Messergebnisse bekommen. Das Problem lag auch an der obigen Abfrage. Die Abfrage an sich war sinnlos. Ich habe es mit Paradox- und Firebird-DB getestet. Mich hat es gewundert, dass bei der selben Abfrage unterschiedliche Anzahl der Datensätze rauskam. Mit einer sinnvollen Abfrage funktioniert alles korrekt. Ich habe festgestellt, dass Paradox um Faktor 25 langsamer wird, wenn sich die DB im Netzwerk befindet und Firebird bloß um Faktor 3. Welche Operationen an der Datenbank können auch noch die Geschwindigkeit beeinflüssen?<BR><BR>
              MfG Denni

              Comment


              • #8
                Sita,

                probier mal das hier: http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&oe=UTF-8&threadm=3cc5f2d3_2%40dnews&rnum=1&prev=/groups%3Fhl%3Dde%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26q%3Dmsecs%2BWeing%25C3%25A4rtner

                Gruß,<br>
                Ja

                Comment

                Working...
                X