Hallo, wir haben EINE Kategorie im Shop, deren Aufruf extrem lang dauert. Sprich das Listing.
Alle andere laufen problemlos. Was kann das für Gründe haben? Da sind nur 50 Artikel drin. 6 Subkategorien.
Aber relativ große Anzahl Filter bzw. Filteroptionen … kann es daran evtl liegen? Außerdem gibt es relativ viele Varianten (50-400) pro Artikel … kann das auch ein Grund sein?
Beim 2. Aufruf ist die Ladezeit dann viel schneller…
„Beim 2. Aufruf ist die Ladezeit dann viel schneller…“ > Klingt nach leerem Cache.
Ein Profi würde den xDebug-Profiler anschmeißen (oder zur Not jenes von Symfony nehmen) und die MySQL slow query logs auf fehlende Indeces prüfen. Bekommst Du davon etwas hin? Ansonsten: wärme den Cache vor, teile die problematische Kategorie auf mehrere auf, oder vermeide (Preis-)Filter, die auf die Varianten schauen müssen.
@ChocoSW da helfen die Developer-Tools wenig, denn die zeigen auch nur, dass der Seitenaufruf langsam war bzw. wie lange er gedauert hat. Das weiß ich aber auch so …
@euroxid kanns wirklich am Cache liegen? Ein Warmup sollte ja nichts anderes sein, wie wenn ich als User die Kategorie öffne oder? Denn danach gehts ja schnell. Allerdings halt nur für gewisse Zeit … der Cache geht also nach gewisser Zeit verloren und muss neu aufgebaut werden. Gibts so eine Funktion in SW6? Glaube nicht.
EDIT: irgendwie kann es auch am Cache nicht liegen… hab ihn grad mal gelöscht und wollte sehen, ob die Kategorie dann wieder lange braucht zum Laden. Aber es ging ganz schnell. Komisch…
Das Cache-Alter kann man in den Header-Daten des Requests sehen:
In der .env habe ich folgende Einstellung bzgl. der TTL gefunden:
Ob beim Cache-Warming etwas schief läuft kann man sehen, indem man in der Konsole den bin/console http:cache:warm:up ausführt, und dann den bin/console messenger:consume -vvv
Bei Fehlern und Warnungen sollte man da was angezeigt bekommen.
Was mir bei uns aufgefallen ist:
Irgendetwas bei unserem Cache-leeren/Cache-Aufwärmen-Prozedere erstellt einen neuen Cache-Unterordner (prod_######), lässt alte Ordner aber drin, was uns Gigabyte an Cache-Daten beschert hat. Hier könnte man die Datengröße mal prüfen:
du -sh var/cache/
Wir haben das Ordner Problem gelöst, indem wir im Cron vor dem Cache-Aufwärmen alle Cache-Ordner entfernen (alles in ein Shellskript gepackt).
Das kann im Entwicklungsprozess richtig heftig werden. Soweit ich mich erinnere, war die gesamte Installation irgendwann 59GB groß…
„Weiß Du zufällig, ob bei Änderungen im admin z.B. am Produkt der Cache für die Produktseite auch wieder neu aufgewärmt wird?“
Kann ich leider nicht sagen. Ich weiß nur, dass beim Cache-Aufwärm-Befehl die Enqueue-Tabelle mit Messages gefüllt wird, die dann durch den Messenger abgearbeitet werden.
Die Cache-Funktionen haben wir mit Cronjobs gelöst. Der Messenger wird dort mit definiertem Timeout regelmäßig angestoßen, und davon autark regelmäßig durch einen weiteren Cronjob der Cache-Aufwärm-Befehl abgesetzt.
Für einzelne Bereiche hab ich auch einen wget-Befehl ausgeführt, der den Bereich dann crawlt (weil dieser Bereich aus einem Plugin kommt, und es dort Probleme mit dem Cache-Warming gab).
Ich würde mit dem aufwärmen etwas aufpassen, ob dies so viel bringt. So schnell könnt ihr gar nicht schaun, fliegen eure Seiten wieder aus dem Http-Cache raus.
Unserer Erfahrung nach wird der gesamte Http-Cache (also wirklich jede Seite im Http-Cache) invalidiert, wenn
ein Produkt im Admin geändert wird
ein Produkt über die Sync-Api geändert wird (auch wenn nur der Lagerstand oder der Preis aktualisiert wird)
oder auch (man glaubt es kaum) ein Kunde eine normale Bestellung macht
Der Grund ist, dass alle Seiten im Http-Cache mit extrem vielen so genannten Cache-Tags versehen sind.
Ich sehe hier dringenden Handlungsbedarf bei dem konzeptionellen Problem und hoffe, dass Shopware möglichst bald drastische Verbesserungen bringt!
Ich habe unter Shopware 6.4.14.0 das gleiche Problem mit einer Kategorie mit vielen Unterkategorien (ca 300). Der Aufruf ist sehr langsam. Danach geht er aber schnell, das hält aber nur für eine bestimmte Zeit an, danach wird der Aufruf wieder langsam.
Gibt es da mittlerweile eine Lösung für?
Moin, wir hatten das Problem auch. Fündig wurden wir an drei Datenbankabfragen beim Aufruf der Kategorien.
Letzlich geholfen hat nur, den Hoster zu wechseln auf einen für Shopware eingerichteten Server mit Redi und ElasticSearch.
Das war die Lösung.
Wir hatten da damals auch 3 Monate alles mögliche probiert, es funktioniert nicht.
Wir sind bei Profihost. Redis sollte möglich sein. Ich werde unseren Hoster diesbezüglich mal kontaktieren und bis dahin als workaround per Skript regelmäßig die betreffende Kategorie aufrufen.