Ankündigung

Einklappen
Keine Ankündigung bisher.

Querygröße überprüfen

Einklappen

Neue Werbung 2019

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

  • Querygröße überprüfen

    Hallo,

    stehe gerade etwas auf dem Schlauch. Ich jage eine SQL-Query durch die Datenbank durch, wenn diese in ein Array geladen wurde, wird sie auf dem Memcache abgelegt.

    Leider kann Memcache nun mal maximal 1MB pro set ablegen. Nun möchte ich prüfen, wie groß meine Query schlußendlich ist. Wenn sie größer als 1MB ist, wird sie in eine Cache-File geschrieben.

    Nur wie prüfe ich die eigentliche Größe der Query?

    Vielen Dank im voraus.


  • #2
    PHP-Code:
    SELECT <your query here>
    INTO dbo.MyTempTable
    FROM 
    <query source>

    exec sp_spaceused 'MyTempTable'

    DROP TABLE MyTempTable 

    Kommentar


    • #3
      Bitte was? Das ist doch Humbug @select

      Die Query ist bereits im Array, diese Query wird auch gebraucht. Hier soll lediglich entschieden werden, wie Groß diese ist und ob sie im Memcache oder Filecache landet.

      Hiervon bräuchte ich die Größe:
      PHP-Code:
      $memcache->read($key

      Kommentar


      • #4
        Zitat von narc Beitrag anzeigen
        Hier soll lediglich entschieden werden, wie Groß diese ist und ob sie im Memcache oder Filecache landet.

        Hiervon bräuchte ich die Größe:
        PHP-Code:
        $memcache->read($key
        verstehe ich nicht:
        ist sie dann nicht schon im memcache, wenn du memcache->read machen kannst?

        Kommentar


        • #5
          PHP-Code:
          $memoryBefore memory_get_usage();
          Array_stuff();
          $arraySizeInMb = (memory_get_usage() - $memoryBefore) / 1024 1024
          Bitte was? Das ist doch Humbug @select
          Musst dich eben klarer ausdrücken.

          Eigentlich wäre ja
          PHP-Code:
          $querySize mb_strlen($query); 
          richtig gewesen.
          Relax, you're doing fine.
          RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

          Kommentar


          • #6
            Sorry wenn ich mich etwas missverständlich geäußert habe, @moma - da hast Du natürlich recht. Hatte Tomaten auf den Augen gerade.

            @VPh - das ist es, vielen Dank.

            PHP-Code:
            $memcache = new myMemcache(array('host'=>'127.0.0.1''port'=>11211));
            $key "live_" md5($query);
            //$key = $query;
            $result_cache = ($memcache) ? $memcache->read($key) : ''
             if (
            $result_cache ) { 

            Kommentar


            • #7
              Deine Query ist größer als 1 MB?
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Zitat von nikosch Beitrag anzeigen
                Deine Query ist größer als 1 MB?
                Why not? 2010 schrieb der Macher hinter http://explain.depesz.com/ zumindest von einem über 2,2 MB großen Ausführungsplan, also denkbar ist das schon ...
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar


                • #9
                  Zitat von nikosch Beitrag anzeigen
                  Deine Query ist größer als 1 MB?
                  Kann mir vorstellen das Query ziemlich lange brauch . Vermutlich steckt da hinter nicht nur ein SELECT * sondern auch diverse JOINS.

                  Kommentar


                  • #10
                    Jup die pendelt immer zwischen 800kb und 1.3MB :/

                    Kommentar


                    • #11
                      Zitat von narc Beitrag anzeigen
                      Jup die pendelt immer zwischen 800kb und 1.3MB :/
                      Dennoch komisch, daß Du die Abfragen cachen willst und nicht die Ergebnisse - aber egal.
                      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                      Kommentar


                      • #12
                        Viel problematischer wird die max_allowed_packet von MySQL werden, denn die liegt defaultmäßig bei 1MB...
                        http://dev.mysql.com/doc/refman/5.5/...too-large.html
                        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                        Kommentar


                        • #13
                          Zitat von lstegelitz Beitrag anzeigen
                          Viel problematischer wird die max_allowed_packet von MySQL werden, denn die liegt defaultmäßig bei 1MB...
                          http://dev.mysql.com/doc/refman/5.5/...too-large.html
                          Das wäre ja nicht das Problem:
                          The largest possible packet that can be transmitted to or from a MySQL 5.5 server or client is 1GB.
                          Was mich aber auch rätseln lässt:
                          Zitat von akretschmer Beitrag anzeigen
                          Dennoch komisch, daß Du die Abfragen cachen willst und nicht die Ergebnisse - aber egal.

                          Kommentar


                          • #14
                            Zitat von narc Beitrag anzeigen
                            Leider kann Memcache nun mal maximal 1MB pro set ablegen.
                            Memcache::setCompressThreshold oder Memcached::setOption mit Memcached::OPT_COMPRESSION dann kannst du je nach Art der Daten bis etwa 10 MB unkomprimierte Daten in den Memcache stecken.


                            Zitat von narc Beitrag anzeigen
                            Nur wie prüfe ich die eigentliche Größe der Query?
                            Die Größe vom Ergebnis bekommst du per raus indem du deine Daten mit der gleichen Funktion serialisierst wie es der Memcache-Client machen würde z.b.
                            PHP-Code:
                            strlen(serialize($data)) 
                            . Bei Memcached kannst du den serializer ändern und musst natürlich dann natürlich für die Ermittelung der Länge die identische Funktion verwenden.

                            Kommentar


                            • #15
                              Du solltest deinen Text einfach komprimieren, das dürfte dir einiges bringen!

                              Und nicht vergessen die Auslastung und Nutzung deines memcaches auch zu überwachen!: http://www.joocom.de/blog/memcache-s...emcachedadmin/

                              Kommentar

                              Lädt...
                              X