Geïndexeerde indexen zijn ongeldig en indexer_reindex_all_invalid worden constant uitgevoerd

Dit artikel biedt een mogelijke oplossing voor het probleem wanneer er voor uw site prestatieproblemen optreden die worden veroorzaakt door voortdurend opnieuw indexeren. Dit wordt veroorzaakt door de cron taak indexer_reindex_all_invalid die continu wordt uitgevoerd en caches die worden schoongemaakt op reindex .

Betrokken producten en versies

  • Adobe Commerce (cloud & on-premisse) 2.4.0+ (Aangezien Category Permissions een Adobe-Commerce-functie is, heeft dit geen invloed op de Magento Open Source.)

Probleem

In New Relic One foutlogboeken moeten indexer_update_all_views vele keren worden weergegeven met een tijd > 1 seconde (dat wil zeggen dat het iets verwerkt).

Oorzaak

Wanneer de belangrijkste Adobe Commerce-importer wordt uitgevoerd (handmatig of door cron ), wordt een set plug-ins voor meerdere kernmodules uitgevoerd om te bepalen welke indexen ongeldig moeten worden gemaakt.

De kwestie komt voor wanneer de Category Permissions module in Commerce Admin wordt toegelaten. Als dit waar is, dan maakt de stop van de module altijd de indexen van het Product & van de Categorie (en verbonden indexen) onbruikbaar wanneer het invoeren wordt uitgevoerd. Als de standaardimporttypen worden gecontroleerd, hebben ze allemaal invloed op Category Permissions . Ongeldige validatie wordt verwacht.

Wanneer een site B2B-modules heeft ingeschakeld, wordt Category Permissions ingeschakeld en vergrendeld als Shared Catalog is geactiveerd. Als u Shared Catalog uitschakelt, wordt Category Permissions ontgrendeld, maar wordt dit niet uitgeschakeld.

die cron controleert logboeken in uw MySQL gegevensbestand :

Als u zich aanmeldt in uw MySQL -database, kunnen ze uw cron log controleren op het reindex all indexes -proces.
Dit zou vele malen moeten verschijnen, maar de belangrijke factor is dat het proces één van twee mogelijke dingen doet.

Het proces kan slechts één van deze twee dingen doen:

  1. Niets: het zou 0 tot 1 seconde (één seconde of minder) duren - het proces controleert of het iets moet doen en dan stopt als het niets hoeft te doen.
  2. Reindex alles: Het duurt altijd even - meestal minuten.

Normaal gesproken wilt u veel exemplaren van het proces zien, maar met een uitvoeringstijd van minder dan 1 seconde.
Een handelaar kan daarom deze MySQL vraag gebruiken om transacties te vinden die meer dan 1 tweede nemen om in werking te stellen:

SELECT TIMESTAMPDIFF(SECOND, executed_at, finished_at) AS period FROM cron_schedule WHERE job_code = 'indexer_reindex_all_invalid' HAVING period > 1

U kunt zien hoe lang een periode door loopt wordt geregistreerd:

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;

Als dit u niet lang genoeg geeft om een juiste beoordeling te maken, dan kunt u de tijd verhogen een succesvol cron proces in het logboek na deze Cron wordt gehouden (geplande taken)gids en het verhogen van de Success History Lifetime waarde (het gebrek is slechts 60 minuten).

Oplossing

Breid Magento\CatalogPermissions\Model\Indexer\Plugin\Import uit, zodat de aangepaste importer niet wordt opgenomen in de methode afterImportSource .

    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;
    }

Hierbij is ENTITY_CODE de waarde die wordt gebruikt voor de parameter entiteitsnaam in het import.xml -bestand voor de aangepaste importer.

Gerelateerde lezing

vormt cron banenin de Gids van de Configuratie van de Verrichtingen van Adobe Commerce.

recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a