Magento 2.4.5:表死锁与catalog_product_category索引卡顿问题求助
Magento 2.4.5 索引死锁与表锁定问题排查及恢复方案
问题描述
catalog_category_product_index_store1_replica表发生死锁catalog_product_category索引卡顿无响应catalog_category_product_index_store1表被锁定,直接导致网站崩溃
已采取的临时处理措施
- 重启应用服务
- 重启RDS数据库
恢复索引正常运行的步骤
- 终止阻塞的数据库进程
- 登录数据库,执行命令排查锁定进程:
SHOW PROCESSLIST; - 找到状态为
Locked或Waiting for table metadata lock的进程,执行终止命令:KILL [进程ID];
- 登录数据库,执行命令排查锁定进程:
- 手动重建卡顿索引
- 先将索引设置为定时模式,避免实时更新冲突:
bin/magento indexer:set-mode schedule catalog_product_category - 执行索引重建:
bin/magento indexer:reindex catalog_product_category - 重建完成后,可根据业务需求恢复实时更新模式:
bin/magento indexer:set-mode realtime catalog_product_category
- 先将索引设置为定时模式,避免实时更新冲突:
- 修复Replica表数据一致性
- 清空并同步主表数据到Replica表:
TRUNCATE TABLE catalog_category_product_index_store1_replica; INSERT INTO catalog_category_product_index_store1_replica SELECT * FROM catalog_category_product_index_store1;
- 清空并同步主表数据到Replica表:
问题根源排查方向
- 数据库死锁与锁日志分析
- 开启数据库日志记录死锁与慢查询:
SET GLOBAL slow_query_log = 1; SET GLOBAL long_query_time = 2; SET GLOBAL innodb_print_all_deadlocks = 1; - 查看InnoDB状态获取死锁详情:
SHOW ENGINE INNODB STATUS;
- 开启数据库日志记录死锁与慢查询:
- Magento任务冲突检查
- 核对crontab定时任务与索引重建任务的执行时间,排查是否存在资源竞争
- 查看Magento系统日志(
var/log/system.log、var/log/exception.log)中的索引相关报错
- 数据库配置优化验证
- 检查InnoDB核心参数(如
innodb_lock_wait_timeout、innodb_buffer_pool_size)是否适配当前数据量,可临时调整锁等待时间:SET GLOBAL innodb_lock_wait_timeout = 60;
- 检查InnoDB核心参数(如
- 表结构与数据量排查
- 统计索引表数据量,确认是否因数据过载导致卡顿:
SELECT COUNT(*) FROM catalog_category_product_index_store1; - 检查表索引结构,清理冗余索引:
SHOW INDEX FROM catalog_category_product_index_store1;
- 统计索引表数据量,确认是否因数据过载导致卡顿:
内容的提问来源于stack exchange,提问作者Igor Figueiredo
相关产品推荐
相关产品推荐

