You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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数据库

恢复索引正常运行的步骤

  1. 终止阻塞的数据库进程
    • 登录数据库,执行命令排查锁定进程:
      SHOW PROCESSLIST;
      
    • 找到状态为Locked或Waiting for table metadata lock的进程,执行终止命令:
      KILL [进程ID];
      
  2. 手动重建卡顿索引
    • 先将索引设置为定时模式,避免实时更新冲突:
      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
      
  3. 修复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;
      

问题根源排查方向

  • 数据库死锁与锁日志分析
    • 开启数据库日志记录死锁与慢查询:
      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;
      
  • 表结构与数据量排查
    • 统计索引表数据量,确认是否因数据过载导致卡顿:
      SELECT COUNT(*) FROM catalog_category_product_index_store1;
      
    • 检查表索引结构,清理冗余索引:
      SHOW INDEX FROM catalog_category_product_index_store1;
      

内容的提问来源于stack exchange,提问作者Igor Figueiredo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:55:49