Indizes invalidiert und indexer_reindex_all_invalid werden ständig ausgeführt
Dieser Artikel bietet eine mögliche Problemumgehung, wenn Ihre Site Leistungsprobleme aufweist, die durch eine ständige Neuindizierung verursacht werden. Dies ist darauf zurückzuführen, dass der Cron-Auftrag indexer_reindex_all_invalid kontinuierlich ausgeführt und die Caches bei der Neuindizierung bereinigt werden.
Beschreibung description
Umgebung
Adobe Commerce (Cloud und On-Premises) 2.4.0+ (Da Kategorieberechtigungen eine Funktion ist, die nur Adobe Commerce betrifft, hat sie keine Auswirkungen auf Magento Open Source.)
Problem
In New Relic One sollten Fehlerprotokolle indexer_update_all_views zeigen, die oft mit einer Zeit > 1 Sekunde ausgeführt werden (z. B. wenn etwas verarbeitet wird).
Ursache
Wenn der Adobe Commerce-Core-Importer ausgeführt wird (manuell oder durch Cron), wird ein Satz von Plug-ins über mehrere Kernmodule hinweg ausgeführt, um zu bestimmen, welche Indizes ungültig gemacht werden sollen.
Das Problem tritt auf, wenn Modul Kategorieberechtigungen“ in Commerce Admin aktiviert ist. Wenn dies „true“ ist, werden die Produkt- und Kategorieindizes (und verknüpften Indizes) immer durch das Plug-in des Moduls ungültig, wenn ein Import ausgeführt wird. Wenn die standardmäßigen Importtypen untersucht werden, wirken sie sich alle auf Kategorieberechtigungen aus. Invalidierung wird erwartet.
Wenn auf einer Website B2B-Module aktiviert sind und Shared Catalog aktiviert ist, werden außerdem „Kategorieberechtigungen“ aktiviert gesperrt. Durch Deaktivieren von Freigegebener Katalog werden Kategorieberechtigungen entsperrt, aber nicht deaktiviert.
Überprüfen von Cron-Protokollen in Ihrer MySQL-Datenbank:
Wenn Sie sich bei Ihrer MySQL-Datenbank anmelden, können diese Ihr cron auf den Prozess Neuindizierung aller ) überprüfen.
Das sollte oft vorkommen, aber der wichtige Faktor ist, dass der Prozess eine von zwei möglichen Dingen tut.
Der Prozess kann nur eine der beiden folgenden Aktionen durchführen:
- Nichts: Es würde 0 bis 1 Sekunde (eine Sekunde oder weniger) dauern - der Prozess prüft, ob er etwas tun muss, und stoppt dann, wenn er nichts tun muss.
- Alles neu indizieren: Es braucht immer Zeit - normalerweise Minuten.
Normalerweise würden Sie viele Vorkommnisse des Prozesses sehen wollen, aber mit einer Ausführungszeit von weniger als 1 Sekunde.
Ein Händler kann daher diese MySQL-Abfrage verwenden, um Transaktionen zu finden, deren Ausführung mehr als 1 Sekunde dauert:
SELECT TIMESTAMPDIFF(SECOND, executed_at, finished_at) AS period FROM cron_schedule WHERE job_code = 'indexer_reindex_all_invalid' HAVING period > 1
Sie können sehen, wie lange ein Zeitraum aufgezeichnet wird, indem Sie Folgendes ausführen:
SELECT executed_at FROM cron_schedule WHERE job_code = 'indexer_reindex_all_invalid' AND executed_at IS NOT NULL ORDER BY executed_at ASC LIMIT 1;
Wenn Ihnen dies nicht genügend Zeit für eine korrekte Bewertung gibt, können Sie die Zeit, die ein erfolgreicher cron im Protokoll gespeichert wird, nach diesem Cron (Geplante Aufgaben)-Handbuch erhöhen und den Wert Lebensdauer des Erfolgsverlaufs erhöhen (der Standardwert beträgt nur 60 Minuten).
Auflösung resolution
Erweitern Sie Magento\CatalogPermissions\Model\Indexer\Plugin\Import so, dass die afterImportSource den benutzerdefinierten Importer ausschließt.
public function afterImportSource(\Magento\ImportExport\Model\Import $subject, $import)
{
if ($this->config->isEnabled() && $subject->getEntity() !== 'ENTITY_CODE') {
$this->indexerRegistry->get(\Magento\CatalogPermissions\Model\Indexer\Category::INDEXER_ID)->invalidate();
$this->indexerRegistry->get(\Magento\CatalogPermissions\Model\Indexer\Product::INDEXER_ID)->invalidate();
}
return $import;
}
Dabei ist ENTITY_CODE der Wert, der für den Parameter „Entity Name“ in der import.xml für das benutzerdefinierte Import-Tool verwendet wird.
Verwandtes Lesen
Konfigurieren von Cron-Aufträgen im Adobe Commerce Operations Configuration Guide.