wir haben ein Problem bei der Generierung des Suchindex. Im Backend wird nur 1 Eintrag beim Index angezeigt, neue Produkte werden nicht gefunden und auch eine Generierung via SSH ist nicht möglich.
Hier die Fehlermeldung, die vom Server ausgegeben wird:
Syntax error or access violation: 1064 memory exhausted near 'sk.id as keywordID, 11634 as elementID, 5 as fieldID FROM s_search_keywords s...' at line 15995 in /var/www/clients/client1/web7/web/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:993
Wir haben bereits mit dem Hoster Timme Hosting Rücksprache gehalten und die Größe des Thread Stacks sowie die Batch Size in der config.php angepasst. Auch das PHP Memory Limit wurde auf 4096 erhöht.
Die Fehlermeldung kommt aus der Datenbank.
Versuch mal an das vollständige SQL zu kommen. Da fehlt mindestends das „select“ vorweg. Wenn du das hast, kannst du das SQL direkt ausführen, um z.B. zu analysieren, wie groß die Datenmenge ist oder um welches Keyword es sich handelt.
Okay, danke für die Rückmeldung. Die SQL Anfrage wird jedoch von Shopware selbst und nicht manuell getätigt, daher sollte ja syntaktisch alles richtig sein. Der Prozess läuft auch nicht sehr lange, sondern meistens weniger als eine Minute bis zum Abbruch.
Wir haben uns das Problem auch gemeinsam mit dem Support von @TimmeHosting angesehen, aber auch die waren mit ihrem Latein am Ende.
Wenn das SQL korrekt ist, dann fehlt der Datenbank Hautspeicher nach der Fehlermeldung zu schließen.
Aus eigener historischer Erfahrung (2017) war der Shopware Prozess zum Aufbau eines Suchindex bei uns inperformant. Nicht nur aus diesem Grund nutzen wir seitdem einen externen Anbieter.
Der Shopware 6 Indexer läuft per Batches, es wird also mit einem offset gearbeitet.
Beim Indexieren wirdalso Schritt für Schritt mit dem offset gearbeitet, bis er bei z.b. Schritt 6 eine 1-GB-Speicherbegrenzung in Shopware überschreitet.
Ergebnis:
Error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 20480 bytes)
Ursachen & Lösungen
1. Shopware Memory Limit zu niedrig
Die API oder der Indexer über das Backend läuft intern in PHP und stößt auf das memory_limit von 1 GB.
Für große Produktmengen/Indexierung reicht das nicht aus.
Lösung: Erhöhe das PHP memory_limit auf dem Shopware-Server z.B. auf 2GB oder mehr:
memory_limit = 2048M
Das kannst du in der php.ini oder im .htaccess (je nach Setup) setzen.
2. Indexer in zu großen Schritten
Die Sprünge der Offsets wachsen stark (z.B. von 24k auf 54k), möglicherweise werden zu viele Daten auf einmal verarbeitet.
Es gibt evtl. ein Limit in Shopware, wie viele Daten der Indexer in einem Request verarbeiten kann.
Lösung:
Prüfe, ob du die Batch-Größe in der Shopware-Indexer-Konfiguration anpassen kannst.
Oder mach Zwischenschritte mit kleineren Offsets (wenn möglich).
Manchmal gibt es in Shopware Settings, z.B. indexer_batch_size.
3. Alternative: Indexer per CLI laufen lassen
Shopware empfiehlt große Indexierungen via CLI (bin/console dal:refresh:index), nicht über API.
API-Indexierung ist für kleine bis mittlere Datenmengen gedacht.
Wenn möglich, nutze CLI oder serverseitige Tasks, um Memory-Probleme zu umgehen.