Blog

Technologie

Magento – keine Produkte im Shop bei Indexerstellung

Ein sehr ungewöhnliches Problem ist uns bei einem größeren Magento Shop eines Kunden begegnet. Jedes Mal wenn in Magento die Indizes neu erstellt wurden, waren im Shop keine Produkte mehr verfügbar. Das ist natürlich mehr als ärgerlich, denn der Workaround, die Indizes nur in der Nacht neu zu bauen, ist bei einem Shop, der viele Produkte hat und diese häufig aktualisiert nicht sehr praktikabel.

Eine Auswertung des SQL-Query-Logs ergab erstmal nichts auffälliges, der ganze Prozess zur Indexerstellung lief in einer Transaktion ab. Bei einem genauen Blick und sorgfältiger Analyse stellte man fest, dass Magento im Model Mage_Index_Model_Mysql4_Abstract den SQL-Befehl „ALTER TABLE {$destTable} DISABLE KEYS“ immer ausführt, auch wenn die Storage-Engine von MySQL InnoDB ist. Diese Zeile existiert, um das nachfolgende INSERT zu beschleunigen, dies ist aber nur bei MyISAM notwendig. Unter InnoDB sorgt es dafür, dass ein implizierter Commit gemacht wird und damit die Indextabelle erstmal leer ist. Das Überschreiben des Models hat das Problem gelöst.

In der aktuellen Magento-Version ist das Problem behoben, aber nicht jeder will und kann seinen Shop gleich updaten.

zurück zur Übersicht