微博上讨论MySQL在删除大表engine=innodb(30G+)时,如何减少MySQL hang的时间,现做一下简单总结:
当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时, 删除文件需要去把这个文件相关的所有数据块清除,所以会比较耗时)
MySQL 删除大表的性能问题解决方案
2019-12-12 16:32MYSQL教程网 Mysql
MySQL在删除大表engine=innodb(30G+)时,如何减少MySQL hang的时间,本为将提供详细的解决方案,需要了解的朋友可以参考下
延伸 · 阅读
- 2019-12-12mysql存储过程事务管理简析
- 2019-12-12mysql导出导入中文表解决方法
- 2019-12-12mysql如何让自增id归0解决方案
- 2019-12-12MySQL如何导入csv格式数据文件解决方案
- 2019-12-12Ubuntu10下如何搭建MySQL Proxy读写分离探讨
- 2019-12-12mysql之innodb的锁分类介绍
- Mysql
MySQL中使用case when 语句实现多条件查询的方法
今天在一个应用中使用到了一个比较特殊的数据查询要求。需要的朋友可以参考下。 ...
- Mysql
Starting MySQL.Manager of pid-file quit without updating file.[FAILED]的解决方法
因为硬盘满了,Starting MySQL.Manager of pid-file quit without updating file.[FAILED] ...
- Mysql
找到MySQL的优点
假设你是一个Access开发人员,而你想移植一个Access后台到一个本地的MySQL 服务器用于开发和测试。你将维护你自己的解决方案并乐于使用Community Server ...
- Mysql
Mysql5.7修改root密码教程
今天小编就为大家分享一篇关于Mysql5.7修改root密码教程,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...
- Mysql
mysql 主从服务器的简单配置
首先呢,需要有两个mysql服务器。如果做测试的话可以在同一台机器上装两个mysql服务程序,注意要两个运行程序的端口不能一样。我用的是一个是默认的...
- Mysql
MySQL通过show processlist命令检视性能的讲解
今天小编就为大家分享一篇关于MySQL通过show processlist命令检视性能的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一...
- Mysql
mysql三种批量增加的性能分析
最近在深入学习hibernate,在进行批量操作时,发现hibernate批量操作性能非常低.于是就想找一个性能较高的方法,在对jdbc、jdbcTemplate、hibernate进行测试后,发现...
- Mysql
mysql修改数据库默认路径无法启动问题的解决
这篇文章主要给大家介绍了关于mysql修改数据库默认路径无法启动问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的...