SQL Queries mit ewiger Ausführung

Moin moin,

meine Shopware-Installation sorgt leider immer wieder für SQL Queries, die kein Ende finden. Das geht natürlich extrem zu Lasten der Performance. Es handelt sich (scheinbar) um ein Query zum Abrufen von verwandten Artikeln. Abgefeuert wird es wohl beim Aufruf eines Artikels - komisch ist jedoch, dass die jeweiligen Artikel, bei denen das Problem auftritt, deaktiviert sind. Sie sollten somit eigentlich gar nicht aufgerufen werden. Hier ein Beispiel eines solchen Queries:

 

SELECT a.id as articleID, a.name as articleName, IF(s.id, 2, 0) + IF(s2.id, 1, 0) as relevance 
FROM s_articles a INNER JOIN s_articles_categories_ro ac 
ON ac.articleID=a.id AND ac.categoryID = 3 
INNER JOIN s_categories c
ON c.id = ac.categoryID AND c.active = 1
LEFT JOIN s_articles_avoid_customergroups ag
ON ag.articleID=a.id AND ag.customergroupID=1 
LEFT JOIN s_articles o 
ON o.id=1680
LEFT JOIN s_articles_similar s 
ON s.articleID=o.id AND s.relatedarticle=a.id 
LEFT JOIN s_articles_categories_ro s1 
ON s1.articleID=o.id 
LEFT JOIN s_articles_categories_ro s2 
ON s2.categoryID=s1.categoryID AND s2.articleID=a.id
WHERE a.active = 1 AND ag.articleID IS NULL AND a.id!=1680 GROUP BY a.id ORDER BY relevance DESC LIMIT 4 

 

“relevance” sieht mir eher nach einem Filter oder einer Sortierung aus.

Hier sind durchaus einige Einstellungen in Shopware, die den Shop völlig schrotten können… Hatten wir hier schon mit Preisen. Da Preise pro Variante und Kundengruppe erzeugt werden ist die Tabelle schnell unglaublich groß und beim JOIN prices mit details kommen die heftigsten Tabellen zusammen…

Würde vorschlagen mal bei den Filtern/Sortierungen zu schauen was ihr wirklich braucht und testweise einfach mal das Ein oder Andere abzuschalten.

Hallo @MHorst‍,

was bedeutet in dem Fall „…die kein Ende finden“? Hast du diese Information aus der Slow-Query Log Datei? 

Was passiert denn zum Beispiel in PHPMyAdmin, wenn du den SQL Befehl dort folgender maßen ausführst:

EXPLAIN SELECT a.id as articleID, a.name as articleName, IF(s.id, 2, 0) + IF(s2.id, 1, 0) as relevance 
FROM s_articles a INNER JOIN s_articles_categories_ro ac 
ON ac.articleID=a.id AND ac.categoryID = 3 
INNER JOIN s_categories c
ON c.id = ac.categoryID AND c.active = 1
LEFT JOIN s_articles_avoid_customergroups ag
ON ag.articleID=a.id AND ag.customergroupID=1 
LEFT JOIN s_articles o 
ON o.id=1680
LEFT JOIN s_articles_similar s 
ON s.articleID=o.id AND s.relatedarticle=a.id 
LEFT JOIN s_articles_categories_ro s1 
ON s1.articleID=o.id 
LEFT JOIN s_articles_categories_ro s2 
ON s2.categoryID=s1.categoryID AND s2.articleID=a.id
WHERE a.active = 1 AND ag.articleID IS NULL AND a.id!=1680 GROUP BY a.id ORDER BY relevance DESC LIMIT 4 

VG

enerSpace Webhosting
Tel.: +49 511 - 219 568 76 | Web: https://www.enerspace.de

Hallo enerSpace,

die Abfragen laufen teilweise 20 Minuten, sodass wir sie per Hand abbrechen. Die Info stammt aus den aktiven laufenden Prozessen, nicht dem Slow-Query Log.

Hier das Ergebnis vom Explain Select:

 

Hallo @MHorst‍,

vielen Dank für den Screenshot. Das hört sich recht seltsam an. An dem Query sehe ich jetzt aber kein problem.

  • Wie lang brauch der Query ohne EXPLAIN in PHPMyAdmin zur ausführung?
  • Sind alle Shopware Cache-Funktionen aktiviert?
  • Wo ist der Shop gehostet? Ist das ein offizieller Shopware Hosting Partner?

Wie lange brauch z.B. der folgende Befehl?:

SELECT a.id as articleID, a.name as articleName, IF(s.id, 2, 0) + IF(s2.id, 1, 0) as relevance 
FROM s_articles a INNER JOIN s_articles_categories_ro ac 
ON ac.articleID=a.id AND ac.categoryID = 3 
INNER JOIN s_categories c
ON c.id = ac.categoryID AND c.active = 1
LEFT JOIN s_articles_avoid_customergroups ag
ON ag.articleID=a.id AND ag.customergroupID=1 
LEFT JOIN s_articles o 
ON o.id=1680
LEFT JOIN s_articles_similar s 
ON s.articleID=o.id AND s.relatedarticle=a.id 
LEFT JOIN s_articles_categories_ro s1 
ON s1.articleID=o.id 
LEFT JOIN s_articles_categories_ro s2 
ON s2.categoryID=s1.categoryID AND s2.articleID=a.id
WHERE a.active = 1 GROUP BY a.id ORDER BY relevance

Im grunde sollte aber euer Hoster euch hier weiter helfen können um z.B. eine fehlkonfiguration von MySQL auszuschließen. Hast du dort bereits nachgefragt?

VG

enerSpace Webhosting
Tel.: +49 511 - 219 568 76 | Web: https://www.enerspace.de

1 „Gefällt mir“

@enerSpace‍

  • Bei Ausführung im phpMyAdmin kommt es nach 2 Minuten zu einem 504 Gateway Timeout.

  • Caches sind gemäß der offiziellen Doku eingerichtet und werden per Cron aktualisiert

  • Der Shop wird auf einem eigenen Server gehostet. Alle Einstellungen (Webserver, Datenbank) sind gemäß der Anforderungen

Hallo @MHorst‍,

da scheint anscheinend etwas mit den Server-Einstellungen nicht zu stimmen. Bei uns dauert der Aufruf nicht so lange! Eventuell ist die my.cnf nicht korrekt eingestellt oder der Server verfügt nicht mehr über genug freie Ressourcen. Da würde ich aber jetzt in eine Glasskugel schauen, da der Flschenhals an mehreren Stellen auftreten könnte.

Ich würde dir zu Testzwecken eine Datenbank von uns zur verfügung stellen, wo du den SQL Query einmal testen kannst. Dann kannst du die Zeiten vergleichen. Wir können dir aber auch ein Testpaket erstellen wo du selbst rum experamentieren kannst. Dann kanst du zumindest ausschließen, ob der Fehler an der Datenbank liegt oder an den Einstellungen. 

Also normal ist das nicht, auch nicht, dass dann ein Gateway-Timeout entsteht.

VG

enerSpace Webhosting
Tel.: +49 511 - 219 568 76 | Web: https://www.enerspace.de

1 „Gefällt mir“

Hallo @enerSpace‍,

wir konnten das Problem vermutlich bereits beheben. Wir haben herausgefunden, dass das Query ausgeführt wird, wenn ein deaktivierter Artikel im Frontend aufgerufen wird. Die Einstellung war so, dass in diesem Fall ähnliche Produkte als Alternative angezeigt werden sollen. Da wir viele Produkte mit noch viel mehr Kategorien im Shop haben, kam diese Datenbankabfrage offensichtlich an ihre Grenzen. Wir haben nun die Einstellungen hinsichtlich deaktivierter Artikel geändert. Nun scheint es kein Problem mehr zu geben. 

Vielen Dank für die Hilfe

1 „Gefällt mir“

Hallo @MHorst‍,

 Du kannst dich bei weiteren Fragen oder Problemen gern an uns wenden. Wir versuchen dir dann weiter zu helfen.

VG

enerSpace Webhosting
Tel.: +49 511 - 219 568 76 | Web: https://www.enerspace.de