Sam: Datenbankabfragezeit zählen, was am besten?

Moin,

ich zähle die Zeit, die einzelne MySQL Queries benötigen. Um da einen halbwegs richtigen Wert zu bekommen, reicht es die mysql_query() Aufrufe zu zählen, oder sollte ich auch mysql_fetch_array, mysql_num_rows, etc. mitzählen. ABer eigentlich ist das ja nur mehr Arbeit von PHP und die Datenbank hat hier nichts mehr zu tun, oder?

Gruß, Sam

  1. Moin!

    das einzige was die datenbank betrifft ist der query (mysql_query()). aber achtung wenn du eine soclhe konstruktion hast:

    $erg = mysql_query($sql);
    while($row = mysql_fetch_array($erg)){

    }

    wird in jedem schleifen durchlauf ein neuer query gesendet.

    tschüssi
    ichen

    1. $erg = mysql_query($sql);
      while($row = mysql_fetch_array($erg)){

      }

      Das schockt mich jetzt ein wenig, ich habe immer so gearbeitet und von der Geschwindigkeit der Skripte her, wirkt es nicht so, als ob jedes Mal ein neuer Query gesendet wird. Warum sollte es, erklär mir das bitte genauer. Es wird doch das Ergebnis des Querys in $erg gespeichert und dann dort abgerufen. Bist du sicher, dass du dich da nicht irrst?

      Gruß, Sam

      1. Moin!

        ich habe noch mal nachgelesen, und gesehen, dass ich mich tatsächlich geirrt habe. die schleife fragt ab, ob ein gültiges ergebnis in $erg vorhanden ist. das tut sie solange, bis keines mehr da ist. also wir der query doch nur einmal geschickt. sorry, irren ist menschlich.

        tschüssi
        ichen

        1. sorry, irren ist menschlich.

          Kein Problem :)

          Gruß, Sam

      2. Die Aussage ist falsch, es wird nicht jedes Mal die Abfrage gestellt.

        Um die Zeit zu messen, ist die MySQL-Konsole ganz gut geeignet, die gibt die Zeit mit aus. Wenn die Zeit zu hoch ist, einfach mal mit EXPLAIN angucken, woran es liegt.

        1. Die Aussage ist falsch, es wird nicht jedes Mal die Abfrage gestellt.

          Um die Zeit zu messen, ist die MySQL-Konsole ganz gut geeignet, die gibt die Zeit mit aus. Wenn die Zeit zu hoch ist, einfach mal mit EXPLAIN angucken, woran es liegt.

          Phu, ich dachte schon... :)

          Die Abfragen teste ich eh immer in PHPMyAdmin, jetzt möchte ich nur die Gesamtzeit und -zahl aller Qeries auf einer Seite anzeigen lassen. Das mache ich über eine Funktion, so kann ich auch leicht auf andere Datenbanken umsteigen.

          Gruß, Sam

          1. Die Aussage ist falsch, es wird nicht jedes Mal die Abfrage gestellt.

            Um die Zeit zu messen, ist die MySQL-Konsole ganz gut geeignet, die gibt die Zeit mit aus. Wenn die Zeit zu hoch ist, einfach mal mit EXPLAIN angucken, woran es liegt.

            Phu, ich dachte schon... :)

            Die Abfragen teste ich eh immer in PHPMyAdmin, jetzt möchte ich nur die Gesamtzeit und -zahl aller Qeries auf einer Seite anzeigen lassen. Das mache ich über eine Funktion, so kann ich auch leicht auf andere Datenbanken umsteigen.

            Gruß, Sam

            Ach so. Dann wäre doch eine Funktion, die mysql_query() ersetzt, nicht schlecht. Z.B.

            function mysql_measured_query($query)
            {
             GLOBAL $gesamtzeit;
             GLOBAL $gesamtqueries;
             $result=mysql_query($query);
             $gesamtqueries++;
             return $result;
            }

            Nun muss nur noch die Zeit gemessen und in $gesamtzeit akkumuliert werden. Habe aber gerade die genaue Funktionsweise von microtime() nicht im Kopf, aber o.g. Code dürfte doch als Denkanstoß reichen.

            Gruß,
            Thomas

            1. Für's Zeitmessen nimmst vorher und nachher nen Zeitstempel und ziehst diese nachher von einander ab.

            2. Genauso mache ich es auch. Habe eine Klasse in der sind alle (von mir benötigten) Datenbankfunktionen als eigene Funktionen (natürlich mit etwas anderem Namen) darin. Alle Funktionen, die direkt mit der Datenbank kommunizieren, erhalten diese Zahl- und Zeitzähler.
              Und wenn ich mal die Datenbank wechsle, brauche ich nur die jeweiligen Funktionsnamen ändern und das nur einmal. Ziemlich praktisch. :)

              Gruß, Sam

    2. 你好 ichen,

      $erg = mysql_query($sql);
      while($row = mysql_fetch_array($erg)){

      }

      wird in jedem schleifen durchlauf ein neuer query gesendet.

      So ein Schwachsinn.

      再见,
       CK

      --
      Sein oder nicht sein, das ist hier die Frage!
      http://wwwtech.de/