資料庫的變更不會反映在店面上
本文提供解決方案,以避免套用實體更新時的延遲或中斷。 這包括如何避免變更記錄表過大,以及如何設定MySQL資料表觸發程式。
受影響的產品和版本:
- 雲端基礎結構上的Adobe Commerce 2.2.x、2.3.x
- Adobe Commerce內部部署2.2.x、2.3.x
問題
您在資料庫中所做的變更不會反映在店面上,或是在應用實體更新時出現嚴重延遲。 可能受影響的實體包括產品、類別、價格、存貨、目錄規則、銷售規則和目標規則。
原因
如果您的索引子是設定為依排程更新,則問題可能是由一或多個變更記錄檔過大,或未設定MySQL觸發器的資料表所造成。
超大變更記錄表
如果indexer_update_all_views
cron工作未成功完成多次,變更記錄表就會變得很大。
變更日誌表格是用來追蹤實體變更的資料庫表格。 只要變更未套用(由indexer_update_all_views
cron工作執行),記錄就會儲存在變更記錄表中。 Adobe Commerce資料庫中有多個變更記錄表,它們會根據下列模式命名: INDEXER_TABLE_NAME + '_cl',例如catalog_category_product_cl
、catalog_product_category_cl
。 您可在我們的開發人員檔案中的索引總覽> Mview文章中,找到有關如何在資料庫中追蹤變更的更多詳細資訊。
MySQL資料庫觸發程式未設定
如果在新增或變更實體(產品、類別、目標規則等)之後,您可能會懷疑未設定資料庫觸發程式 — 不會將任何記錄新增到對應的變更記錄表中。
解決方案
避免變更記錄檔表格過大
請確定indexer_update_all_views
cron工作一律成功完成。
您可以使用下列SQL查詢來取得indexer_update_all_views
cron作業的所有失敗執行個體:
select * from cron_schedule where job_code = "indexer_update_all_views" and status
<> "success" and status <> "pending";
或者,您可以搜尋indexer_update_all_views
專案,以在記錄中檢查其狀態:
<install_directory>/var/log/cron.log
— 適用於2.3.1+和2.2.8+版<install_directory>/var/log/system.log
— 適用於舊版
重新設定MySQL資料表觸發程式
若要設定遺失的MySQL資料表觸發程式,您必須重新設定索引子模式:
- 切換至「儲存時」。
- 切換回「依排程」。
使用以下命令來執行此操作。
php bin/magento indexer:set-mode {realtime|schedule} [indexerName]
相關閱讀
- 我們的支援知識庫中有MySQL 個資料表太大
- 索引: Mview (在開發人員檔案中)
- 在Commerce實作行動手冊中修改資料庫表格的最佳實務