Guten Tag,
Ich wollte mal alle informieren wie wir diese Herausforderung gelöst haben, da jemand nicht nochmal das gleiche passiert – und, falls das jemand noch mal passiert, schneller gefixed werden kann.
Problem:
Unsere Website war sehr langsam. Vor allem: die Product Listing pages. Ladezeiten von 6 bis 8 Sekunden. Nachdem die Listen-Seite einmal geöffnet wurde, war es dann beim wiederholtem Öffnen etwas schneller. Wenn man kurz eine andere Seite geöffnet hat, und danach wieder die zuvor geöffnete Listen-Seite, war die WIEDER so langsam.
Was haben wir gemacht / versucht?
Das Problem war zurück zu führen auf sehr langsame MySQL queries. Deswegen die lange Ladezeiten. Shopware benutzt sehr große, ineffiziente Queries mit Left_Joins, Inner_Joins, und sub selects… etc. etc. (Queries ohne Indexes) Also:
- my.cnf Konfiguration tausend Mal geändert und getweaked. Verschiedene Settings versucht über mehrere Wochen: Query_Cache, Join_Buffer_Size, Sort_Buffer_Size, InnoDB_Buffer_Pool_Size, etc. etc. etc.
- APC / Apcu Cache an / aus, Settings geändert
- Zend OPCache an/aus, Settings geändert
- Redis Cache installiert, configuriert, für nur Sessions, aber danach auch für statischen Seiten versucht
- Memcached installiert für Sessions
- Diverse MySQL Tools installiert um die langsame Queries zu finden, und versucht die Queries um zu schreiben (und versucht ob es mit extra Indexes schneller ging)
- Schnellerer Server genommen, mit 8 Cores, 64 GB RAM, und NVMe SSD’s
Als letzter Schritt waren wir dabei dann Varnish zu benutzen, da wir aus unserer Sicht alles versucht hatten, und nichts geholfen hat. Auch waren wir schon dabei vor zu bereiten als letzte Lösung dann auf Magento um zu steigen. Nicht vergessen, wir waren seit ZWEI MONATEN dabei.
Wie haben wir das nun gelöst; was war es?
Irgendwie wurde ständig die Cache invalidiert – Ja, MySQL war langsam – aber die HTTPCache ist doch ein Fullpage-cache? Also das müsste ja dann auch die vielen langsamen DB Queries überflüssig machen. Warum wurden die Seiten dann nicht gecached?
Wir hatten alle default shopware settings, nichts geändert, davon war ich mir fast sicher. Nichts besonders angepasst. Nur dass wir Shopware immer geupgraded haben, seit Version 4.x.
An einem Abend kam ich auf die Idee dan mal eine extra Shopware-Installation auf zu spielen, und in den Grundeinstellungen ALLE settings durch zu gehen, und zu vergleichen.
Vielleicht ist in den Updates irgendwann mal ja eine Einstellung dazu gekommen / geändert.
Und da war es.
In Einstellungen > Caches / Performance > Einstellungen > HTTP-Cache.
Dort sind diverse Controllers aufgelistet die gecached werden sollen.
Und bei uns fehlten im Vergleich zur Standard Shopware-Installation zwei Zeilen (entries):
- frontend/listing
- frontend/listing/layout
Die zwei hinzugefügt, Cache geleert, aufgewärmt, und BAM! Ladezeiten von 1 Sekunde. Ahhhhhh…
So etwas einfaches. (jahaaaa, ich hätte auch viel schneller darauf kommen können diese Einstellungen zu kontrollieren. Ja. hör auf)
Vielleicht findet in Zukunft jemand diese Info, und spare ich so jemand viel Zeit
Danke für’s Lesen, und happy Shopware-ing.