首页 > 解决方案 > 删除大表上的查询需要很长时间且超出错误锁定等待超时

问题描述

在一个存储过程中,我正在从一个大约有大约。62,00,00,000 行。在存储过程中删除记录的查询是:

REPEAT
    DO SLEEP(2);
    DELETE FROM EXAM WHERE FKEXAMEVENTID=eventID ORDER BY ID LIMIT limit_cnt;
UNTIL ROW_COUNT()=0 END REPEAT;

limit_cnt设置为 10,000,根据WHERE子句要删除的行是 3,51,54,226。

当执行开始时,我可以看到system lock很长时间的状态,同时如果我执行SHOW ENGINE INNODB STATUS,那么我发现了这个

---事务 1337539617,活动 24742 秒获取行 mysql 表正在使用 1,锁定 1 2865309 锁定结构,堆大小 296810024,127249417 行锁定,撤消日志条目 38722014 MySQL 线程 id 2088760,OS 线程句柄 0x7fdaa9ff7 ,查询 id 1714447623 com.prod.mysql 10.10.10。dbguru System lock DELETE FROM EXAM WHERE FKEXAMEVENTID=eventID ORDER BY ID LIMIT limit_cnt

我可以updating在很短的时间内看到状态,然后system lock在 6-7 小时后再次出现状态。我收到错误lock wait timeout exceeded try restarting transaction

如何使删除过程更快?

标签: mysql

解决方案


推荐阅读