Gli indici invalidati e indexer_reindex_all_invalid vengono eseguiti costantemente

Questo articolo fornisce una possibile soluzione a questo problema quando il sito presenta problemi di prestazioni causati da una reindicizzazione costante. Ciò è dovuto all'esecuzione continua del processo cron indexer_reindex_all_invalid e alla pulizia delle cache durante la reindicizzazione.

Descrizione description

Ambiente

Adobe Commerce (cloud e on-premise) 2.4.0+ (poiché Autorizzazioni categoria è una funzione esclusiva di Adobe Commerce, non influirà su Magento Open Source).

Problema

Nei registri errori di New Relic One, indexer_update_all_views dovrebbe essere in esecuzione molte volte con un tempo > 1 secondo (ad esempio, sta elaborando qualcosa).

Causa

Quando l’importazione core di Adobe Commerce viene eseguita (manualmente o tramite cron), viene eseguito un set di plug-in tra più moduli core per determinare quali indici devono essere invalidati.

Il problema si verifica quando il modulo Autorizzazioni categoria è abilitato in Amministrazione Commerce. Se questo è vero, allora il plug-in del modulo invalida sempre gli indici di prodotto e categoria (e gli indici collegati) quando viene eseguita un’importazione. Se vengono esaminati i tipi di importazione standard, tutti influiscono sulle autorizzazioni categoria. È previsto l’annullamento della validità.

Inoltre, quando un sito ha moduli B2B abilitati, se Catalogo condiviso è attivato, si attiva e blocca Autorizzazioni categoria. Disattivando Catalogo condiviso verranno sbloccate Autorizzazioni categoria, ma non disattivate.

Verifica dei registri cron nel database MySQL:

Se accedi al database MySQL, possono controllare il registro cron per il processo reindicizza tutti gli indici.
dovrebbe comparire molte volte, ma il fattore importante è che il processo fa una delle due cose possibili.

Il processo può eseguire solo una di queste due operazioni:

  1. Niente: ci vorrebbe da 0 a 1 secondo (un secondo o meno) - il processo controlla per vedere se deve fare qualcosa e poi si interrompe se non ha bisogno di fare nulla.
  2. Reindicizza tutto: ci vorrà sempre del tempo, in genere minuti.

Normalmente si desidera visualizzare molte occorrenze del processo, ma con un tempo di esecuzione inferiore a 1 secondo.
Un esercente può quindi utilizzare questa query MySQL per trovare le transazioni che richiedono più di 1 secondo per l'esecuzione:

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

Puoi vedere per quanto tempo viene registrato un periodo eseguendo:

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;

Se non si dispone di un periodo di tempo sufficiente per effettuare una valutazione corretta, è possibile aumentare il tempo di conservazione di un processo cron completato nel registro che segue questa guida Cron (attività pianificate) e aumentare il valore Durata cronologia operazioni riuscite (il valore predefinito è solo 60 minuti).

Risoluzione resolution

Estendere Magento\CatalogPermissions\Model\Indexer\Plugin\Import in modo che il metodo afterImportSource escluda l'importazione personalizzata.

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

Dove ENTITY_CODE è il valore utilizzato per il parametro del nome entità nel file import.xml per l'importazione personalizzata.

Lettura correlata

Configurare i processi cron nella Guida alla configurazione delle operazioni di Adobe Commerce.

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