索引失效,indexer_reindex_all_invalid不断运行

当网站因不断重新索引而出现性能问题时,本文会提供相应的可能解决方法。 这是由于cron作业indexer_reindex_all_invalid持续运行并在reindex上清理了缓存所导致。

受影响的产品和版本

  • Adobe Commerce (cloud & on-premises) 2.4.0+ (由于​ Category Permissions ​是仅限Commerce的Adobe功能,因此不会影响Magento Open Source。)

问题

在New Relic One中,错误日志应显示indexer_update_all_views运行多次,时间> 1秒(即,它正在处理某些内容)。

原因

运行核心Adobe Commerce导入程序(手动或由cron运行)时,将执行一组跨多个核心模块的插件,以确定应该使哪些索引失效。

在Commerce Admin中启用​ Category Permissions ​模块时出现问题。 如果为true,则模块插件在执行导入时始终使Product & Category索引(以及链接索引)失效。 如果检查标准导入类型,则它们都会影响​ Category Permissions。 预期无效。

此外,当站点启用了B2B模块时,如果激活了​ Shared Catalog,它将打开并锁定​ Category Permissions。 关闭​ Shared Catalog ​将解锁​ Category Permissions,但不会将其关闭。

正在检查MySQL数据库中的cron日志

如果您登录到MySQL数据库,他们可以查看cron日志中的​ reindex all indexes ​进程。
此​ 应该 ​出现很多次,但重要因素是该进程执行了两种可能操作之一。

该过程只能执行以下两项操作之一:

  1. 无:0到1秒(1秒或更短) — 该进程检查它是否需要执行任何操作,如果它不需要执行任何操作,则停止。
  2. Reindex所有内容:始终需要时间 — 通常为分钟。

通常情况下,您会希望看到流程多次出现,但执行时间小于1秒。
因此,商家可以使用此MySQL查询查找需要​ 超过1秒 ​才能运行的交易:

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

通过运行以下命令,您可以查看期间记录时间:

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;

如果这没有给您足够长的时间来进行适当的评估,则可以在此Cron (计划任务)指南之后增加在日志中保留成功的cron进程的时间,并增加​ Success History Lifetime ​值(默认值为60分钟)。

解决方案

扩展Magento\CatalogPermissions\Model\Indexer\Plugin\Import,使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;
    }

其中,ENTITY_CODE是用于自定义导入器的import.xml文件中的实体名称参数的值。

相关阅读

Adobe Commerce操作配置指南中的配置 cron 作业

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