Performance Tipps

In diesem Artikel erfährst Du, wie Du die maximale Performance aus deinem Shop herausholst. Hierzu geben wir Dir einige Tipps und Tricks und nennen Dir hierfür verschiedene Stellschrauben.

Falls Du ein erweitertes technisches Know-How besitzt, findest Du auch noch weitere Informationen in unserer Developer Dokumentation. Performance Tweaks - Shopware Developer

Allgemeine Tipps

Topic

Standard

Optimal

Info

PHP-Version

-

FPM

PHP-FPM ist eine deutlich performantere und moderne Lösung, um Prozesse zu verwalten.

Bytecode-Cache

APC

ZendOpcache + APCu

Es 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 %

Database

>= MySQL 8 oder MariaDB >= 10.3.22

>= MySQL 8

Sofern kein Elastic bzw. OpenSearch verwendet wird, sollte MySQL, statt MariaDB genutzt werden. An einigen Stellen des Codes verwenden wir JSON-Felder. Sobald es um das Filtern, Sortieren oder Aggregieren von JSON-Feldern geht, ist MySQL dem MariaDB-Fork voraus.

Webserver

>= Apache 2.4

NGINX

Die Architektur von NGINX ermöglicht es gegenüber von Apache2 bei Shops mit sehr hohen Zugriffszahlen besser zu performen.

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 solltest Du in einem Testsystem durchführen, eine Anleitung hierzu findest Du hier.

  • ausnahmslos alle Drittanbieter Erweiterungen deaktivieren 

  • Standard Responsive Theme zuweisen

  • Cache leeren & 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?

Messen der Performance über die Netzwerkkonsole

Damit die Ergebnisse vergleichbar sind, wird empfohlen das Shopware Demo-Daten Package als Test-Grundlage zu verwenden. Anschließend kannst Du über die Netzwerkkonsole Deines Browsers die einzelnen Ladezeiten ermitteln. 

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://www.domain.tld:80/{startseite,kategorie,listing}

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

Analyse Möglichkeiten Performance

Task

Ansprechpartner

Info

Problematische Komponenten identifizieren

Kunde / Hoster

Wo genau treten Performance-Engpässe auf? Webserver, Datenbankserver, PHP-Stack, etc.

SQL-Slow-Query Auswertung

Hoster

Welche Datenbank-Queries beeinflussen die Gesamtperformance des Shops?

Hosting-Plattform Analyse

Hoster / Kunde

Ist 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?

Anbindungen

Kunde

Werden 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.pl/ -O mysqltuner.pl
chmod +x mysqltuner.pl
./mysqltuner.pl

CLI Worker

Standardmäßig verwendet Shopware 6 den Admin Worker. Dieser bearbeitet die Message Queue jedoch langsamer als der CLI Worker und erfordert zudem, dass die Administration über einen längeren Zeitraum geöffnet ist. Deshalb empfehlen wir diesen in zwei einfachen Schritten für Produktivsysteme zu deaktivieren. 

Die folgenden Einstellungen erfolgen direkt auf dem Server. Da die Möglichkeiten der Serverkonfiguration vom Hoster abhängt, erläutern wir dies hier allgemein. Bei Fragen zur Bedienung der Serverkonfiguration sollte der Support Deines Hosters weiterhelfen können.

Schritt 1: Konfiguration anpassen

Bei allen neuen Shopware-Projekten findet sich in der Installation unter config/packages/ nur noch eine lock.yaml Datei. Dies kann auch der Fall sein, wenn du ein Update durchgeführt hast und die .yaml Dateien unter config/packages/ im Standard waren.

Sollte dies bei dir der Fall sein, musst du eine neue shopware.yaml Datei erstellen und hier die Anpassungen einfügen!

Um den Admin-Worker zu deaktivieren muss die Änderung in der Datei z-shopware.yaml vorgenommen werden. Du findest diese in Deiner Shopware-Installation unter config/packages/. Deaktiviere den Admin-Worker indem Du den Wert enable_admin_worker auf "false" setzt und speichere die Datei ab. Deine Datei sollte nun folgendermaßen aussehen: 

# config/packages/shopware.yaml
shopware:
    admin_worker:
        enable_admin_worker: false

Schritt 2: CLI-Befehle ausführen

Damit die Message Queue und die Scheduled Tasks nun ausgeführt werden, müssen die Prozesse über die CLI gestartet werden.

Message Queue:

bin/console messenger:consume default --time-limit=60

Scheduled Tasks:

bin/console scheduled-task:run --time-limit=60

Wir empfehlen bei den oben stehenden Befehlen den Parameter time-limit=60, sodass der Befehl für maximal 60 Sekunden ausgeführt wird. Alternativ /zusätzlich kannst Du anstatt eines Zeitlimits auch ein Speicherlimit definieren, dies ist mit dem Parameter --memory-limit=512M möglich. Mehr Informationen findest Du in unserer Developer Dokumentation.

Wichtig ist bei diesem Vorgang, dass die Befehle regelmäßig (vzw. alle 60 Sekunden, siehe --time-limit) ausgeführt werden, damit die Message Queue kontinuierlich abgearbeitet wird. Dies kann zum Beispiel durch das Anlegen eines Cronjobs oder eines Services auf dem Server erreicht werden. Wende Dich hierzu an Deinen Hoster.

Erweiterte Performance Einstellungen 

Den wohl größten Impact auf die Performance bietet der Einsatz der drei folgenden Technologien. Die Konfiguration und Wartung setzen jedoch Fachwissen voraus und wird eigentlich nur in sehr großen Systemen mit viel Traffic benötigt.

ElasticSearch / OpenSearch

ElasticSearch bzw. OpenSearch ist eine Open-Source-Suchmaschine und Analyselösung, die speziell für die schnelle und skalierbare Suche und Analyse von großen Mengen unstrukturierter Daten entwickelt wurde. 

Eine Anleitung zur Verwendung von ElasticSearch / OpenSearch findest Du in unserer Developer Dokumentation. Set up Elasticsearch - Shopware Developer

Session Handling

Shopware verwendet standardmäßig den in PHP konfigurierten Sitzungsspeicher. Bei den meisten Installationen ist dies das Dateisystem. Um die Belastung auf die Datenbank zu verringern bieten und schnellere Datenverarbeitung zu ermöglichen, ist die Verwendung von Redis empfehlenswert.

Eine Anleitung zur Verwendung von Redis findest Du in unserer Developer Dokumentation. Session - Shopware Developer

Flysystem

Flysystems ermöglichen es Dir Daten sicher, redundant und performant extern zu speichern. Dies kann Deinen eigenen Server weiter entlasten und dadurch eine bessere Performance bieten.

Eine Anleitung zur Verwendung von Flysystems findest Du in unserer Developer Dokumentation. Filesystem - Shopware Developer

War dieser Artikel hilfreich?