mysql - 删除大表上的查询需要很长时间且超出错误锁定等待超时
问题描述
在一个存储过程中,我正在从一个大约有大约。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
如何使删除过程更快?