Indexen har gjorts ogiltig och indexer_reindex_all_invalid körs hela tiden
Den här artikeln innehåller en möjlig lösning på problemet när webbplatsen har prestandaproblem som orsakas av konstant omindexering. Detta orsakas av att cron-jobbet indexer_reindex_all_invalid
körs kontinuerligt och att cacheminnen rensas vid omindexering.
Beskrivning description
Miljö
Adobe Commerce (moln och lokalt) 2.4.0+ (Eftersom kategoribehörigheter endast är för Adobe-Commerce påverkar det inte Magento Open Source.)
Problem
I New Relic One-felloggar ska indexer_update_all_views
visas som körs många gånger med en tid på >
1 sekund (till exempel bearbetas något).
Orsak
När Adobe Commerce-importfunktionen körs (manuellt eller cron) utförs en uppsättning plugin-program för flera kärnmoduler för att avgöra vilka index som ska ogiltigförklaras.
Problemet inträffar när modulen Kategoribehörigheter är aktiverad i Commerce Admin. Om detta är sant, ogiltigförklaras alltid indexen för produkt och kategori (och länkade index) i modulen när en import utförs. Om standardimporttyperna undersöks påverkar de alla kategoribehörigheter. Invalidering förväntas.
Om Delad katalog aktiveras när B2B-moduler är aktiverade på en webbplats aktiveras den och kategoribehörigheter låses. Om du stänger av Delad katalog låses kategoribehörigheter upp, men det stängs inte av.
Kontrollerar cron-loggar i MySQL-databasen:
Om du loggar in i din MySQL-databas kan de kontrollera cron
-loggen för att se om alla index-processer finns.
ska visas flera gånger, men den viktiga faktorn är att processen gör en av två möjliga saker.
Processen kan bara göra något av följande:
- Ingenting: Det tar 0 till 1 sekund (en sekund eller mindre). Processen kontrollerar om den behöver göra något och stoppar sedan om den inte behöver göra något.
- Indexera om allt: Det tar alltid tid - vanligtvis minuter.
Vanligtvis vill du se många förekomster av processen, men med en körningstid på mindre än 1 sekund.
En handlare kan därför använda denna MySQL-fråga för att hitta transaktioner som tar mer än 1 sekund att köra:
SELECT TIMESTAMPDIFF(SECOND, executed_at, finished_at) AS period FROM cron_schedule WHERE job_code = 'indexer_reindex_all_invalid' HAVING period > 1
Du kan se hur lång tid en period spelas in genom att köra:
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;
Om detta inte ger dig tillräckligt lång tid för att göra en korrekt bedömning kan du öka tiden som en lyckad cron
-process sparas i loggen efter den här Cron (schemalagda aktiviteter)-guiden och öka värdet för Success History Lifetime (standardvärdet är bara 60 minuter).
Upplösning resolution
Utöka Magento\CatalogPermissions\Model\Indexer\Plugin\Import
så att metoden afterImportSource
exkluderar den anpassade importeraren.
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;
}
Där ENTITY_CODE
är det värde som används för entitetsnamnparametern i filen import.xml
för den anpassade importören.
Relaterad läsning
Konfigurera cron-jobb i Adobe Commerce Operations Configuration Guide.