Les index invalidés et indexer_reindex_all_invalid s’exécutent constamment

Cet article fournit une solution à ce problème lorsque votre site présente des problèmes de performances causés par une réindexation constante. Cela est dû au fait que la tâche cron indexer_reindex_all_invalid en cours d’exécution et que les caches sont nettoyés lors de la réindexation.

Description description

Environnement

Adobe Commerce (cloud et On-premise) 2.4.0+ (Comme autorisations de catégorie est une fonctionnalité Adobe-Commerce uniquement, elle n’affectera pas Magento Open Source.)

Problème

Dans New Relic One, les journaux d’erreurs doivent afficher des indexer_update_all_views s’exécutant plusieurs fois en une seconde > (par exemple, il est en train de traiter un élément).

Cause

Lorsque l’importateur d’Adobe Commerce de base est exécuté (manuellement ou par cron), un ensemble de modules externes répartis sur plusieurs modules principaux est exécuté pour déterminer les index à invalider.

Le problème se produit lorsque le module Autorisations des catégories est activé dans l’administration Commerce. Si la valeur est définie sur « true », le plug-in du module invalide toujours les index de produit et de catégorie (et les index liés) lors de l’exécution d’une importation. Si les types d’importation standard sont examinés, ils affectent tous les autorisations de catégorie. Une invalidation est attendue.

En outre, lorsque les modules B2B sont activés sur un site, si Catalogue partagé est activé, il active et verrouille Autorisations de catégorie. La désactivation de Catalogue partagé déverrouille Autorisations de catégorie, mais ne la désactive pas.

Vérification des journaux cron dans votre base de données MySQL :

Si vous vous connectez à votre base de données MySQL, ils peuvent vérifier votre journal de cron pour le processus réindexer tous les index.
Cela devrait apparaître plusieurs fois, mais le facteur important est que le processus fait l'une de deux choses possibles.

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

  1. Rien : Cela prendrait de 0 à 1 seconde (une seconde ou moins) - le processus vérifie s’il doit faire quelque chose, puis s’arrête s’il n’a rien à faire.
  2. Tout réindexer : cela prendra toujours du temps, généralement quelques minutes.

Normalement, vous souhaiteriez 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 qui mettent plus d’une seconde à s’exécuter :

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 d’enregistrement d’une période 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 correcte, vous pouvez augmenter la durée de conservation d’un processus de cron réussi dans le journal en suivant ce guide Cron (tâches planifiées) et en augmentant la valeur Durée de vie de l’historique de succès (la valeur par défaut est de 60 minutes uniquement).

Résolution resolution

Étendez Magento\CatalogPermissions\Model\Indexer\Plugin\Import afin que la méthode afterImportSource exclue 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 du nom d’entité dans le fichier import.xml pour l’importateur personnalisé.

Lecture connexe

Configurez les tâches cron dans le Guide de configuration des opérations Adobe Commerce.

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