开发者社区> 像教授> 正文

MySQL 删除大表的性能问题

简介:
+关注继续查看

微博上讨论MySQL在删除大表engine=innodb(30G+)时,如何减少MySQL hang的时间,现做一下简单总结:(微博地址:http://weibo.com/1642466057/yuPz2guYJ

当buffer_pool很大的时候(30G+),由于删除表时,会遍历整个buffer pool来清理数据,会导致MySQL hang住,解决的办法是:

1、当innodb_file_per_table=0的时候,以上不是问题,因为采用共享表空间的时候,该表所占用的空间不会被删除,buffer pool中的相关页不会 被discard。

2、当innodb_file_per_table=1的时候,并且当buffer_pool比较大的时候,遍历整个buffer pool 需要很多的时间(table_cache 会被锁住,所有的DML操作被阻止)。

认识误区:

将innodb 表改为 myisam表,这个是没有效果的,该操作会删除旧表,建立新表,依然会遍历整个buffer_pool。

解决思路:

1、采用脚本形式,批量删除部分记录

2、可以再slave上进行操作,进行主备切换(成本高)

3、Percona 5.1.58以上版本都支持innodb_lazy_drop_table(bug不少,慎用)

4、与buffer pool无关,但是可以加快 删除数据文件的速度,同样能减少MySQL hang住的时间。即:对数据文件建立硬链接,(依赖原理:OS HARD LINK 当多个文件名同时指向同一个INODE时,这个INODE的引用数N>1, 删除其中任何一个文件名只是删除了一个指针而已,不会删除数据文件。当INODE的引用数N=1时, 删除文件需要去把这个文件相关的所有数据块清除,所以会比较耗时

参考链接:

faster drop

performance drop

安全删除大表






本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/947985,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MySQL-在线处理大表数据 & 在线修改大表的表结构
MySQL-在线处理大表数据 & 在线修改大表的表结构
14 0
MySQL-性能优化_大表和大事务的常用处理方案
MySQL-性能优化_大表和大事务的常用处理方案
20 0
一开工,就遇到上亿(MySQL)大表的优化,我的天啊!
XX实例(一主一从)xxx告警中每天凌晨在报SLA报警,该报警的意思是存在一定的主从延迟(若在此时发生主从切换,需要长时间才可以完成切换,要追延迟来保证主从数据的一致性)
54 0
MySQL大表历史数据迁移
MySQL大表历史数据迁移
72946 0
MySQL大表历史数据迁移
顾名思义就是将某个地方的历史数据转移到另外一个地方。需求明了,就一句话能够概括完整。其中要涉及的技术,其实也不是很难。无非是设计一个复制数据的流程,设计一个插入数据的流程和一个删除数据的流程。有三个流程去完成这件事情,节本就能搞定。当然,我们不能仅仅考虑把流程设计的能执行就好,还需要保障流程的健全性。虽然三个流程,就有了可行性,并且在实际应用中基本这三个流程是不可缺少的。
147 0
每日一面 - MySQL 大表添加一列
每日一面 - MySQL 大表添加一列
128 0
每日一面 - mysql 大表批量删除大量数据
每日一面 - mysql 大表批量删除大量数据
213 0
MySQL 大表优化方案(长文)
单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候My
142 0
MySQL大表优化方案
MySQL大表优化方案
91 0
+关注
像教授
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
高效MySQL的N个习惯
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像