后台保存商品一直等待,indexer:status 全部是 Ready。MySQL 却显示请求在等待价格索引临时表的 metadata lock。

SHOW FULL PROCESSLIST;
SELECT trx_id, trx_started, trx_mysql_thread_id, trx_query
FROM information_schema.innodb_trx
ORDER BY trx_started;

Ready 只说明 Magento 记录的索引状态,不代表某次被中断的 CLI、导入脚本或数据库会话已经提交。先定位最老事务对应的应用进程、主机和操作,再决定是否终止;不要看到 lock 就批量 kill 连接。

常见起因包括手工脚本开启事务后异常退出、部署时同时运行全量 reindex,以及监控工具长时间保持未提交查询。处理持锁会话后,单独执行价格索引并观察是否正常完成。

预防措施是给发布流程加互斥锁,避免商品批量更新与全量索引重叠;自定义脚本使用 try/finally 回滚。复测除了保存速度,还要检查价格、分组价和网站范围价格。