索引失效,indexer_reindex_all_invalid會持續執行

本文提供當網站因持續重新索引而發生效能問題時,此問題的可能因應措施。 這是因為cron工作indexer_reindex_all_invalid持續執行並在reindex上清除快取所造成。

受影響的產品和版本

  • Adobe Commerce (雲端與內部部署) 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 ​模組時,就會發生問題。 如果成立,則模組外掛程式在執行匯入時一律會讓產品與類別索引(以及連結的索引)失效。 如果檢查標準匯入型別,則所有型別都會影響​ Category Permissions。 預期會失效。

此外,當網站啟用B2B模組時,如果已啟動​ Shared Catalog,它會開啟並鎖定​ Category Permissions。 關閉​ Shared Catalog ​會解鎖​ Category Permissions,但不會將其關閉。

正在檢查您MySQL資料庫中的cron記錄檔

如果您登入您的MySQL資料庫,他們可以檢查您的cron記錄檔以取得​ reindex all indexes ​處理序。
此​ 應該 ​出現許多次,但重要因素是該處理序會執行兩種可能的操作之一。

該程式只能執行下列兩個操作之一:

  1. 無:這需要0到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