索引失效,且索引器_reindex_all_invalid會持續執行

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

說明 description

環境

Adobe Commerce (雲端與內部部署) 2.4.0+ (由於 類別許可權 是僅限Adobe-Commerce的功能,因此不會影響Magento Open Source)。

問題

在New Relic One中,錯誤記錄檔應顯示indexer_update_all_views執行許多次,時間為> 1秒(例如,它正在處理某些專案)。

原因

當核心Adobe Commerce匯入工具執行時(手動或透過cron),則會執行跨多個核心模組的一組外掛程式,以決定應該使哪些索引失效。

在Commerce管理中啟用 類別許可權 模組時,就會發生問題。 如果成立,則模組外掛程式在執行匯入時一律會讓產品與類別索引(以及連結的索引)失效。 如果檢查標準匯入型別,則所有型別都會影響 類別許可權。 預期會失效。

此外,當網站啟用B2B模組時,如果 共用目錄 已啟用,它會開啟並鎖定 類別許可權。 關閉 共用目錄 將會解鎖 類別許可權,但不會將其關閉。

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

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

該程式只能執行下列兩個操作之一:1) 無:這需要0到1秒(一秒以內) — 流程會檢查它是否需要執行任何操作,如果不需要執行任何操作,則會停止。 2) 重新索引所有內容:這永遠需要時間,通常只需要幾分鐘。通常您會想要檢視許多次處理的發生次數,但執行時間少於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處理序的時間,並增加 成功歷程記錄存留期 值(預設值只有60分鐘)。## 解決方法 resolution擴充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
3d58f420-19b5-47a0-a122-5c9dab55ec7f