删除大型表的查询耗时较长,且错误锁定等待超时超过

时间:2019-01-21 05:16:49

标签: mysql

在存储过程中,我正在删除具有约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

如何使删除过程更快?

0 个答案:

没有答案