在存储过程中,我正在删除具有约2个表的记录。 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
则可以发现
--- TRANSACTION 1337539617,ACTIVE 24742秒获取正在使用的mysql表行1,已锁定1 2865309锁定结构,堆大小296810024, 127249417行锁,撤消日志条目38722014 MySQL线程ID 2088760,OS线程句柄0x7fdaa9fff700,查询ID 1714447623 com.prod.mysql 10.10.10。 dbguru系统锁定从检查位置删除 FKEXAMEVENTID =事件ID按ID限制ORDER_CNT
我可以在很短的时间内看到updating
状态,然后在6-7小时后再次出现system lock
状态。我收到错误lock wait timeout exceeded try restarting transaction
如何使删除过程更快?