Performance Tipps

Allgemeine Tipps

TopicStandardOptimalInfo
PHP-Version-7.4.xPHP 7.4.x bietet je nach Szenario eine zwischen 25 - 30 % höhere Ausführungsgeschwindigkeit (PHP-Stack). Des Weiteren sollte das Memory_Limit - je nach Anzahl der verwendeten Plugins und Datensätze - mindestens 512MB betragen. 
Bytecode-CacheAPCZendOpcache + APCuEs sollte in jedem Fall ein Bytecode-Cache installiert und korrekt konfiguriert sein - dies beschleunigt die Ausführung des PHP-Stacks nochmal um bis zu 25 %
MySQLMySQL 5.7.xMySQL 5.7.x oder MariaDB  (10.x.x)MySQL sollte in der aktuellen für Produktivzwecke freigegebenen Major-Version eingesetzt werden, da es hier deutliche Verbesserungen bei der Ausführung von Joins, SubSelects und Lese-Zugriffen auf die Datenbank gegeben hat.
WebserverApache 2.2 oder 2.4NginxBei Shops mit hohem Traffic lohnt sich auch der Einsatz eines alternativen Webservers wie z.B. Nginx. Stelle sicher, dass das mod_rewrite Module aktiv ist und die Möglichkeit besteht die Webserver-Einstellungen in der .htaccess zu ändern. 
Debug-/Profiling--Achte darauf, dass auf dem Produktivserver keine Profilingtools wie xDebug oder XhProf aktiv sind - diese reduzieren die Ausführungsgeschwindigkeit von PHP deutlich. Ebenfalls sollten die Shopware Debug & Benchmark-Plugins nie im Produktivbetrieb verwendet werden

Mit jedem neuen Shopware-Release fließen auch Performance-Verbesserungen in die Entwicklung ein. Daher ist es ratsam, jeweils zeitnah auf die neu verfügbare, aktuellste Shopware Version umzusteigen.

Auswahl eines geeigneten Hosters

Der Hoster muss zum geplanten Einsatz-Szenario passen und sollte einen Upgrade-Pfad für das gewählte Hosting-Paket anbieten, sodass dieses zusammen mit den Anforderungen wachsen kann. Auf folgende Punkte solltest du achten:

  • Shared Hosting / VServer / Dedicated Server
  • Software-Stack sollte sich mit unseren Empfehlungen (siehe oben) decken
  • Shopware Erfahrung vorhanden?
  • Shopware Referenz-Shops?

Grundsätzlich empfehlen wir einen unserer zertifizierten Hoster zu nutzen. Eine aktuelle Übersicht findest Du unter folgendem Link: Shopware Hosting Partner

Wie messe ich die Performance?

Die angegebenen Ladezeiten sind nur als Indikator zu verstehen, da diese je nach Anzahl / Struktur des Shops und dem aktuellen Traffic abweichen können.

Die nachfolgenden Analyse-Schritte sollten Sie in einem Test-System durchführen - dieses können Sie in einem Unterordner anhand dieser Anleitung anlegen: https://docs.shopware.com/de/shopware-5-de/tutorials-und-faq/shop-transfer-live-system-testumgebung

  • ausnahmslos alle Drittanbieter Erweiterungen deaktivieren 
  • Standard Responsive Theme zuweisen
  • Cache aufwärmen
  • Performance prüfen

Sollten diese Schritte zu einer Verbesserung geführt haben, gilt es die Faktoren Schritt-für-Schritt auszuschließen. Falls es weiterhin eine nicht zufriedenstellende Performance gibt, empfiehlt es sich die folgenden Benchmark-Werte zu ermitteln:

  • Wie viele Artikel hat der Shop? Wie viele Varianten?
  • Wie viele Kategorien hat der Shop? Wie viele Kategoriezuweisungen?
  • Wie viele gleichzeitige Zugriffe gibt es?
  • An welcher Stelle macht sich die schlechte Performance bemerkbar?
  • Kann hier eine Uhrzeit definiert werden, bei der es zu den Problemen kommt?

Der Cronjob "Aufräumen" ist elementar für eine Bereinigung des Systems - folgende Datenbank Tabellen werden hier aufgeräumt:

  • _s emarketing_lastarticles - Artikelverläufe die älter als 30 Tage sind
  • _s statistics_search- Ähnliche Suchbegriffe die älter als 30 Tage sind
  • _s core_log - Backend-Log Einträge die älter als 30 Tage sind
  • _s order_notes - Merklisten die älter als ein Jahr sind und keine Benutzer-Zuordnung haben
  • _s statistics_referrer - Referrer die älter als 90 Tage sind (Standard)
  • _s statistics_article_impression - Artikelaufrufe die älter als 90 Tage sind (Standard)

Ebenfalls überprüfen Sie bitte die Anzahl der Datensätze in den folgenden Datenbank-Tabellen:

  • _s articles_categories_ro
  • _s articles_details
  • _s articles_prices
  • _s articles_similar_shown_ro
  • _s articles_also_bought_ro

Messen der Performance über Firebug

Damit die Ergebnisse vergleichbar sind, wird empfohlen das Shopware Demo-Daten Package als Test-Grundlage zu verwenden. Installiere die Firefox-Extension Firebug. Anschließend kannst Du über den Netzwerk-Tab die Ladezeiten der einzelnen Seiten-Komponenten einsehen.

Relevant ist die Ladezeit der Seite selbst - das ist in der Regel der erste Eintrag in der Liste. Rufe dann die Startseite, Listing und Detailseite jeweils 5 bis 10 mal auf und ermittel aus den einzelnen Ausführungszeiten einen Mittelwert.

Messen der Performance mit Apache-Benchmark

Aufruf über Linux-Shell:


ab -n 10 -c 1 http://URL_DER_STARTSEITE / KATEGORIE / DETAILSEITE

Dort dann jeweils den Median der Total-Time (Connection-Times) als Wert übernehmen.

Analyse Möglichkeiten Performance

TaskAnsprechpartnerInfo
Problematische Komponenten identifizierenKunde / HosterWo genau treten Performance-Engpässe auf? Webserver, Datenbankserver, PHP-Stack, etc.
SQL-Slow-Query AuswertungHosterWelche Datenbank-Queries beeinflussen die Gesamtperformance des Shops?
Hosting-Plattform AnalyseHoster / KundeIst die Hosting-Umgebung geeignet für die Größe, den Traffic, des Shops? Aktuelle / Empfohlene Server-Komponenten im Einsatz? Dedicated Server - Also kein VHost oder Webspace-Paket - Keine Shopware fremden Applikationen auf dem Server im Einsatz?
AnbindungenKundeWerden regelmäßig durch die Anbindung an ein ERP-System große Datenmengen hinzugefügt / verändert? Werden regelmäßig andere Tasks auf dem Shop-Server ausgeführt, die die Performance beeinträchtigen könnten?

Mysql Konfiguration optimieren

Die Standard-Mysql-Konfiguration vieler Distributionen ist nicht für den Produktivbetrieb optimiert. Das Script mysqltuner bietet Anhaltspunkte, welche Konfigurationsparameter noch nicht ideal sind.


wget http://mysqltuner.com/mysqltuner.pl
chmod +x mysqltuner.pl
./mysqltuner.pl

Engpässe durch eine hohe Anzahl an Eigenschaften

Setze die Eigenschaft optimizer_search_depth=0 in der MySQL-Konfiguration. Weitere Informationen erhältst du auch unter folgendem Link: http://www.mysqlperformanceblog.com/2012/04/20/joining-many-tables-in-mysql-optimizer_search_depth/

Tipps & Tricks

Standard-Sortierung Kategorie-Listen

Sofern Du hier ein eigenes Sortier-Kriterium definiert hast, solltest Du darauf achten, dass für die ausgewählte Tabellen-Spalte ein Index in der Datenbank hinterlegt ist.

Umstellung der Aktualisierungsstrategie

Aktuell gibt es im Shop verschiedene Prozesse, die bei jedem Seitenaufruf ausgeführt werden. Das ist beispielsweise die Erzeugung von SEO-Links, der Aufbau des Suchcaches und auch die Generierung von Topsellern und der "Kunden haben sich ebenfalls angesehen"-Funktion.

Hier solltest Du einmal im Detail prüfen, ob Du diese Funktionen nutzt und die Aktualisierungsstrategie von Live (pro Seitenaufruf) auf Cronjob (gesammelt, zeitgesteuert) umstellen. Dies kann im Shopware-Backend über Einstellungen > Caches/Performance (anklicken) > Reiter Einstellungen durchgeführt werden:

Dort findest Du in den Punkten SEO (1), Suche (2), Topseller (3) und Empfehlungsmarketing (4) jeweils eine Einstellung zur Aktualisierungsstrategie. Um den Cronjob nun in Shopware einzurichten, musst Du die Plugins "Cron" und "CronRefresh" installieren. Im Anschluss muss der Aufruf dann zeitgesteuert (am besten in der Nacht) durch den Server erfolgen. Hierzu findest Du eine Dokumentation in unserem Wiki: Cronjobs

Aktivierung des HTTP-Caches

Shopware bietet zudem die Möglichkeit nicht jede Seite live zu berechnen, sondern cachen zu lassen. Hier wird eine html-Cache-Datei angelegt, die alle wichtigen Informationen des Artikel-Listings (Kategorie) und der Detailseite (Artikel) beinhaltet, damit diese nicht bei jedem Aufruf aus der Datenbank abgeholt werden muss. Dies führt ebenfalls vor allem bei der Navigation durch den Shop zu einem großen Performancezuwachs. Dieser Cache wird bei Preisänderungen invalidiert, damit die Preise immer aktuell dargestellt werden.

Durch den oben eingerichteten Cronjob wird der Cache auch nicht zu groß, da er täglich (im Standard alle 24h) geleert wird. Ein gut genutzter Http-Cache kann am Tag 1-2GB Volumen haben. Hier solltest Du einmal prüfen, ob alle Änderungen/Plugins kompatibel sind oder dies ggf. in der Testumgebung einmal probelaufen lassen. Den HTTP-Cache kannst Du über das Performance-Modul aktivieren (Einstellungen > Caches/Performance (anklicken) > Einstellungen > HTTP-Cache).

Plugin-Prüfung

In vielen Fällen führen Plugins auch zu einer deutlichen Verschlechterung der Performance des Shops. Hierzu wäre es notwendig alle Fremdanbieter-Plugins zu deaktivieren und anschleßend die Performance im Frontend erneut zu testen.

Der einfachste Schritt ist dieses mittels SQL Query in der Datenbank einer Testumgebung zu machen. Die beiden nachfolgenden Queries können im phpMyAdmin ausgeführt werden, damit alle Plugins, die Shopware nicht standardmäßig mitliefert, deaktiviert werden:


UPDATE `s_core_plugins` SET `active`= 0 WHERE `source` <> 'Default' AND author <> 'shopware AG';

Eine genaue Anleitung hierzu findest Du auch in unserer Shopware SQL Trickkiste.

Alternativ kannst Du auch einfach den Sicherheitsmodus im Plugin Manager aktivieren, der Dir ab Shopware 5.3 zur Verfügung steht.

Wenn der Shop dann vernünftig läuft, kann man durch schrittweises Aktivieren der Plugins den "Übeltäter" finden. Wenn Du Plugins installiert hast, die Du aktuell nicht einsetzt, macht es auch Sinn diese zu deaktivieren. Hier solltest Du auch prüfen, ob wirklich alle Plugins benötigt werden.

Plugin "Debug"

Im Shopware-Standard gibt es das Plugin "Debug", welches beispielsweise einzelne Prozesse auf dem Server benchmarken kann. Hier kannst Du relativ genau sehen, wie lange ein Seitenaufruf braucht und auch welche Prozesse (Datenbankabfragen, Controller, usw.) den Aufruf bremsen.

Serveroptimierung

Aktuell setzt Du eventuell noch kein erweitertes Caching wie ZendOP und APCu ein. Dies solltest Du zusätzlich installieren/aktivieren, um nochmal einen Performance-Boost zu erreichen. Die Performance-Checks findest Du unter Einstellungen > Caches/Performance (anklicken) > Einstellungen > Performance checks:

Systemprüfung

Unter Einstellungen > Systeminfo kannst Du Informationen über dein System finden:

Dort gibt es beispielsweise das Merkmal "memory_limit" (1), welches bei Unterschreitung entscheidend auf die Performance einwirken kann. Empfohlen sind mindestens 512MB (abhängig von der Anzahl der Plugins sowie Datensätze). Hier ist zu beachten, dass dem System auch nur vorgegaukelt werden kann, dass hier ein ausreichender Wert erzielt wird, sodass hier das System generell einmal überprüft werden sollte.

Prinzipiell ist hierzu anzumerken, dass die Mindestvoraussetzung auf einen Shopware-Basis Shop ohne Plugins ausgelegt ist und an dein System angepasst werden sollte.

Compiler Caching

Unter Einstellungen > Theme Manager > Einstellungen kannst Du das Compiler Caching deaktivieren. Dies sollte im Produktivmodus niemals gesetzt sein, da es den Shop extrem verlangsamt und nur zu Entwicklungszwecken angedacht ist.

War dieser Artikel hilfreich?