Shopware

Was Shopware im Hintergrund neu berechnet

17 Kern-Indexer in 6.6, 18 in 6.7. Sie entscheiden, ob eine Änderung im Shop ankommt — und der neue in 6.7 sitzt ausgerechnet an einem Feld, das schreibgeschützt ist.

Pixup MediaVeröffentlicht am 8 Min. Lesezeit
Prozessgrafik: Eine Produktänderung läuft über die EntityIndexerRegistry an drei Indexer, daneben die gezählten 17 und 18 Kern-Indexer.
Jede Änderung läuft über die Registry an die zuständigen Indexer — synchron oder in die Warteschlange.

Es gibt eine Sorte Fehlermeldung, die keine ist: Jemand pflegt einen Wert, speichert, ruft die Seite auf — und sieht den alten Stand. Kein Fehler, kein Hinweis, nichts im Log. In den meisten dieser Fälle ist der Wert längst gespeichert. Was fehlt, ist die Neuberechnung dessen, was daraus abgeleitet wird.

Dafür gibt es in Shopware eine eigene Schicht. Wir haben sie ausgelesen.

Wie viele Indexer es tatsächlich gibt

Über die EntityIndexerRegistry der beiden laufenden Kernel gezählt, getrennt nach Herkunft:

6.6.10.66.7.13.1
Indexer aus dem Kern1718
zusätzlich aus Erweiterungen01

Der Unterschied ist genau einer, und er ist aufschlussreich: In 6.7 kommt product.description_teaser.indexer hinzu.

Der neue Indexer und das schreibgeschützte Feld

Das Feld description_teaser ist in 6.7 WriteProtected. Ein Schreibzugriff von außen — über die Admin-API, über ein Importwerkzeug, über ein Übersetzungs-Plugin — wird abgewiesen. Gleichzeitig gibt es jetzt einen Indexer, der genau dieses Feld befüllt: Der Kern berechnet den Teaser selbst aus der Beschreibung.

Für Betreiber bedeutet das zweierlei. Erstens: Wer den Teaser bisher über eine Schnittstelle gepflegt hat, bekommt in 6.7 einen Fehler statt eines Werts. Zweitens: Wer ihn gar nicht gepflegt hat, bekommt plötzlich einen — abgeleitet aus der Beschreibung, ohne dass jemand darum gebeten hätte.

Wer den Versionswechsel plant, findet die übrigen Unterschiede in unserer Gegenüberstellung 6.7 wechseln oder bei 6.6 bleiben.

Was die wichtigsten Indexer tun

Die Namen sind selbsterklärend, ihre Wirkung nicht immer:

Indexerberechnet neumerkt man, wenn er fehlt
product.indexerPreise, Kategoriezuordnung, Streams, EigenschaftenProdukt fehlt in Kategorie oder Listing
product.search.indexerdie Suchbegriffe je ProduktProdukt ist über die Suche nicht auffindbar
category.indexerBaumstruktur, Pfade, ZuordnungenNavigation zeigt alte Struktur
media.indexerPfade und MetadatenBilder erscheinen nicht oder falsch
rule.indexerwelche Regeln auf welche Bereiche wirkenPreis- oder Versandregeln greifen nicht
product_stream.indexerdynamische ProduktgruppenStream bleibt leer oder veraltet

Die Suche ist der Fall, der am häufigsten auffällt — und der, bei dem am häufigsten am falschen Ende gesucht wird. Wir haben gemessen, warum die Shopware-Suche Produkte nicht findet; der Indexlauf ist einer der Gründe, aber nicht der einzige.

Drei Betriebsarten, drei Verhaltensweisen

Der entscheidende Punkt für den Betrieb ist nicht, welche Indexer es gibt, sondern wann sie laufen:

Sofort. Im einfachsten Fall läuft der Indexer direkt beim Speichern. Der Vorgang dauert dadurch länger, aber das Ergebnis ist unmittelbar da. Für kleine Kataloge ist das der unauffälligste Modus.

Über die Warteschlange. Der Standard im produktiven Betrieb: Die Aufgabe wird in die Warteschlange gelegt und von einem Worker abgearbeitet. Das Speichern bleibt schnell. Läuft kein Worker, passiert allerdings nichts — und genau das ist die häufigste Ursache für „die Änderung kommt nicht an".

Ausgeschaltet. Einzelne Indexer lassen sich für Massenimporte gezielt abschalten und danach einmal vollständig laufen lassen. Das ist sinnvoll, wenn 50.000 Produkte auf einmal kommen — und gefährlich, wenn jemand vergisst, sie wieder einzuschalten.

Zur Unterscheidung: Indexer sind nicht dasselbe wie geplante Aufgaben. Was Shopware an wiederkehrender Arbeit erledigt — Aufräumen, Sitemap, Newsletter, Löschfristen —, haben wir in Was Shopware im Hintergrund erledigt beschrieben. Indexer reagieren auf Änderungen, Tasks laufen nach Zeitplan.

Die Diagnose bei „Änderung kommt nicht an"

  1. Steht der Wert in der Datenbank? In der Verwaltung noch einmal öffnen. Steht er da, ist das Speichern nicht das Problem.
  2. Läuft ein Worker? Ohne laufenden Worker bleibt im Warteschlangenbetrieb jede Aufgabe liegen. Das betrifft Indexer, E-Mails und geplante Aufgaben gleichzeitig — wenn mehrere Dinge auf einmal „nicht funktionieren", ist das fast immer die Ursache.
  3. Ist der Indexer abgeschaltet? Nach Importen oder Migrationen bleibt das gern stehen.
  4. Einmal gezielt neu bauen. Für einzelne Bereiche genügt ein Lauf des zuständigen Indexers; ein vollständiger Neuaufbau ist bei großen Katalogen teuer und selten nötig.

Grenzen dieser Messung

Gezählt haben wir die registrierten Indexer zweier laufender Installationen, nicht ihre Laufzeiten und nicht ihre Last. Die Zahlen gelten für den Kern plus die dort installierten Erweiterungen; ein Shop mit anderen Plugins hat andere. Wie lange ein vollständiger Neuaufbau bei welcher Katalogröße dauert, ist eine eigene Frage und hier nicht beantwortet.

Häufige Fragen

Was ist ein Indexer in Shopware?
Ein Dienst, der abgeleitete Daten neu berechnet, nachdem sich etwas geändert hat — zum Beispiel Suchbegriffe, Kategoriezuordnungen oder Preise eines Produkts. Die Rohdaten stehen sofort in der Datenbank, die abgeleiteten erst nach dem Lauf.
Wie viele Indexer hat der Shopware-Kern?
In unserer Messung 17 in 6.6.10.6 und 18 in 6.7.13.1, ausgelesen über die EntityIndexerRegistry der laufenden Installation. Erweiterungen können weitere mitbringen.
Warum ist meine Änderung im Shop noch nicht sichtbar?
Weil der zuständige Indexer noch nicht gelaufen ist. Im Warteschlangenbetrieb braucht es einen laufenden Worker; ohne ihn bleibt die Aufgabe liegen und der Shop zeigt weiter den alten abgeleiteten Stand.
Was ist neu in Shopware 6.7?
Ein zusätzlicher Indexer für das Feld description_teaser. Dasselbe Feld ist in 6.7 schreibgeschützt, was bei Schnittstellen und Übersetzungswerkzeugen zu abgewiesenen Schreibzugriffen führen kann.
WeiterführendShopware-Support