值班时看到索引器 Suspended,执行 reset、reindex 后恢复;第二天又停。反复 reset 相当于把报警灯按灭,并没有修导致任务中断的异常。

先取证,再改变状态

bin/magento indexer:status
bin/magento indexer:show-mode
SELECT * FROM indexer_state WHERE status='suspended';
SELECT * FROM mview_state ORDER BY updated DESC;

按索引器更新时间向前查看 Cron、system、exception 和数据库日志。磁盘满、临时表空间不足、OpenSearch只读、数据库连接中断,都可能让任务被保护性挂起。

检查锁是否真的跨进程共享

Application Lock 配置错误时,一个索引任务可能认为已有实例运行,或者多节点同时处理同一 changelog。确认所有节点使用一致的锁提供方、前缀和后端;如果使用数据库锁,再检查长事务与连接中断。

恢复顺序

  1. 停止制造积压或冲突的任务;
  2. 修复磁盘、搜索集群、数据库或锁根因;
  3. 记录 changelog 位置;
  4. 只 reset 受影响索引器;
  5. 低峰执行重建并观察下一个增量周期。

不要一上来 truncate changelog,它是增量索引的事实记录。验收不是 status 变 Ready,而是新增、改价、改库存都能由下一轮 Cron 推进版本,且 24 小时内不再进入 Suspended。