Such Index kann nicht generiert werden

Hallo zusammen,

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.

Leider bleibt das Problem weiterhin bestehen.

Kann mir jemand weiterhelfen?

Danke!

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.

Das Problem kann auch von einem Plugin ausgehen.

Timme selber schlägt zudem vor dies in die config.php zu integrieren:

‚search‘ => [
‚indexer‘ => [
‚batchsize‘ => 3250,
],
],

Wie genau würde ich da vorgehen?

Habe ich bereits angepasst, hilft leider nicht.

Wahrscheinlich muss dich dein Hoster unterstützen.
z.B. so

nicht vergessen am ende das Logging wieder auszuschalten

Wenn die SQL Abfrage ein vermeintliches Performance Problem hat, also syntaktisch richtig ist und ewig läuft, kann man auch mit

show full processlist;

die aktuell laufenden SQL Statements bei mysql oder mariadb einsehen.

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.

In den verschiedenen Log-Files findet sich kein Hinweis auf ein fehlerhaftes Plugin?

Guck mal ob ggf die ID den Fehler verursacht.

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.

Mal blöde Frage, aber welche MySQL Version benutzt ihr?

Wir benutzen MariaDB 10.3.37 glaube das ist Standardmäßig bei Timme so eingestellt. Zumindest wurde das von mir nicht extra angepasst.

Was genau meinst du? Wir hosten ja auch extern

Alles klar schaue ich mir an, danke!

Wir nutzen nicht die Shopware interne Suchfunktion sondern nutzen den Service doofinder

Das war leider nicht die Ursache des Problems, es besteht nach wie vor :pensive:

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.

Nur mal so als Hinweis: Du hast dein Beitrag im Forum für Showaere 5 gepostet.