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:

  1. 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.
  2. 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.

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f