Index invalidés et indexer_reindex_all_invalid exécutés en permanence

Cet article fournit une solution possible au problème lorsque les problèmes de performances de votre site sont dus à une réindexation constante. Cela est dû à la tâche cron indexer_reindex_all_invalid qui s’exécute en continu et aux caches nettoyés sur reindex.

Produits et versions concernés

  • Adobe Commerce (cloud et sur site) 2.4.0+ (comme Category Permissions est une fonctionnalité Commerce Adobe uniquement, cela n’affecte pas le Magento Open Source.)

Problème

Dans New Relic One, les journaux d’erreurs doivent afficher indexer_update_all_views s’exécutant plusieurs fois avec une durée supérieure à 1 seconde (c’est-à-dire qu’il traite quelque chose).

Cause

Lorsque l’importateur Adobe Commerce principal est exécuté (manuellement ou par cron), un ensemble de modules externes sur plusieurs modules principaux est exécuté pour déterminer les index qui doivent être invalidés.

Le problème se produit lorsque le module Category Permissions est activé dans Commerce Admin. Si cela est vrai, le module externe du module invalide toujours les index Produit et Catégorie (et les index liés) lorsqu’un import est exécuté. Si les types d’importation standard sont examinés, ils ont tous une incidence sur Category Permissions. L’invalidation est attendue.

En outre, lorsqu’un site a des modules B2B activés, si Shared Catalog est activé, il s’active et verrouille Category Permissions. La désactivation de Shared Catalog déverrouille Category Permissions, mais ne la désactive pas.

Vérifiez que cron se connecte à votre base de données MySQL :

Si vous vous connectez à votre base de données MySQL, ils peuvent vérifier votre journal cron pour le processus reindex all indexes.
Ce should apparaît plusieurs fois, mais le facteur important est que le processus effectue l’une des deux tâches possibles.

Le processus ne peut effectuer qu’une des deux opérations suivantes :

  1. Rien : cela prendrait 0 à 1 seconde (une seconde ou moins) - le processus vérifie s’il a besoin de faire quoi que ce soit, puis s’arrête s’il n’a pas besoin de faire quoi que ce soit.
  2. Reindex tout : cela prendra toujours du temps, généralement quelques minutes.

Normalement, vous souhaitez voir de nombreuses occurrences du processus, mais avec un temps d’exécution inférieur à 1 seconde.
Un commerçant peut donc utiliser cette requête MySQL pour rechercher les transactions dont l'exécution prend plus d'une seconde :

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

Vous pouvez voir la durée pendant laquelle une période est enregistrée en exécutant :

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;

Si cela ne vous donne pas une période suffisamment longue pour effectuer une évaluation appropriée, vous pouvez augmenter le temps de conservation d’un processus cron réussi dans le journal suivant ce guide Cron (tâches planifiées) et augmenter la valeur Success History Lifetime (la valeur par défaut est de seulement 60 minutes).

Solution

Étendez Magento\CatalogPermissions\Model\Indexer\Plugin\Import de sorte que la méthode afterImportSource exclut l’importateur personnalisé.

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

ENTITY_CODE est la valeur utilisée pour le paramètre de nom d’entité dans le fichier import.xml de l’importateur personnalisé.

Lecture connexe

Configurez cron jobs dans le Guide de configuration des opérations Adobe Commerce.

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