一、问题描述
在日常使用运维中,一些特殊情况需要批量删除陈旧或异常数据。
如果通过 delete from 【表名】 where 【条件】
直接删除,可能会由于数据量过大,事务执行时间过长,造成死锁。
二、解决方案
通过 Procedure 使用循环的方式,分批删除分批提交事务。
执行 Procedure 语句如下:
CREATE DEFINER=`admin_rw`@`10.%` PROCEDURE `P_DELETE_MACHINE_ALARM`()
BEGIN
#Routine body goes here...
WHILE (select count(*) FROM 【表名】WHERE 【条件】
DO
DELETE FROM 【表名】WHERE【条件】 LIMIT 1000;
END WHILE;
END