Ankündigung

Einklappen
Keine Ankündigung bisher.

Query Byte Größe

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Query Byte Größe

    Nabend

    Gehe ich richtig der Annahme, dass ich hiermit die Größe eines Query ermitteln kann? Ist lengths = byte ? Ich spiele gerade etwas mit dem Mysql Query Cache und würde gerne Wissen wie groß meine Querys eigentlich sind.

    PHP-Code:
    error_reporting(E_ALL);
    ini_set("display_errors"1);


    $mysqli = new mysqli("localhost""user""pw""db");

    if (
    mysqli_connect_errno()) {
        
    printf("Connect failed: %s\n"mysqli_connect_error());
        exit();
    }

    $query="meinselect";
    $rowLength=0;
    if (
    $result $mysqli->query($query)) {

        while (
    $row $result->fetch_row()) {
            foreach (
    $result->lengths as $i => $val) {
                
    $rowLength += $val;
            }
        }
        
        
    $result->close();
    }
    echo 
    "\$rowLength = $rowLength";
    /* close connection */
    $mysqli->close(); 

  • #2
    Gehe ich richtig der Annahme, dass ich hiermit die Größe eines Query ermitteln kann?
    Die Doku ist da leider alles andere als hilfreich. In dem Sinne, einfach mal ausprobieren und schauen, was dazu paßt (obwohl ich nicht glaube, daß die Größe in Bytes angegeben ist).

    Kommentar


    • #3
      Hehe ja gut Probieren, aber gegen welche Referenz. Die Größe sind eigentlich Zeichen. Ist ein Zeichen gleich 1 Byte? Konnte dazu auch nichts finden.

      Kommentar


      • #4
        kommt da nicht nur die zahl der gefetchten zeilen raus? ändert sich dein $result in der while schleife ?
        um die länge des strings query zu erfahren lohnt wohl auch das : http://php.net/manual/de/function.strlen.php

        oder ists noch zu früh für mich?



        Kommentar


        • #5
          Ich verstehe auch nicht, was ericle da ermitteln möchte. Das lengths Attribut eines object(mysqli_result)enthält die Bytelänge der einzelnen Resultate, die aber auch einfach mit strlen ermittelt werden können, und hat nichts mit dem Querycache zu tun. Beispiel:

          PHP-Code:
          $mysqli = new mysqli('localhost'$user$password'test');
          $mysqli->set_charset("utf8");

          $sql "SELECT vorname, nachname FROM personen";
          $res $mysqli->query($sql);

          $row $res->fetch_assoc();

          //debug-Klasse s. Signatur
          debug::write($row$res->lengthsstrlen($row['nachname']));

          /*
          array (
            'vorname' => "Liese",
            'nachname' => "Müller",  //ü = 2 Byre
          )

          array (
            0 => 5,
            1 => 7,
          )

          7 [00000007h]

          */ 


          Das lengths in der Doku nicht weiter beschrieben ist wundert mich wenig. Ich selbst benutze Mysqli nicht.

          Kommentar


          • #6
            Zitat von ericle Beitrag anzeigen
            Ist ein Zeichen gleich 1 Byte? Konnte dazu auch nichts finden.
            https://dev.mysql.com/doc/refman/5.6...uirements.html

            Kommentar


            • #7
              Ok geht auch einfache.

              und hat nichts mit dem Querycache zu tun. Beispiel:
              Wieso?
              Mach mal select vorname, nachname from personen into outfile '/tmp/test.txt'; und schau dir die Größe an. Mit dem richtigen Zeichnsatz sollte 7 rauskommen....mehr oder weniger

              Kommentar


              • #8
                Ok ich erzähle quatsch.
                Dann muss man das Ergebnis wohl rausdumpen um die Größe zu ermitteln. Stringlänge zählen ist falsch.

                Danke.

                Kommentar


                • #9
                  Wenn du den Speicherbedarf eines mysqli_result Objektes abschätzen möchtest, mache folgendes:
                  PHP-Code:
                  $byte memory_get_usage(false);
                  $result $mysqli->query($sql);
                  var_dump(memory_get_usage(false)-$byte); 
                  Du wirst feststellen, das hier bedingt durch den Overhead mehr Bytes als die reinen Nutzdaten angezeigt werden.


                  Kommentar


                  • #10
                    Der Speicherbedarf eines Results in PHP, in einem Textfile oder einem SQL-Dump hat aber nix mit dem Speicherbedarf eins Eintrags im Querycache zu tun.

                    Kannst wohl eh nur "rumprobieren" mit der Größe des Caches und dir mit den Statuswerten (https://dev.mysql.com/doc/refman/5.1...ery-cache.html) einen Überblick verschaffen.
                    Wahrscheinlich musst musst auch deine Queries anpassen und/oder bestimmte Queries vom Cachen ausnehmen damit diese nicht den Cache zu müllen.

                    Das ist aber meiner Erfahrung nach die Mühe aber nicht wert.

                    Stell die Cache Größe nicht zu groß ein. Der Speicher steht halt für Wichtigeres (zb Indizes) nicht zur Verfügung.
                    Markiere Queries mit SLQ_NO_CACHE, wenn es keinen Sinn macht diese zu Cachen (zb für Tabellen, die sich oft ändern).
                    Vermeide sachen wie NOW(), FOUND_ROWS() (mehr dazu gibt's hier https://dev.mysql.com/doc/refman/5.1...operation.html) damit sie vom Cache profitieren können.

                    Der Query Cache ist nett, wenn er verwendet wird. Reißt es nun aber auch nicht raus, wenn man Performance-Engpässe hat.

                    Grüße.

                    Kommentar

                    Lädt...
                    X