cenzo81cenzo81 MemberComments: 8 Received thanks: 0 Member since: April 2018

Hallo zusammen,
ich habe die Shopware Version 5.6.1 mit ca 58.000 Artikel.

Wenn ich im Shop nach etwas suche dauert es extrem lange bis ich ein Ergebnis bekomme (ca 12 Sekunden) woran kann das liegen?
Das einzige was dann hilft ist die Shopware Datenbank zu löschen und wieder neu zu importieren dann rennt die Suche wieder Pfeilschnell.

In der Datenbank sehe ich auch das Statement welches so lange braucht aber was kann ich hier tun ?
>> SELECT SQL_CALC_FOUND_ROWS product.id as __product_id, variant.id                     as __variant ...

 

Answers

  • msslovi0msslovi0 MemberComments: 317 Received thanks: 67 Member since: April 2015

    Wie lautet denn die komplette Query? Was ergibt ein EXPLAIN dieser Query?

    Gruß

    Matt

  • ShyimShyim MemberComments: 879 Received thanks: 352 Member since: May 2015

    Meist liegt es an der Varianten Suche oder den Preisfiltern 

  • cenzo81cenzo81 MemberComments: 8 Received thanks: 0 Member since: April 2018

    Naja was mich so wundert, ich hab keine Plugins installiert der Shop ist also Quasi von der Stange ohne große anpassungen und der Fehler begleitet mich schon eine ganze Weile. Ich hab Aktuell die Datenbank neu aufgebaut jetzt läuft alles wieder performat. Sobald die Suche wieder anfängt zu lahmen werd ich das entsprechende SQL Statement posten. Danke mal für eure schnelle Antwort.

    Ich hoffe wir kriegen das Problem gelöst.

  • cenzo81cenzo81 MemberComments: 8 Received thanks: 0 Member since: April 2018

    Heute trat der "Fehler" wieder auf das Suggest bracuht eeewig bis ein Suchergebnis angezeigt wird.
    Hab mir mal das komplette SQL geloggt, vielleicht kann mir jemand sagen warum das Statement soo lange braucht.
    Erst wenn ich die Datenbank lösche und neu importiere läuft die Suche wieder performant.

    SELECT SQL_CALC_FOUND_ROWS product.id as __product_id, variant.id                     as __variant_id, variant.ordernumber            as __variant_ordernumber, searchTable.* FROM s_articles product INNER JOIN s_articles_details variant ON variant.id = product.main_detail_id
                     AND variant.active = 1
                     AND product.active = 1 LEFT JOIN s_articles_avoid_customergroups avoidCustomerGroup ON avoidCustomerGroup.articleID = product.id
                 AND avoidCustomerGroup.customerGroupId IN (1) INNER JOIN (SELECT a.id as product_id, (sr.relevance
            + IF(a.topseller = 1, 50, 0)
            + IF(a.datum >= DATE_SUB(NOW(),INTERVAL 7 DAY), 25, 0)) as ranking FROM (SELECT srd.articleID, SUM(srd.relevance) as relevance, COUNT(DISTINCT term) as termCount FROM (
    SELECT MAX(sf.relevance * sm.relevance) as relevance, sm.keywordID, term, si.elementID as articleID FROM (SELECT 100 as relevance, 'dichtung' as term, 662 as keywordID
                 UNION ALL SELECT 50 as relevance, 'dichtung' as term, 3176 as keywordID
                 UNION ALL SELECT 50 as relevance, 'dichtung' as term, 111186 as keywordID
                ...
                 UNION ALL SELECT 50 as relevance, 'dichtung' as term, 2390 as keywordID
                 UNION ALL SELECT 50 as relevance, 'dichtung' as term, 107078 as keywordID
                 UNION ALL SELECT 50 as relevance, 'dichtung' as term, 2386 as keywordID
                 UNION ALL SELECT 50 as relevance, 'dichtung' as term, 108174 as keywordID
                 UNION ALL SELECT 50 as relevance, 'dichtung' as term, 2387 as keywordID) sm INNER JOIN s_search_index si ON sm.keywordID = si.keywordID INNER JOIN s_search_fields sf ON si.fieldID = sf.id AND sf.relevance != 0 AND sf.tableID = 1 GROUP BY articleID, sm.term, sf.id
         UNION ALL
    SELECT MAX(sf.relevance * sm.relevance) as relevance, sm.keywordID, term, st2.articleID as articleID FROM (SELECT 100 as relevance, 'dichtung' as term, 662 as keywordID
               
                UNION ALL SELECT 50 as relevance, 'dichtung' as term, 108174 as keywordID
                 UNION ALL SELECT 50 as relevance, 'dichtung' as term, 2387 as keywordID) sm INNER JOIN s_search_index si ON sm.keywordID = si.keywordID INNER JOIN s_search_fields sf ON si.fieldID = sf.id AND sf.relevance != 0 AND sf.tableID = 5 GROUP BY articleID, sm.term, sf.id) srd GROUP BY srd.articleID ORDER BY relevance DESC LIMIT 5000) sr INNER JOIN s_articles a ON a.id = sr.articleID)) searchTable ON searchTable.product_id = product.id INNER JOIN s_articles_categories_ro productCategory ON productCategory.articleID = product.id
                AND productCategory.categoryID IN (3) INNER JOIN s_articles_attributes productAttribute ON productAttribute.articledetailsID = variant.id WHERE avoidCustomerGroup.articleID IS NULL GROUP BY product.id ORDER BY searchTable.ranking DESC, variant.id ASC LIMIT 6

  • cenzo81cenzo81 MemberComments: 8 Received thanks: 0 Member since: April 2018

    Hat den keiner auch nur irgend eine Idee. Kann doch nicht sein dass ich allein das Problem hab ?

     

  • kullikulli MemberComments: 2010 Received thanks: 312 Member since: August 2013

    Mit 58.000 Artikeln denke ich die Datenbank ist etwas überlastet bei der Suche.

    Mein erster Tipp wären da auch auf die Filter.

    Oder mal an den Sucheinstellungen schrauben (Relevanz, Distanz und Faktor)

  • mm_mathiasmm_mathias MemberComments: 15 Received thanks: 2 Member since: November 2017

    Hallo cenzo81,

    wir haben auch das Problem, dass die Suche alles andere als performant ist.

    Es liegt (zumindest bei uns) an der Anzahl Einträge in der Tabelle s_statistics_search. Wenn wir diese leeren, wird die Suche wieder schnell.

    So ab ca. 100.000 Einträgen dauerts schon 2-4 Sekunden bis ein Ergebnis angezeigt wird. Bei noch mehr Einträgen steigt die Antwortzeit rapide an.

    Genauer habe ich mir das noch nicht angesehen aber ich vermute es liegt daran, dass die Suche nach geeigneten Begriffen für "oder meinten Sie..." sucht.

    Viele Grüße

    Mathias

  • cenzo81cenzo81 MemberComments: 8 Received thanks: 0 Member since: April 2018

    Hi Mathias,

    ich danke dir für deine Antwort leider hat die Tabelle bei mir gerade mal 1600 Einträge. Hab die Tabelle auch mal bereinigt, aber die Suche ist mal wieder sowas von langsam.
    Das Suggest benötigt mehr als 10 Sekunden bis hier mal was angezeigt wird.
    Hat jemand eine Idee wie ich den Fehler analysieren kann ? In der Mysql Error Log steht nichts. Wenn ich in der Datanbank die processlist ausgebe dann ist das Statement sooo groß dass ich es nicht wirklich analysieren kann.

    Der Fehler ist dann erst nach erneutem einspielen der Datenbank weg und kommt meist ein Tags später wieder.

    Hat hier noch jemand ne Ahnung wie ich hier vorgehen kann ? So ist der Shop ja absolut unbrauchbar und jeder Kunde verabschiedet sich doch direkt wieder.

     

Sign In or Register to comment.