爱若晨风 发表于 2018-10-7 13:49:04

mysql 生产库大表delete

  mysql 生产库大表删除
  一般线上业务增长较快,造成某些表达到分表的临界值,表行数超过2000w且查询频繁,如表业务没有较多的聚合查询的话,可以考虑按时间归档部分历史数据。现推荐2种本人之前使用过的删除方式。

[*]  按照主键或者索引拆分后分段执行,使用存储过程
  需要注意这种大表删除,如果是在主库执行,尽量把会话改成语句格式,以保证不会出现复制延迟
  语句如下:set session binlog_format='STATEMENT';
CREATE PROCEDURE sp_delete_data()  
BEGIN
  
set session binlog_format='STATEMENT';
  
label:
  
WHILE (1 = 1)
  
DO
  
DELETE FROM table where aaa like 'bbb%' LIMIT 10000;
  
SET @a1 = ROW_COUNT();
  
IF @a1 = 0 THEN
  
    LEAVE label;
  
END IF;
  

  
END WHILE;
  
END
  limit使用的行数,可以线上测试下,在不影响业务库性能的情况下最大化删除行数。
  2.使用percona tools中的pt-archiver来清理过期数据,做数据归档,也可以二者可以同时进行
  需要注意参数为--limit 5000 --txn-size 5000性能调优参数具体值可以测试调整优化,尽量多事务提交以提高执行效率.
  1)清理过期数据
  pt-archiver--source h=localhost,P=3306,u=ceshi,p=111111,D=test,t=example -- --purge --where 'id
页: [1]
查看完整版本: mysql 生产库大表delete