Suche extrem langsam

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 …

 

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

Gruß

Matt

Meist liegt es an der Varianten Suche oder den Preisfiltern 

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.

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

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

 

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)

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

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.