Indizes sorgen in Magento öfter für Ärger – speziell wenn der Neuaufbau mit einem undefinierten Fehler stoppt. Die Indizes beschleunigen Magento deutlich – leider sorgen sie auch öfter für Probleme:
Indexfehler in Magento

Eine vernünftige Fehlermeldung, mit der man auf Fehlersuche gehen könnte, gibt es im Administrationsbereich leider nicht. Es gibt aber dennoch eine Möglichkeit, eine Fehlermeldung zu erhalten: Über die Shell bzw. Konsole, sofern man darauf Zugriff hat. Das Indexer-Skript befindet sich im Verzeichnis /shell/ direkt unterhalb des Magento-Hauptverzeichnis und wird, je nach Serverkonfiguration, wie folgt aufgerufen:

Den Status der Indizes erhält man über:

Der Indizierungsprozess wird angestoßen über den Aufruf

Soll nur ein Index angestoßen werden, kann man als Parameter noch den Code des Index angeben, z.B.

Den passenden Code erhält man über die Datenbanktabelle "index_process".

Hilfreiche Fehlermeldung bei Indexfehlern

Eine Fehlermeldung wird hierbei ausgegeben, mit der man auf Fehlersuche gehen kann.
Häufig liegt das Problem in inkonsistenten Daten in der Datenbank. Aktuelles Beispiel ist der folgende Fehler mit dem Index "Kategorie Artikel".

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (catalog_category_product_index, CONSTRAINT FK_CATALOG_CATEGORY_PROD_IDX_CATEGORY_ENTITY FOREIGN KEY (category_id) REFERENCES catalog_category_entity (entity_id)

Der Fehler sagt aus, dass eine so genannte Constraint, eine zwingende Beziehung zwischen den Daten zweier Datenbanktabellen, verletzt ist. In diesem Fall ist es eine Kategorie-Id in der Verknüpfungs­tabelle catalog_category_product, für die keine passende Kategorie in der Tabelle catalog_category_entity mehr existiert. Hier hilft folgende SQL-Abfrage, die in der Shell oder z.B. in phpMyAdmin eingegeben werden kann:

Ergebnis dieser Abfrage sind die IDs der fehlenden Kategorien. Die zugehörigen Datensätze in catalog_category_product können bedenkenlos gelöscht werden. Analog funktioniert das auch, falls nicht Kategorien, sondern Produkte nicht (mehr) vorhanden sind:

Anschließend lässt sich der Index üblicherweise problemlos wieder aufbauen.

Vielen Dank an dieser Stelle an Damian Luszczymak, der den Anstoß hierzu gegeben hat.

Andreas von Studnitz

Autor: Andreas von Studnitz

Andreas von Studnitz ist Diplom-Informatiker, Magento-Entwickler und Geschäftsführer von integer_net. Seine Schwerpunkte sind Entwicklung, Beratung und die Durchführung von Schulungen. Er ist Magento 2 Certified Professional Developer Plus und hat darüber hinaus weitere Magento Zertifizierungen für Magento 1 und Magento 2. Sowohl im Jahr 2019 als auch 2020 wurde Andreas als Magento Master in der Kategorie „Mentor“ ausgezeichnet.

Mehr Informationen