Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Performance Tuning

    speedy

    • Viel Schreiber
    • Beiträge: 3.214
    Performance Tuning
    Antwort #15 am: 17. Januar 2011, 19:04:43
    Hi Franky,

    es bleibt für mich trotzdem Punkt 1, der zunächst zu klären ist.
    Wie wir hier schon öfters gesehen haben, sind hier einige auf billigstem Hosting unterwegs - billig ist selten schnell.
    Wenns nur um die Nennung von "vServer" geht, gut der mag manchmal ausreichen, aber auch das ist abhängig vom Provider. Manche Provider haben es im Griff, manche nicht - stopfen die Server nur voll mit Kunden ;)

    Cookie

    • Fördermitglied
    • Beiträge: 274
    Performance Tuning
    Antwort #16 am: 17. Januar 2011, 20:10:05
    Hallo,

    danke für die vielen Tipps.

    Die Seite liegt auf einem dedicated Server bei 1und1 (Dual Core mit 2 GB RAM). Die Last auf dem Server ist aber eigentlich ok.

    Es laufen einige Cron Jobs, welche den Datenabgleich machen.

    Ich habe mit von 1und1 mal einen SlowQuery Dump der DB erstellen lassen. Den werde ich jetzt auch mal auswerten.

    Danke.
    Christian

    Cookie

    • Fördermitglied
    • Beiträge: 274
    Performance Tuning
    Antwort #17 am: 17. Januar 2011, 20:11:19
    Hallo,

    ich habe das Caching auf der Seite noch deaktiviert, damit der Performance Eindruck besser ist.

    Danke.
    Christian

    Cookie

    • Fördermitglied
    • Beiträge: 274
    Performance Tuning
    Antwort #18 am: 17. Januar 2011, 23:06:14
    Hallo,

    ich habe mal etwas gespielt.

    Komisch ist, dass die BOX manufacturers.php die Seite total ausbremst. Wenn ich die Box raus nehme, bringt das fast eine Sekunde. Obwohl ein Timestamp in der manufacturers.php nur eine Durchlaufzeit von ein paar ms anzeigt.

    DB Indexe bringen irgendwie nicht viel. Ich habe die SlowQuerys vom Provider mal angeschaut. Ein paar brauchen ziemlich lang, obwohl Indexe verwendet werden.

    Code: PHP  [Auswählen]
    SELECT distinct
                              p.products_id,
                              p.products_price,
                              p.products_model,
                              p.products_quantity,
                              p.products_shippingtime,
                              p.products_fsk18,
                              p.products_image,
                              p.products_weight,
                              p.products_tax_class_id,
                                              p.products_vpe,
                                              p.products_vpe_status,
                                              p.products_vpe_value,
                              pd.products_name,
                              pd.products_short_description,
                              pd.products_description
                                                    FROM products AS p
                                                    LEFT JOIN products_description AS pd ON ( p.products_id = pd.products_id )
                                                    LEFT OUTER JOIN products_attributes AS pa ON ( p.products_id = pa.products_id )
                                                    LEFT OUTER JOIN products_options_values AS pov ON ( pa.options_values_id = pov.products_options_values_id )
                                                    LEFT OUTER JOIN specials AS s ON ( p.products_id = s.products_id )
                                                    AND s.status =  '1'
                                                    WHERE p.products_status =  '1'
                                                    AND pd.language_id =  '2'
                                                    AND (
                                                    (
                                                    pd.products_keywords LIKE (
                                                    '%c750%'
                                                    )
                                                    OR pd.products_description LIKE (
                                                    '%c750%'
                                                    )
                                                    OR pd.products_short_description LIKE (
                                                    '%c750%'
                                                    )
                                                    OR pd.products_name LIKE (
                                                    '%c750%'
                                                    )
                                                    OR p.products_model LIKE (
                                                    '%c750%'
                                                    )
                                                    OR (
                                                    pov.products_options_values_name LIKE (
                                                    '%c750%'
                                                    )
                                                    AND pov.language_id =  '2'
                                                    )
                                                    )
                                                    )
                                                    GROUP BY p.products_id
                                                    ORDER BY p.products_id
     
    -> 1,5 Sekunden

    Code: PHP  [Auswählen]
    SELECT
            p.products_tax_class_id,
            p.products_id,
            pd.products_name,
            p.products_sort,
            p.products_quantity,
            p.products_image,
    -- BOF - Tomcraft - 2009-12-03 - show model-number upon search for products
            p.products_model,
    -- EOF - Tomcraft - 2009-12-03 - show model-number upon search for products
            p.products_price,
            p.products_discount_allowed,
            p.products_date_added,
            p.products_last_modified,
            p.products_date_available,
            p.products_status,
            p.products_startpage,
            p.products_startpage_sort,
            p2c.categories_id FROM products p, products_description pd, products_to_categories p2c
            WHERE p.products_id = pd.products_id AND pd.language_id = '2' AND
            p.products_id = p2c.products_id AND (pd.products_name like '%tx-l32%' OR p.products_model like '%tx-l32%') ORDER BY p.products_sort, pd.products_name ASC;
     
    -> 1,5 Sekunden

    Vielleicht hat ja noch jemand eine Idee.

    Danke.
    Christian

    hendrik

    • Experte
    • Beiträge: 2.038
    Performance Tuning
    Antwort #19 am: 18. Januar 2011, 08:19:56
    Box Categories
    Da hatte ich maln Laden . Der brach fast zusammen. Bei der Kategorieliste war der Pferdefuß weil er irrsinnig viele Kategorien hatte. Ich optimierte da was und es flutschte hinterher.

    Gruß
    Hen

    // Wenn du extrem viele Kategorien hast und mal testweise die Categories-Box lahm legen willst.

    templates/..dein template../source/boxes.php

    Zeile:

    Code: PHP  [Auswählen]
    include(DIR_WS_BOXES . 'categories.php');
     
    auskommentieren.

    Matt

    • Experte
    • Beiträge: 4.241
    Performance Tuning
    Antwort #20 am: 18. Januar 2011, 08:33:33
    Das, was du in deinen Slow Queries hast, sind zwei Suchen. Da bringt möglicherweise der Umbau auf die MySQL-Volltextsuche was: http://dev.mysql.com/doc/refman/5.1/de/fulltext-search.html

    Für die Herstellerbox: Führ die Query doch mal manuell in phpMyAdmin aus und schau dir an, wie lange sie braucht. Und lass dir auch den explain ausgeben.
    Prinzipiell sollte der Index was bringen:

    Code: SQL  [Auswählen]
    ALTER TABLE  products ADD INDEX (  manufacturers_id )
    Ich hab aber nicht verstanden, warum du überhaupt ein Join auf die Produkttabelle vorgenommen wird, da eine Prüfung, ob ein Produkt eines Herstellers verfügbar ist, nicht vergenommen wird. Dann kann man sich den IMHO auch gleich sparen.

    Cookie

    • Fördermitglied
    • Beiträge: 274
    Performance Tuning
    Antwort #21 am: 18. Januar 2011, 08:45:32
    Hallo,

    danke für die Infos.

    Ich habe schon verschiedene Boxen auskommentiert, auch die Kategorien. Es bringt eigentlich nur die Herstellerbox ein Performancegewinn. Die DB Abfrage im phpMyAdmin ist schnell. Indices gibt es. Kann es sein, dass das Smarty Parsing das Problem ist?

    Danke.
    Christian

    Matt

    • Experte
    • Beiträge: 4.241
    Performance Tuning
    Antwort #22 am: 18. Januar 2011, 09:19:02
    Was sagt denn der explain, welche Indices zur Verfügung stehen und welche davon wirklich benutzt werden?

    hendrik

    • Experte
    • Beiträge: 2.038
    Performance Tuning
    Antwort #23 am: 18. Januar 2011, 09:23:03
    Kann sein, kann aber auch nicht. Mit Trial+Error kannste Glück haben, hattest du bisher nur bedingt.
    Gewissheit woran es liegt bringt erst eine Analyse, Debugging. Vielleicht spielen auch mehrere Problemstellen zusammen. Wenn ich vor solchen Problemen stehe mache ich Zeitmessungen. Messpunkte in den Code einfügen und immer näher an die Problemstelle herantasten.

    Gruß
    Hen

    Anonym

    • Gast
    Performance Tuning
    Antwort #24 am: 18. Januar 2011, 09:46:58
    Hallo,

    Die Seite liegt auf einem dedicated Server bei 1und1 (Dual Core mit 2 GB RAM). Die Last auf dem Server ist aber eigentlich ok.

    Es laufen einige Cron Jobs, welche den Datenabgleich machen.

    Ich habe mit von 1und1 mal einen SlowQuery Dump der DB erstellen lassen. Den werde ich jetzt auch mal auswerten.

    du meinst einen "Managed Server"?
    Dann liegt die MySQL-DB nicht auf deinem Server sondern in der Serverfarm bei 1&1.
    Du bist dann auch nicht der einzige, der den MySQL-Rechner nutzt. Hier sehe ich eine absolute Unsinnigkeit im Aufbau von 1&1. Was bringt es dem einzelnen Kunden einen Server zu verkaufen, der quasi nicht genutzt wird aber durch die überlastete DB Ausfälle hat?
    Ev. installierst du dir deinen eigenen MySQL-Server, das ist zwar mangels Rechten etwas eigen, sollte aber möglich sein.

    Gruß
     Kristian

    Cookie

    • Fördermitglied
    • Beiträge: 274
    Performance Tuning
    Antwort #25 am: 18. Januar 2011, 21:25:57
    Hallo,

    die Datenbank liegt auf dem Server lokal.

    Ich denke aber das die DB nicht das Problem ist.

    Ich habe mir die manufacurers Box mal im Detail angeschaut und ein paar microtime() Aufrufe eingebaut. Die Laufzeit liegt zwischen 0,8 und 10 Sekunden. Dabei gehen die PHP Prozesse stark in der CPU Last hoch. Der Select in der DB geht ganz schnell. Mir schein, dass PHP eingebremst ist.

    Dieser Aufruf verursacht die Laufzeit (ca. Zeile 75):

    Code: PHP  [Auswählen]
                    $box_content = xtc_draw_form('manufacturers', xtc_href_link(FILENAME_DEFAULT, '', 'NONSSL', false), 'get').xtc_draw_pull_down_menu('manufacturers_id', $manufacturers_array, $_GET['manufacturers_id'], 'onchange="if (form.manufacturers_id.selectedIndex != 0)
          location = form.manufacturers_id.options[form.manufacturers_id.selectedIndex].value;" size="'
    .MAX_MANUFACTURERS_LIST.'" style="width: 100%"').xtc_hide_session_id().'</form>';
     
    Ist doch komisch, oder?

    Ich werde jetzt mal alles auf einem Root Server testen.

    Nutzt Ihr eigentlich das Caching des Shops?

    Danke.
    Christian

    vr

    • modified Team
    • Beiträge: 2.664
    Performance Tuning
    Antwort #26 am: 18. Januar 2011, 23:34:37
    Hallo Christian,

    hast Du was geändert? Egal was ich da mache, ist die Parse Time <1,5 sec, das ist doch ok.

    Grüße, Volker

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:
    Performance Tuning
    Antwort #27 am: 19. Januar 2011, 00:17:59
    Hallo,

    hier der Link zum Shop http://www.alles-mit-stecker.de/

    Die Anpassung der boxes.php werde ich mal ausprobieren.

    Vielen Dank.
    Christian

    Ich habe gerade bei Erstaufruf ca. 1,7 Sekunden Parse Time.

    Grüße

    Torsten

    speedy

    • Viel Schreiber
    • Beiträge: 3.214
    Performance Tuning
    Antwort #28 am: 19. Januar 2011, 00:40:36
    Evtl. hat er den Fehler mittlerweile.
    Allerdings wäre es auch nicht ungewöhnlich, wenn spät abends oder nachts die Werte "normal" sind und tagsüber gehts wieder los. Deutet dann möglicherweise doch auf ein Lastenproblem hin, was aber nicht heißen muss, dass es nicht der Shop verursacht. Also, ich kann mir nicht vorstellen, dass zu viele Besucher die Last erzeugen. ;)

    Anonym

    • Gast
    Performance Tuning
    Antwort #29 am: 19. Januar 2011, 08:24:35
    Hallo,

    ich habe mir den Shop gerade angesehen.
    Für mich sind das gefühlte 200 Hersteller. Die werden dank ShopStat durch pi mal Daumen 80 regexe gejagt. Das macht ~ 16.000 Ersetzungen. Hmmm, wie sollte das schnell sein?
    Hinzu kommt, dass die regex-Orgie einen CPU-Kern voll auslastet, treffen mehrere Seitenaufrufe aufeinander ist logischerweise Ende im Gelände.

    Ich würde hier die Hersteller-Links "hardcoden", sprich function shopstat_hrefManulink mit einem Array versehen.

    Gruß
     Kristian

    Templateshop - Eine große Auswahl an neuen und modernen Templates für die modified eCommerce Shopsoftware
    4 Antworten
    4395 Aufrufe
    18. März 2011, 18:08:41 von ichbins
    28 Antworten
    18639 Aufrufe
    11. Mai 2013, 22:48:25 von MichaV
    20 Antworten
    10069 Aufrufe
    01. Juli 2015, 11:03:34 von swolfram [templatix]
    15 Antworten
    7267 Aufrufe
    08. August 2012, 09:00:29 von keineLustmehr
               
    anything