一、问题描述
在日常使用运维中,一些特殊情况需要批量删除陈旧或异常数据。
如果通过 delete from 【表名】 where 【条件】 直接删除,可能会由于数据量过大,事务执行时间过长,造成死锁。
二、解决方案
通过 Procedure 使用循环的方式,分批删除分批提交事务。
执行 Procedure 语句如下:
-- 存储过程
CREATE PROCEDURE p_del_table1()
BEGINWHILE (select count(*) FROM table1 WHERE bizmonth<'202401')DODELETE FROM table1 WHERE bizmonth<'202401' LIMIT 5000;END WHILE;
END;-- 调用函数
CALL p_del_table1();