您的位置:首页 > 其它

大表百万条以上记录非主键索引删除大量数据的操作方法

2016-03-29 11:45 274 查看
众所周知,上百万表数据类似上述写法,哪怕where条件命中索引,执行时间也不会低于10分钟;考虑对数据的操作会引起两表的排他锁,造成业务被暂停!从服务器资源的影响:IOPS升高,IO争用造成CPU等待(高CPU);删除表存在的大量空间碎片,造成的空间浪费及性能低下

这种需求可以采用中间表rename方法,将要保留的数据写入中间表,写入完成后将原表删除,并将中间表改名为原始表;

具体操作步骤如下:

其他应用案例

该思想起源facebook的mysql path,也是大名鼎鼎pt-online-schema-change工具的实现原理。

可应用于在线改表结构,在线修改表数据,原则上来讲可以实现秒级别的表锁定,对业务的0伤害

同学们在程序实现时还可灵活的使用其他方法:

SET SESSION lock_wait_timeout=60;SET SESSION innodb_lock_wait_timeout=1;SET SESSION wait_timeout=10000

(innodb_lock_wait_timeout指的是事务等待获取资源等待的最长时间,超过这个时间还未分配到资源则会返回应用失败;)

如有类似需求,请将该思想运用到你们的项目中吧。

OVER!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: